https://jojoldu.tistory.com/412
일급객체 만들기 : 객체를 클래스로 Wrapping하고 객체에 add나 set을 할 수 없게 막는다.
1. 불변으로 만들 수 있다. Setter, Getter를 만들지 않고, validation하는 코드를 넣어놓으면 외부에서 다른 사람이 파라미터로 받아오는 객체를 마음대로 수정할 수 없다.
2. 하나의 기능을 온전히 표현한다. 각 필드값을 마음대로 set하는 것이 아니라, 해당 로직에 필요한 필드값만 원하는 값으로 처리하므로, 다른 사람이 해당 객체를 보면 어떤 기능을 할 수 있는지 정확히 알 수 있다.
3. 유지보수에 유리하다. set을 2개 따로하는 로직이 프로젝트 전체에 퍼져있으면 내가 수정을 원하는 부분이 어딘지 알기 어렵지만,하나의 객체로 묶어놓으면 해당 부분만 찾아서 수정을 가하면 된다.
결론적으로, 일급 객체로 만들어서 처리하면 좀 더 명확하고 안정적인 프로그래밍이 가능해진다.
다만, 일급 객체를 만드는 것은 메서드가 충분히 공통화가 가능해서 다른 곳에서 사용될 가능성이 높을때 유효하다. 파라미터로 특정 Dto 타입을 받게 된다면 다른 도메인에서 이 객체를 참조하는 것은 기능 분리의 원리를 위배하게 된다. 애초에 Dto 타입을 파라미터로 받는 것이 좋지 않으므로 파라미터를 최대한 Dto와 상관없는 기본형, 자바의 참조형 타입으로 만들어주는 것이 좋다.
그리고 validation이 없다면 일급 객체를 만드는 의미가 없을 것 같다. 다른 사용자가 해당 일급 객체의 파라미터를 자유롭게 수정하여 전달한다면 일급 객체가 무효화될 수 있을 것 같다.
'Programming-[Backend] > Java' 카테고리의 다른 글
[자바 기초] 2. 자바의 동작원리 : 클래스 로딩과 JVM 메모리 (0) | 2021.12.14 |
---|---|
[자바 기초] 1. 자바의 동작원리 : 프로그래밍의 동작 원리 (0) | 2021.12.13 |
[TIL][TDD] TDD 4편. 자바 Reflection 의 원리와 활용, Spring의 ReflectionTestUtils.invokeMethod (0) | 2021.11.17 |
[TIL] 자바 리스트 2개 이상 stream으로 순차적으로 비교 처리하기 : LongStream, IntStream (0) | 2021.11.16 |
[TIL][TDD] TDD 3편. 인터페이스 분리로 테스트는 분리, 서비스는 트랜잭션으로 묶기 (0) | 2021.11.16 |