본문 바로가기

코딩 스탠다드/OOP

(3)
DDD 관점에서 연관관계 *상위 문서: 코드 리뷰: 불완전한 객체에서 나타난 문제들*데이터 모델링이나 메모리가 아닌 DDD의 모델링 관점에서 연관관계에 관한 글입니다. (맨 아래 추가 1 참조)A. 개요    한창 JPA를 사용하면서 엔티티끼리 서로를 가지는 연관관계로 모델링을 하는 방법에 익숙했습니다. 그러나 DDD를 관해 공부하고 토론하며 에그리거트 간의 경계를 지키기 위해서는 서로 다른 에그리거트의 경우 약한 참조로 구성하는 것이 좋을 수도 있겠다 생각이 들어 엔티티의 연관관계에 대해 알아보기 위해 내용을 정리해 보았습니다.  * 애그리거트(Aggregate): 하나의 비즈니스 트랜잭션 일관성의 경계로 단일 트랜잭션에서 같은 비즈니스의 규칙과 제약에 따라 같이 변경되는 범위.'로그인', '회원가입'처럼 논리적인 개념으로 하..
안정성을 더하는 불변객체 *상위 문서: 코드 리뷰: 불완전한 객체에서 나타난 문제들A. 불변 객체란   불변 객체는 객체 생성 이후 내부 상태가 변하지 않는 객체입니다. 값이 변해야 한다면 새로운 객체 만들어 리턴하고, 참조에 의해 가변될수 있는 필드가 있다면 getter시 방어적 복사(defnesive-copy)를 통해 제공하며, 가변 가능한 객체를 인자(parameter)로 받게 될 때 또한, 방어적 복사로 받아서 사용합니다.    OOP에서 객체들이 일관성을 가지고 협력하기 위해서는 객체의 신뢰성이 중요합니다. 요청을 했을때, 기대했던 대로 일관적으로 동작을 하려면, 객체의 필드는 예상치 못하게 변화하면 안됩니다. 객체의 불완전한 상태와 가변상태 모두 예상치 못한 값을 리턴할 수 있기에 신뢰를 잃게 되고 이러한 객체들의 협..
객체는 불완전하게 사용 되면 안된다. (일관성 지키기) *상위 문서: 코드 리뷰: 불완전한 객체에서 나타난 문제들A. 불완전한 객체를 사용하면 안되는 이유. 1. 객체의 일관성이 없어져서 믿고 사용하기 어려워 집니다.     불완전한 객체의 존재가 가능해졌기 때문에 현재 객체가 어떤 상태일지 짐작하기 어려워 질 위험에 처했습니다. 그나마 setter를 public 하지 않게 사용한다면 Null Pointer Exception (NPE)가 예상치 못하게 생길 수 있을 수 있는 정도로 조금 더 문제의 범위가 줄어 들수 도 있지만, 예상을 할 수 없다는 것은 이미 객체간 협력에서 맡은 책임을 정확히 할 수 없다는 것입니다.     일관성이 없는 객체는 객체간 협력에서 맡은 바를 하기 힘들어져서 재사용하기가 어렵습니다. 결국 모델링된 설계대로 객체는 동작하지 않고 ..