기능 | 설명 | Java 버전 |
Text Blocks (""") | 멀티라인 문자열 | Java 15 정식 |
Switch Expression | 값 반환형 switch | Java 14 정식 |
Records | 자동 DTO 클래스 | Java 16 정식 |
Pattern Matching for instanceof | instanceof + 형변환 생략 | Java 16 정식 |
Sealed Classes | 상속 가능한 하위 클래스 제한 | Java 17 정식 |
var 키워드 | 지역 변수 타입 추론 | Java 10 정식 |
1. 텍스트 블록 (Text Block)
[AS-IS]
String json = "{\n" +
" \"name\": \"홍길동\",\n" +
" \"age\": 30\n" +
"}";
[TO-BE]
String json = """
{
"name": "홍길동",
"age": 30
}
""";
- \n, + 없이도 줄 바꿈과 들여 쓰기 표현 가능
- 가독성이 매우 좋아지고, 특히 HTML/SQL/JSON 등 다중 문자열에 유리
2. 스위치 표현식 (Switch Expression)
[AS-IS]
int num = ...;
String result;
switch (num) {
case 1:
result = "ONE";
break;
case 2:
result = "TWO";
break;
default:
result = "OTHER";
}
[TO-BE]
int num = ...;
String result = switch (num) {
case 1 -> "ONE";
case 2 -> "TWO";
default -> "OTHER";
};
- 가독성 향상
- 코드 라인 수 감소
- 버그 가능성 감소 (특히 switch break 누락)
- 표현력 있는 코드 작성 가능
3. Records (레코드 클래스)
getter, equals, hashCode, toString 자동 생성 되지만, 모든 필드가 final (불변) 이다.
public record User(String name, int age) {}
User user = new User("홍길동", 30);
System.out.println(user.name()); // "홍길동"
- getter, equals, hashCode, toString 자동 생성
- DTO, VO 같은 단순 데이터 객체에 유용
- JavaBean 패턴보다 훨씬 간결
4. Pattern Matching for instanceof
[AS-IS]
if (obj instanceof String) {
String s = (String) obj;
}
- obj가 null일 경우 NullPointerException 발생
- 따로 형변환 필요
[TO-BE]
if (obj instanceof String s) {
System.out.println(s.toLowerCase());
}
- instanceof 연산자는 obj가 null이면 항상 false를 반환해서 null 체크 역할도 함
5. Sealed Classes (봉인 클래스)
상속 가능한 클래스를 명시적으로 제한하는 기능
public sealed class Shape permits Circle, Square {}
final class Circle extends Shape {}
final class Square extends Shape {}
- 유지보수성과 보안성 향상
6. Local Variable Type Inference (var)
지역 변수의 타입을 var로 생략 가능
var list = new ArrayList<String>(); // 타입 자동 추론
- 가독성 향상
- 복잡하거나 불분명한 경우엔 지양
반응형
'Java' 카테고리의 다른 글
[Spring Boot] @ConfigurationProperties 프로퍼티 바인딩 방법 (0) | 2024.06.25 |
---|---|
[Spring Boot] Logback 사용한 원하는 위치게 로그 파일 생성 방법 (0) | 2024.05.17 |
[Spring Boot/Spring Cloud] MSA - Spring Cloud Config 외부 설정 관리 (0) | 2023.12.25 |
[IntelliJ] GitLab 이클립스 프로젝트 IntelliJ에 import 방법 (0) | 2023.09.25 |
[Spring Boot/Spring Cloud] MSA - API Gateway를 사용한 로드밸런싱 방법 (0) | 2023.08.04 |