1. record ( From java 14 )
record는 간결하면서, 변경 불가한 객체를 위한 새로운 타입입니다. record를 사용하면 기존에 장황했던 코드를 몇 줄의 간결한 코드로 축약할 수 있습니다. 👍
다음 샘플 코드를 통해 기존 방식과의 차이점을 알아봅니다.
public class Human {
private String name;
private int age;
private String address;
public Human(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Human [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
record 를 사용하면 다음과 같이 간략해집니다.
public record Human(String name, int age, String address) {}
- record는 불변객체로써 setter method가 없습니다.
- toString, equals, hashCode 함수가 자동으로 생성됩니다.
2. sealed ~ permits
sealed 키워드를 사용하여 interface를 implement하는 클래스를 제한(permit)할 수 있습니다.
설명하니 약간 어려워 보이는데, 다음의 예제를 보면 간단히 이해할수 있습니다. 😁
sealed interface Shape permits Circle, Square, Rectangle {
int getArea();
}
final class Circle implements Shape {
int radius;
Circle(int radius) {
this.radius = radius;
}
public int getArea() {
return (int) (Math.PI * radius * radius);
}
}
final class Square implements Shape {
int side;
Square(int side) {
this.side = side;
}
public int getArea() {
return side * side;
}
}
final class Rectangle implements Shape {
int width, height;
Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public int getArea() {
return width * height;
}
}
- permits 절에 명시된 클래스 외에 클래스는 Shape를 implement할 수 없습니다.
- 이는 위의 예제에서 처럼 특정 클래스에 제한된 확장을 갖게 하고 싶을때 유용하게 사용됩니다.
3. Text Blocks
개인적으로 제일 기다려온 기능입니다. 문자열 가공 혹은 디스플레이에 있어 개행 값을 표현하기 위해 \n 을 무수히 써가며 StringBuilder 같은 클래스를 썼던걸 기억하나요? 네. 17버전에서는 멀티라인 문자열 표현이 """ 을 사용하여 표현가능합니다. 파이썬과 비슷하죠?
String html = """
<html>
<body>
<p>Hello, World!</p>
</body>
</html>
""";
4. Pattern Matching
Java의 모든 객체는 Object 를 상속받습니다. Object객체의 타입을 switch에서 구분햘 수 있습니다.
Object obj = ...;
switch (obj) {
case 0:
System.out.println("zero");
break;
case String s:
System.out.println(s.length());
break;
case int i:
System.out.println(i);
break;
default:
System.out.println("unknown");
}
반응형
'Web Programming' 카테고리의 다른 글
Curl 자주 사용하는 커맨드 예제 및 옵션( Json payload, POST, GET 등 ) (0) | 2023.02.08 |
---|---|
RESTFul API 패키지 구조 설계안 ( 버전 우선, 도메인 우선 등 방식 비교 ) (0) | 2023.01.30 |
Java 11 주요 특징 with 예제 샘플 코드 (0) | 2023.01.28 |
Java - 문제 해결: UnrecognizedPropertyException: Unrecognized field (0) | 2022.11.24 |
Java Map객체를 Pojo(Model) class로 변환 ( JsonSetter, ObjectMapper 사용법 ) (0) | 2022.11.24 |