홈 › 고급 › 07 / 10

Java 21 모던 문법

var, record, 텍스트 블록, switch 식, 패턴 매칭, sealed
섹션 7진행 0 / 10

5. 자주 하는 실수 (Tip)

❌ 실수 1: var 에 다이아몬드를 쓴다

java
var list = new ArrayList<>();      // ArrayList<Object>
var list = new ArrayList<String>();   // ✅

❌ 실수 2: record 를 엔티티로 쓴다

JPA·MyBatis 결과 매핑 중 setter 를 요구하는 곳에 record 를 넣으면 매핑이 안 되거나 예외가 납니다. MyBatis 는 생성자 매핑(<constructor> 또는 인자 이름 기반)으로 가능하지만, 변경이 필요한 엔티티는 클래스로 둡니다.

❌ 실수 3: sealed 타입의 switch 에 default 를 넣는다

java
case Approved a -> ...; case Declined d -> ...; default -> "?";   // Pending 을 빠뜨려도 컴파일 통과

default 가 완전성 검사를 무력화합니다. 새 경우가 추가될 때 알림을 받으려면 default 를 빼고 전부 나열합니다.

❌ 실수 4: 가드 case 를 일반 case 뒤에 둔다

java
case Circle(double r) -> ...;
case Circle(double r) when r > 5 -> ...;   // 컴파일 오류: 이 case 는 도달 불가

❌ 실수 5: switch 에 null 이 들어온다

case null 이 없으면 NullPointerException. 인자가 null 일 수 있으면 case null 을 두거나 호출 전에 거릅니다.

❌ 실수 6: 텍스트 블록의 닫는 따옴표 위치

닫는 """ 를 내용보다 오른쪽에 두면 들여쓰기가 남고, 같은 줄에 두면 끝 줄바꿈이 사라집니다. SQL 을 이어 붙일 때 끝 줄바꿈 유무로 WHERE 가 앞 줄에 붙어 오류가 납니다.

❌ 실수 7: Stream.toList() 결과를 수정한다

collect(Collectors.toList()) 는 가변이었지만 toList() 는 수정 불가입니다. add 하면 UnsupportedOperationException. 수정이 필요하면 new ArrayList<>(stream.toList()).