개발 실수 교정 - 1

박윤택·2023년 9월 6일
0

JAVA

목록 보기
13/14

객체 종류

(참고) 객체의 구성 요소를 생각하기보다는 행동을 위주로 설계를한다면 OOP에 더 가까운 설계가 될 수 있다.

VO (Value Object)

변하지 않는 객체, 불변해야 하며, 동일하게 생성된 두 VO는 영원히 동일한 상태임을 유지해야한다.
잘못된 상태로는 만들어질 수 없으며 항상 유효한 객체여야 한다. -> validation 과정을 거쳐야 한다.

class PersonInfo {
	private final long id;
    private final String name;
    
    public PersonInfo(long id, String name) {
    	assert id > 0;
        assert StringUtils.isNotEmpty(name);
    	this.id = id;
        this.name = name;
    }
}

여기서 생성자는 두개의 역할만 수행해야한다.
1. 값 검증
2. 값 할당

값을 변경하는 메서드의 리턴값은 새로운 VO를 리턴해야한다. -> VO의 불변성 유지

DTO (Data Transfer Object)

데이터 전달에 사용되는 객체, 상태를 보호하지 않고 모든 속성을 노출하므로 getter/setter가 필요 없다.

public class Persion {
	public long id;
    public String name;
}

Entity

식별자, 수명주기, 저장소에 저장(필수는 아님) 되는 객체

PO (Persistence Object)

일반적으로 생각하는 DB Entity

디미터 법칙

최소한의 지식 원칙(The Principle of Least Knowledge)으로 알려져 있으며, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 것을 의미
객체간의 결합도를 낮추고 자율성을 높여 서로 협력할 수 있도록 함

chain method 사용을 주의하자! 또 객체에게 묻지 말고 일을 시키자 (TDA, Tell, Don't Ask)

순환 참조 지양

지나치게 결합도가 높다.
Serialize 불가

  • 해결법
    컴포넌트 분리 검토
    간접 참조 (ex. 아이디 값을 참조할 수 있도록 객체 구성)

0개의 댓글