Monday
8. Java 14 레코드와 17의 패턴 패칭 본문
레코드(Record) 타입
레코드는 불변 데이터 객체를 간단하게 생성할 수 있는 특별한 클래스 유형입니다. 주요 특징은 다음과 같습니다:
// 레코드 정의 예시
public record Person(String name, int age) {
// 컴팩트 생성자
public Person {
// 유효성 검사 로직 추가 가능
if (age < 0) {
throw new IllegalArgumentException("나이는 음수일 수 없습니다.");
}
}
// 추가 메서드 정의 가능
public boolean isAdult() {
return age >= 18;
}
}
// 사용 예시
Person john = new Person("John Doe", 30);
System.out.println(john.name()); // 자동 생성된 접근자 메서드
System.out.println(john.isAdult()); // 커스텀 메서드
패턴 매칭 for switch 문
패턴 매칭은 switch 문을 더욱 강력하고 표현력 있게 만드는 기능입니다:
// 타입 패턴 매칭
public static String describeObject(Object obj) {
return switch (obj) {
case Integer i -> "정수: " + i;
case String s -> "문자열: " + s;
case List<String> list -> "문자열 리스트: " + list.size() + "개";
default -> "알 수 없는 타입";
};
}
// 사용 예시
System.out.println(describeObject(42)); // "정수: 42"
System.out.println(describeObject(List.of("a", "b"))); // "문자열 리스트: 2개"
레코드 패턴
레코드 패턴을 사용하면 레코드의 구성 요소를 쉽게 분해할 수 있습니다:
public record Point(int x, int y) {}
public static String analyzePoint(Object obj) {
return switch (obj) {
case Point(int x, int y) when x == y ->
"대각선 상의 점: (" + x + ", " + y + ")";
case Point(int x, int y) ->
"일반 점: (" + x + ", " + y + ")";
default -> "알 수 없는 객체";
};
}
// 사용 예시
Point point = new Point(5, 5);
System.out.println(analyzePoint(point)); // "대각선 상의 점: (5, 5)"
중첩 패턴 매칭
복잡한 객체 구조에서도 패턴 매칭을 활용할 수 있습니다:
public record Address(String street, String city) {}
public record Person(String name, Address address) {}
public static String processAddress(Object obj) {
return switch (obj) {
case Person(String name, Address(String street, String city)) ->
name + "의 주소: " + street + ", " + city;
case Address(String street, String city) ->
"주소: " + street + ", " + city;
default -> "알 수 없는 주소 정보";
};
}
// 사용 예시
Address address = new Address("123 Main St", "New York");
Person john = new Person("John Doe", address);
System.out.println(processAddress(john));
// "John Doe의 주소: 123 Main St, New York"
주요 장점들:
- 간결한 데이터 모델링
- 불변성 보장
- 자동 생성된 메서드 (equals(), hashCode(), toString())
- 패턴 매칭을 통한 유연한 데이터 처리
주의사항:
- 레코드는 암시적으로 final
- 명시적 상속 불가
- 필드는 모두 final이며 컴팩트 생성자로 검증 가능
이러한 기능들은 Java 14부터 점진적으로 도입되었습니다.
'언어 > Java' 카테고리의 다른 글
7. Java 예외 처리와 어노테이션 (0) | 2024.11.10 |
---|---|
6. Java 고급 문법 (2) 람다식과 Streams (0) | 2024.11.10 |
5. Java 고급 문법 (1) Generics (0) | 2024.11.10 |
4. Java 객체지향 프로그래밍 (클래스, 상속, 다형성, 인터페이스) (1) | 2024.11.10 |
3. Java 참조 타입(스트링, 배열, enum) (0) | 2024.11.10 |
Comments