객체 지향 프로그래밍(OOP)는 상태와 행동을 하나의 객체로 묶어, 복잡한 엔티티와 그 동작을 자연스럽게 모델링한다. 이를 통해 객체의 경계가 명확하고, 해당 객체의 상태와 행동을 안전하게 관리할 수 있다.
반면, 데이터 지향 설계(DOP)는 데이터를 가능한 불변의 형태로 정의하고, 해당 데이터데 대한 로직은 별도의 코드에서 관리한다. 해당 방식은 record, sealed class, pattern matchin과 같은 기능을 활용해 더 간단하고 명확하게 구분현할 수 있다.
쉽게 말해 복잡하고 상태 변화가 많은 경우 OOP가 간단하고 일시적인 데이터 처리에는 DOP가 유리하다.
따라서 상황에 맞게 OOP와 DOP를 혼합해 사용하는 것이 중요하다.
Java 16에서 처음 등장한 개념으로 다음과 같은 목표를 가진다.
값을 단순히 묶어 객체를 간결하게 정의할 수 있도록 지원
개발자가 행위 확장 보다 불변 데이터 모델리에 집중할 수 있도록 지원
equals, hashCode, toString 등 데이터 접근과 비교에 필요한 메서드를 자동으로 생성
예시
public record Person(String name, Integer age) {}
public final class Person {
private final String name;
private final Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String name() { // public accessor
return name;
}
public Integer age() { // public accessor
return age;
}
// equals, hashCode, toString 자동 생성
}
Person p = new Preson("daehwan", 29);
System.out.println(a.name());
System.out.println(a.age());