JAVA 함수형 프로그래밍 - 레코드
튜플
()
: 한 쌍의 소괄호로 이루어진 리스트와 비슷한 자료구조이다.
구조적 튜플
인덱스를 통해서 접근가능
apple = ('apple', 'red')
banana = ('banana', 'yellow')
cherry = ('cherry', 'red')
fruits = [apple, banana, cherry]
for fruit in fruits:
print(fruit[0], ' 열매의 색상은 ', fruit[1])
명목상 튜플
컴포넌트 명을 통해 접근
typealias Fruit = (name: String, color: String)
let fruits: [Fruit] = [
(name: "apple", color: "red"),
(name: "banana", color: "yellow"),
(name: "cherry", color: "red")
]
for fruit in fruits{
println("\(fruit.name) 열매의 색상은 \(fruit.color)")
}
기본 POJO
POJO: 순수 java 객체 보일러플레이트: toString(), equals(), hashCode()
public class User {
private String userName;
private boolean active;
private LocalDateTime lastLogin;
public User(String userName, boolean active, LocalDateTime lastLogin){
this.userName = userName;
this.active = active;
this.lastLogin = lastLogin;
}
// .. getter setter
// .. hashCode(), equals(), toString()
}
불변 POJO
필드가 재할당 될 수 없는 것 따라서, setter가 없음
public class User {
private final String userName;
private final boolean active;
private final LocalDateTime lastLogin;
public User(String userName, boolean active, LocalDateTime lastLogin){
this.userName = userName;
this.active = active;
this.lastLogin = lastLogin;
}
// .. getter
// .. hashCode(), equals(), toString()
}
레코드
JDK 14버전이상 부터 지원
extends
불가 implements
가능
public record User(String userName, boolean active, LocalDateTime lastLogin, int compareKey) implements Comparable<T> {
@Override
public int compareTo(T o) {
Container container = (Container) o;
return Integer.compare(compareKey(), container.compareKey());
}
}
댓글남기기