자료 전달 객체
자료 구조체의 기본적인 형태는 공개 변수만 있고 함수가 없는 클래스이다.
이런 자료 구조체를 자료 전달 객체(DTO, Data Transfer Object)라 한다
DTO는 데이터베이스에 저장된 가공되지 않은 정보를 어플리케이션 코드에서 사용할 객체로 변환되는 단계에서 가장 처음 사용된다.
좀 더 일반적인 형태는 '빈(bean)'구조이다.
아래 코드를 보면 private 변수를 조회/설정 함수로 조작한다.
이는 사이비 캡슐화로 별다른 의미없는 행동이다.
public class Address{
private String street;
private String city;
public Address(String strret, String city){
this.street = street;
this.city = city;
}
public String getStreet(){
return street;
}
public String getCity(){
return city;
}
}
활성 레코드는 DTO의 특수한 형태로 공개 변수가 있거나 비공개 변수에
조회/설정 함수가 있는 자료 구조지만, save나 find와 같은 탐색 함수도 제공한다.
이는 활성 레코드를 데이터베이스 테이블이나 다른 소스에서 자료를 직접 변환한 결과다.
이러면 자료구조도 아니고 객체도 아닌 잡종 구조가 나오기 때문에 활성 레코드는 자료 구조로만 취급한다.
비즈니스 규칙을 담으면서 내부 자료를 숨기는 객체는 따로 생성하자.
결론
객체는 동작을 공개하고 자료를 숨기는 형태이기 때문에 새로운 객체 타입을 추가하기는 쉬우나 새로운 동작을 추가하기는 어렵고,
자료 구조는 자료를 노출하고, 새 동작을 추가하기는 쉬우나 새로운 자료구조를 추가하기는 어렵다.
시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체를,
다른 경우로 새로운 동작을 추가하는 유연성이 필요하면 자료 구조화 절차적 코드를 사용해라.
'클린 코드' 카테고리의 다른 글
[클린 코드] 오류 처리(1) (0) | 2022.02.03 |
---|---|
[클린 코드] 객체와 자료구조(3) (0) | 2022.01.26 |
[클린 코드] 객체와 자료구조(2) (0) | 2022.01.26 |
[클린 코드] 객체와 자료구조(1) (0) | 2022.01.19 |
[클린 코드] 형식 맞추기(2) (0) | 2022.01.17 |