객체 생성과 타입 변환을 깔끔하고 안정적으로 처리하기 위한 패턴.
Builder와 from()을 조합해서 사용하는 것이 실무에서 가장 명확하고 유지보수에 강한 방식임.
역할: 복잡한 객체 생성을 메서드 체이닝 방식으로 유연하게 처리
특징
builder().field1(...).field2(...))User user = new User();
user.setName("홍길동");
user.setEmail("test@example.com");
user.setAge(30);
User user = User.builder()
.name("홍길동")
.email("test@example.com")
.age(30)
.build();
역할: 다른 타입의 객체(예: Entity → DTO)로 변환
형태
java
복사편집
public static MyDto from(MyEntity entity) {
return MyDto.builder()
.id(entity.getId())
.name(entity.getName())
.build();
}
특징
이 두 가지를 조합해서 쓰면 단순히 "객체 생성 + 변환"을 넘어, 전체 애플리케이션의 코드 구조와 유지보수성이 향상됨.
| 항목 | 설명 |
|---|---|
| 책임 분리 | from()은 변환, Builder는 생성 → 관심사 분리 명확 |
| 가독성 향상 | 체이닝 방식 + 깔끔한 변환으로 직관적 |
| 중복 제거 | Entity ↔ DTO 간 변환 반복 코드 최소화 |
| 확장성 | 필드 추가/변경에도 from()만 고치면 끝 |
| 테스트 용이 | 객체 생성과 변환 로직 각각 독립적으로 테스트 가능 |
| 불변성 보장 | setter 없는 객체도 생성 가능 (특히 DTO나 응답 객체에 적합) |
Builder + from()을 쓰는 게 좋은가