# 면접 CS 정리 Day 5 (풀스택 / Java·Spring·React)

면접 CS 정리 Day 5 (풀스택 / Java·Spring·React)

Q1. == vs equals (문자열)

문제
자바에서 문자열 비교할 때 == 쓰지 말고 equals 쓰는 이유?

  • ==: 주소(참조) 비교
  • equals: 값(내용) 비교

값이 같아도 객체가 다르면 ==는 false, equals는 true.
문자열은 항상 equals로 비교한다.

Q2. IoC / DI

문제
Spring IoC랑 DI가 뭔지 한 줄씩, 왜 new로 직접 안 만들고 주입받는지?

  • IoC: 객체 생성·조립 제어를 컨테이너에 넘김
  • DI: 필요한 의존 객체를 컨테이너가 주입

new 대신 주입하는 이유:

  • 결합도 감소
  • 테스트 시 mock 교체 용이
  • 생명주기·AOP(트랜잭션 등) 적용이 쉬움

(메모리 절약만의 이유는 아님)

Q3. PUT vs PATCH

문제
PUT이랑 PATCH 차이?

  • PUT: 리소스 전체 교체 (빠진 필드가 null로 덮일 수 있음)
  • PATCH: 부분 수정 (넘어온 필드만 변경)

Q4. final 키워드

문제
자바 final이 변수 / 메서드 / 클래스에 붙으면 각각 뭐가 막히는지?

  • 변수: 재할당 불가
  • 메서드: 오버라이드 불가
  • 클래스: 상속 불가

final이라고 해서 객체 내부 필드까지 무조건 불변은 아니다.

Q5. 전역 예외 처리

문제
API 예외를 컨트롤러마다 try-catch 안 하고 공통 JSON으로 내리려면 Spring에서 뭘 쓰는지?


@RestControllerAdvice + @ExceptionHandler로 전역 처리한다.
비즈니스 예외(보통 unchecked)를 던지고, 여기서 잡아 상태코드·JSON 포맷을 통일한다.

Q6. 인덱스 + 컬럼 함수

문제
인덱스가 있는데도 WHERE YEAR(created_at) = 2024처럼
컬럼에 함수를 씌우면 왜 느려질 수 있는지?


인덱스는 보통 컬럼 원본 값 기준으로 만들어진다.
컬럼에 함수를 씌우면 인덱스와 바로 매칭되지 않아 인덱스를 못 타고 풀스캔이 나기 쉽다.

개선 예:
created_at >= '2024-01-01' AND created_at < '2025-01-01'

Q7. state vs props

문제
React에서 stateprops 차이 한 줄씩.

  • state: 컴포넌트 내부 상태, 해당 컴포넌트가 변경 가능
  • props: 부모가 자식에게 내려주는 값, 자식은 읽기 전용

오늘 한 줄 암기

  1. == = 주소 / equals = 값 (반대 주의)
  2. IoC = 제어를 컨테이너에 / DI = 의존성 주입
  3. PUT 전체 / PATCH 부분
  4. final: 변수=재할당X, 메서드=오버라이드X, 클래스=상속X
  5. 컬럼에 함수 씌우면 인덱스 못 탈 수 있음

다음 목표

  • == / equals 매일 한 번씩 복습 (반복 오답)
  • IoC/DI를 “테스트·결합도” 관점으로 말하기