[클린코드] 챕터6 - 객체와 자료 구조

이호석·2022년 2월 28일
0

클린코드

목록 보기
7/9

챕터 6. 객체와 자료 구조

자료 추상화

//구체적인
public class Point{
	public double x;
    public double y;
}
//추상적인
public inteface Point{
	double getX();
    double getY();
    void setCartesian(double x, dobule y);
    .....
}

첫 번째 함수는 절차적이며 구현을 노출하며, 좌표 값을 읽고 설정하도록 강제한다. 이는 변수를 private으로 설정하고 get, set함수를 제공한다고 해도 구현을 외부로 노출하는 셈이다. 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스이다.

자료/객체 비대칭

  • 객체 : 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개
  • 자료 구조(절차 지향) : 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.

두 정의는 본질적으로 상반된다. 장점과 단점 또한 상반되는데,
절차지향의 코드는 기본 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽지만, 새로운 자료구조를 추가하기 어렵다. 반면 객체지향의 코드는 새로운 함수를 추가하기 어렵지만, 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. 즉 새로운 자료 타입을 추가할때는 객체지향이 적합하며, 새로운 함수를 추가할때는 절차적 코드와 자료 구조가 적합하다.

디미터 법칙

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

객체는 자료를 숨기고 함수를 공개한다. 즉 조회 함수로 내부 구조를 공개하면 안된다.

final String outputDir = ctxt.getOptions().getScratchDir().getAbsoultPath();

위와 같은 여러개의 .(도트)사용을 지양해야 하며, 디미터의 법칙을 준수하면 캡슐화를 높혀 객체의 자율성과 응집도를 높일 수 있다.

6강 후기

지금까지의 파트중 가장 어려운 파트로 생각한다. 한 페이지에 1분이상 있는 빈도가 많아지고 내 얕은 지식이 드러나는 기분이었다. 시스템을 구현할 때 객체 지향이 적합할지, 자료 타입과 절차적 코드가 적합할지를 알기 위해 지속적으로 공부를 해야겠다.

0개의 댓글