Spring boot로 코딩을 하다보면 객체의 값을 변경해줘야 할때가 있다.
방법은 크게 Setter, 생성자, Builder 3가지로 나뉜다.
1. Setter (자바빈즈 패턴)
자바 개발자들은 setter를 지양하라고 한다.
그럼 왜 setter를 지양하고 새로 객체를 생성해야 하는 생성자나 Builder를 사용해야 할까..
(1) 일관성
먼저 setter를 사용하면 언제든 값을 바꿀수 있다는 말이 된다.
다시말해 값을 바꿀수 없는 불변한 객체를 만들지 못한다는 말이 된다.
(2) 가독성
만약 객체의 속성이 엄청 많아서 엄청나게 많은 setter가 있다고 가정한다.
그러면 객체만다 일일히 setName, setAge, ~~~ 을 계속 해주다보면 코드가 아주 더러워지고 나중엔 빠진 set 메소드를 찾고 있을 수도 있다.
2. Constructor (생성자)
그럼 setter대신 생성자를 사용하면 어떨까
Constructor를 사용하면 치명적인 단점이 있다.
(1) 가독성
Student student = new Student("tetedo",10,30,50);
위 코드를 보면 tetedo는 이름이라는걸 유추할 수 있다.
하지만 나머지 속성은 유추하기 매우 힘들다.
Student student = new Student(50,10,30,"tetedo");
또한 값들의 순서가 바뀌어 버린다면 컴파일조차 안되는 경우가 생길 수 있다.
3. Builder
답은 정해져 있었지만 Setter와 Constructor의 단점들을 보면 Builder는 장점밖에 안보인다.
(1) 일관성
Builder 패턴을 사용한다면 setter 메소드가 없기 때문에 객체의 불변성을 보장할 수 있다.
(2) 가독성
Student student = new Student
.Builder()
.name("tetedo")
.mathScore(10)
.scienceScore(30)
.computerScore(50)
.build();
빌더 패턴은 위처럼 어떤 속성에 무슨값을 넣었는지 코드를 보고 바로 알 수 있다. 또한 순서도 상관없다!
4. 결론
코드의 가독성과 객체의 불변성을 위해 Builder 패턴을 많이 사용하자
참고
https://skatpdnjs.tistory.com/13
'개발 > Spring Boot' 카테고리의 다른 글
[Spring Boot] dotenv(.env) 때문에 날려버린 2일 (0) | 2023.05.24 |
---|---|
[Spring Boot] 어노테이션 정리 (0) | 2023.05.17 |
[Spring Boot] Controller, Service, Repository (0) | 2023.05.16 |
[Spring Boot] DTO vs VO vs Entity (0) | 2023.05.14 |
[Spring Boot] DI 와 IoC는 무엇일까? (1) | 2023.05.11 |