0. 개요
다양한 형태의 Class들을 객체화하는 3가지 패턴이 있다.
- 점층적 생성자 패턴
- 자바 빈즈 패턴
- 빌더 패턴
세 가지에 대해 간략히 알아보고 싶다면 아래 블로그를 참고하자.
https://wildeveloperetrain.tistory.com/29
https://wildeveloperetrain.tistory.com/30
1. 자바빈즈 패턴
필자가 현재 사용하고자 하는 자바빈즈 패턴과 그 사용법에 대해 간단히 Alaboja.
1-1. 자바빈즈 패턴이란?
매개변수가 없는 생성자로 객체를 만든 후 Setter 메서드들을 호출해서 원하는 매개변수의 값을 설정하는 방식이다.
장점:
- 코드가 길지만 인스턴스 생성이 쉽다.
- 가독성이 좋다.
단점:
- 객체 하나를 만들기 위해 많은 메서드를 호출해야 한다.
- 객체가 완전히 생성되기 전까지는 일관성이 무너진 상태에 놓이게 된다.
- 클래스를 불변으로 만들 수 없다.
장점 때문에 사용한다고 봐도 되지만... 빌더 패턴의 우수함을 설명하기 위해 등장하는 디자인 패턴이라는 말도 있긴 하다.
1-2. 자바빈즈 패턴 예시
@Setter
@NoArgsConstructor
public class CustomClass {
private int paramInt;
private String paramStr;
private Object paramObj;
}
CustomClass의 애노테이션을 보면 매개변수 필요 없는 생성자가 있고, 각 멤버변수에 대한 Setter가 있다.
그러면 아래와 같이 할 수 있겠다.
CustomClass customClass = new CustomClass();
customClass.setParamInt(123);
customClass.setParamStr("sample string");
customClass.setParamObj(null);
자 이러면 customClass 인스턴스는 값이 채워졌고, 원하는 곳에 쓰면 된다.
흠. 필자의 경우 MyBatis Generator를 쓰는 바람에 domain 클래스에 builder를 추가할 수 없는 상황이라, 고민하다가 차선책으로 자바빈즈 패턴을 사용했다.
+) 다음날 알게된 사실인데
MyBatis Generator의 plugin 중 FluentBuilderPlugin이 있는데, 이를 설정하면 generate된 domain 객체들에게도 Builder를 생성해주는 기능이 있었다.
new CustomClass().withParam1("123").withParam2("234"); 이런 식으로 빌더를 사용할 수 있게 된다...
그래서 프로젝트에서 모든 자바빈즈 패턴을 다시 빌더 패턴으로 바꿔줬다!
'코딩 > WEB 개발' 카테고리의 다른 글
HTTP Method, PUT과 PATCH의 차이점 (0) | 2023.06.28 |
---|---|
동시 편집에 대해... (0) | 2023.06.19 |
RESTFul한 API 설계 (0) | 2023.06.14 |
세션, 세션의 보안, HttpSession (0) | 2023.06.13 |
MyBatis, MyBatis-Spring 동작 원리 (0) | 2023.06.11 |