instanceof 패턴 매칭(Instanceof Pattern Matching) 도입
// 12 버전
Object obj = "Hello, World";
if (obj instanceof String) {
String str = (String) obj; // 명시적으로 형변환
System.out.println(str.toUpperCase());
}
// 14 이후
Object obj = "Hello, World";
if (obj instanceof String str) {
System.out.println(str.toUpperCase()); // 형변환 생략해도 가능
}
개선된 스위치 표현식(Switch Expressions)
String dayName = switch (day) {
case "MON", "TUE", "WED", "THU", "FRI" -> "Weekday";
case "SAT", "SUN" -> "Weekend";
default -> {
if (day.isBlank()) {
yield "Empty day"; // break 없이 switch 탈출 가능
}
yield "Unknown day";
}
};
신규 타입 Record
- 데이터를 간결하게 표현하고 데이터 클래스의 기본 구현을 자동으로 생성하는 목적
- 불변(immutable) 혹은 읽기 전용이라는 특징이 있기 때문에 필드 값을 변경하는 Method가 없음.
- equals(), hashcode(), toString(), getter가 기본적으로 제공됨
public record Person(String name, int age) {
// Record의 생성자(Constructor)에 의해 필드 초기화됨
// Method, Field 추가 가능
public String greet() {
return "Hello, my name is " + name + " and I am " + age + " years old.";
}
}
// Record 객체 생성
Person person1 = new Person("Alice", 30);
Person person2 = new Person("Bob", 25);
// 컴파일 에러
// person1.name("New Name");
// person1.age = 31;
// 필드 접근
System.out.println("Name: " + person1.name()); // "Alice"
System.out.println("Age: " + person1.age()); // 30
// equals() 메서드로 레코드 객체의 동등성 비교
boolean isEqual = person1.equals(person2); // false
// hashCode() 메서드로 해시코드 생성
// 해시코드 값
System.out.println("Hash Code: " + person1.hashCode());
// toString() 메서드로 문자열 표현
String strRep = person1.toString(); // "Person[name=Alice, age=30]"
// Record의 추가 메서드 사용
// "Hello, my name is Alice and I am 30 years old."
System.out.println(person1.greet());
반응형
'Java > History' 카테고리의 다른 글
Java 17 대표 코드 (0) | 2024.12.16 |
---|---|
Java 15, 16 대표 코드 (0) | 2024.12.16 |
Java 11 대표 코드 (0) | 2024.12.16 |
Java 9, 10 대표 코드 (0) | 2024.12.16 |
Java 8 대표 코드 (1) | 2024.12.16 |