Builder
는 유연하지만 쓰기 번거로움 --> of()
는 Builder
를 감싸는 편의 메서드 역할을 함
- static: 클래스 레벨에서 접근할 수 있게 함 (new 없이 사용 가능)
- of(): 명확한 의미 전달 + Builder 감싸기
- 장점: 가독성 향상 + 재사용성 증가 + 실수 방지 + 일관성 있는 생성
클래스가 DTO(데이터 전송 객체)일 때
Builder가 있지만 자주 쓰는 형태로 간편하게 만들고 싶을 때
다양한 초기화 방식(예: 일부 필드만 설정하는 경우)이 필요할 때
불변 객체(immutable)를 만들고 싶을 때, 생성자를 막고 팩토리 메서드만 제공하는 전략으로도 사용됨
Lombok 라이브러리에서 제공하는 어노테이션
복잡한 객체 생성 로직을 '더 읽기 쉬운 방식'으로 바꿔주는 패턴
User user = new User("홍길동", 25, "seoul@gmail.com");
어떤 값이 어떤 필드에 들어가는지 헷갈림
순서를 바꾸면 큰 문제가 생김
선택적인 필드를 넣기 어려움
User user = User.builder()
.name("홍길동")
.age(25)
.email("seoul@gmail.com")
.build();
주의할 점
@JsonInclude
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private String email;
private String phone; // null일 수 있음
}
User user = new User();
user.setName("홍길동");
user.setEmail("hong@test.com");
user.setPhone(null); // null 설정
{
"name": "홍길동",
"email": "hong@test.com"
// "phone"은 null이라서 아예 빠짐!
}
자바 진영에서 객체(Object) 와 JSON 간 변환(직렬화/역직렬화) 을 처리할 수 있게 해주는 대표적인 라이브러리
즉, 자바 객체 --> JSON or JSON --> 자바객체 로 바꿔주는 도구
ObjectMapper mapper = new ObjectMapper();
User user = new User("홍길동", 25, "hong@test.com");
String json = mapper.writeValueAsString(user);
결과:
{
"name": "홍길동",
"age": 25,
"email": "hong@test.com"
}
String json = "{\"name\":\"홍길동\",\"age\":25,\"email\":\"hong@test.com\"}";
User user = mapper.readValue(json, User.class);
결과:
user.getName(); // "홍길동"
user.getAge(); // 25
실무에서는 대부분 Jackson을 씀
Spring Boot가 기본 내장하고 있어서 설정이 간단하다