독서 기록/클린 코드

[클린 코드] 6장 객체와 자료 구조

JoJobum 2023. 1. 25.

자료 추상화

 

// 구체적인 Point 클래스
public class Point{
    public double x;
    public double y;
}

// 추상적인 Point 클래스
public interface Point{
    double getX();
    double getY();
    double setCartesian(double x, double y);
    double getR();
}

구체적인 Point 클래스는 구현을 노출한다. 변수를 private으로 하여도 각 값마다 get/set 함수를 제공한다면 구현이 외부로 노출된다. 즉 변수 사이에 함수라는 계층을 넣는다고 구현이 감춰지는 것이 아니다!

구현을 감추기 위해서는 추상화가 필요하고, 그 역할을 해주는 것이 추상 인터페이스이다.

사용자는 추상 인터페이스를 통해 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다

 

// 구체적인 Vehicle 클래스
public interface Vehicle{
    double getFuelTankCapacityInGallons();
    double getGallonsOfGasoline();
}

// 추상적인 Vehicle 클래스
public interface Vehicle{
    double getPercentFuelRemaining();
}

구체적인 Vehicle 클래스는 자동차의 연료 상태를 반환하고, ( 변수값을 읽어 반환 )

추상적인 Vehicle 클래스는 백분율로 알려준다. ( 내부적으로 값을 처리하여 반환 )

 

이 둘 중에 추상화가 더 잘 이뤄진 것은 후자이다. 

즉 자료를 세세하게 공개하기보다 위처럼 추상적인 개념으로 표현하는 것이 더 좋다

 

 

자료/객체 비대칭

(자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수 추가하기 쉬움.

반면, 객체지향 코드는 기존함수를 변경하지 않으면서 새 클래스를 추가하기 쉬움

 

절차적인 코드는 새로운 자료 구조를 추가하기 어려움, 모든 함수를 고쳐야함

객체지향 코드는 새로운 함수를 추가하기 어려움, 모든 클래스를 고쳐야함

 

디미터 법칙

"모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다" 는 법칙

 

잡종 구조

절반은 객체, 절반은 자료 구조인 잡종 구조가 나오는 경우 발생.

But, 이런 잡종 구조는 양쪽의 단점만 모아놓은 구조이기에 피하자

 

자료 전달 객체(DTO, Data Transfer Object)

공개 변수만 있고 함수가 없는 클래스

데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용

 

활성 레코드

DTO의 특수한 형태

공개 변수가 있거나 비공개 변수에 get/set 함수가 있는 자료 구조지만, save나 find 같은 탐색 함수도 제공하는 경우 있음

이를 객체로 취급하면 잡종 구조 발생함, 그렇기에 자료 구조로 취급하자

 

 

 

 

 

 

 

 

 

 

반응형

'독서 기록 > 클린 코드' 카테고리의 다른 글

[클린 코드] 8장 경계  (0) 2023.04.24
[클린 코드] 7장 오류처리  (0) 2023.04.23
[클린 코드] 5장 형식 맞추기  (0) 2023.01.24
[클린 코드] 4장 주석  (0) 2023.01.23
[클린 코드] 3장 함수  (0) 2023.01.21

댓글