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

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

Q1. 오버로딩 vs 오버라이딩

문제
오버로딩이랑 오버라이딩 차이? 컴파일/런타임 중 언제 결정되나?

  • 오버로딩: 같은 이름, 파라미터(개수/타입/순서)가 다름 → 컴파일 때 결정
  • 오버라이딩: 부모 메서드를 재정의런타임에 실제 객체 타입 기준 (동적 바인딩)

반환 타입만 다르게는 오버로딩이 안 된다.

Q2. REQUIRED vs REQUIRES_NEW

문제
REQUIRED(기본)랑 REQUIRES_NEW 차이? 트랜잭션이 이미 있을 때.

  • REQUIRED: 있으면 참여, 없으면 새로 시작
  • REQUIRES_NEW: 항상 새 트랜잭션. 기존은 잠시 보류. 커밋/롤백이 바깥과 따로

있으면 쓰고 없으면 안 쓴다SUPPORTS다. REQUIRED가 아니다.

Q3. Dirty / Non-repeatable / Phantom

문제
세 현상 한 줄씩 + 막는 최소 격리수준.

  • Dirty Read: 남의 커밋 전 데이터를 읽음 → READ COMMITTED
  • Non-repeatable Read: 같은 행을 다시 읽었더니 값이 바뀜REPEATABLE READ
  • Phantom Read: 같은 조건 재조회 시 행이 늘거나 줄어듦SERIALIZABLE

Dirty = 미확정 값 / Non-repeatable = 그 행의 값 / Phantom = 행 개수.

Q4. @RequestParam / @PathVariable / @RequestBody

문제
각각 어디서 값을 받나?

  • @RequestParam: 쿼리스트링 (?type=admin)
  • @PathVariable: URL 경로 (/users/3)
  • @RequestBody: JSON 본문 (보통 DTO)

GET /users/3?type=admin → PathVariable=3, RequestParam=type.

Q5. useState vs useRef

문제
값 변경 시 리렌더 여부로 차이.

  • useState: 값 변경 시 리렌더
  • useRef: .current가 바뀌어도 리렌더 안 함

화면 상태 = state, DOM 접근·렌더와 무관한 값 = ref.

Q6. 비관적 락 vs 낙관적 락

문제
차이 + 각각 언제 쓰는지.

  • 비관적: 조회 시 미리 잠금 (SELECT … FOR UPDATE). 충돌이 잦을 때
  • 낙관적: 저장 시 버전으로 충돌 감지. 충돌이 드물 때

비관적 = 먼저 잡고 수정 / 낙관적 = 일단 수정하고 버전 검증.

Q7. @Transactional + this 호출

문제
같은 클래스에서 this.xxx()로 호출하면 왜 트랜잭션이 안 먹을 수 있나?


트랜잭션은 프록시가 호출을 가로챌 때 적용된다.
this.xxx()는 프록시를 안 지나서 @Transactional이 적용되지 않을 수 있다.

해결: 트랜잭션 메서드를 다른 Bean으로 나눠 주입받아 호출.

오늘 한 줄 암기

  1. 오버로딩 = 컴파일 / 오버라이딩 = 런타임
  2. REQUIRED = 있으면 참여 / REQUIRES_NEW = 항상 새로
  3. Dirty=미커밋 / Non-repeatable=값변경 / Phantom=행수변경
  4. useState 리렌더 O / useRef 리렌더 X
  5. this 호출 = 프록시 우회 → 트랜잭션 안 먹을 수 있음

다음 목표

  • REQUIRED를 SUPPORTS랑 헷갈리지 않기
  • Dirty / Non-repeatable / Phantom을 격리수준 이름까지 말하기