• 목록 (128)
    • Android (62)
    • Back-End (2)
    • Java (3)
    • Kotlin (16)
    • CS (7)
    • 개발 서적 (12)
    • 문제 풀이 (26)

최근 글

티스토리

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
MJ_94
개발 서적

[클린 코드] 객체와 자료구조(1)

[클린 코드] 객체와 자료구조(1)
개발 서적

[클린 코드] 객체와 자료구조(1)

2022. 1. 19. 17:00

자료 추상화

아래 두 클래스는 모두 2차원 점을 표현한다.
차이점은 한 클래스는 구현을 외부로 노출하고 다른 클래스는 구현을 완전히 숨겼다.

//6-1) 구체적인 Point 클래스
public class Point{
    public double x;
    public double y;
}
//6-2) 추상적인 Point 클래스
public interface Point{
    double getX();
    double getY();
    void setCartesian(double x, double y);
    double getR();
    double getTheta();
    void setPolar(double r, double theta);
}

6-2 코드는 어떤 좌표계를 사용하는지 알 길이 없지만 인터페이스는 자료 구조를 명백하게 표현한다.
사실 6-2는 자료 구조 이상을 표현한다.
클래스 메소드가 접근 정책을 강제한다.
좌표를 읽을 때는 각 값을 개별적으로 읽어야 한다. 하지만 좌표를 설정할 때는 두 값을 한꺼번에 설정해야 한다.

6-1은 명확하게 직교좌표계를 사용하는 것을 명백하게 알 수 있다. 또한 개별적으로 좌표값을 읽고 설정하게 강제한다.
구현도 노출하고 있다. 변수를 private으로 선언하더라고 get/set을 제공하게 되면 구현을 노출하는 것과 같다.

구현을 감추려면 추상화가 필요하다.
그저 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다.
그보다는 추상 인터페이스를 제공하여 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 의미 있는 클래스이다.

아래 6-3과 6-4 코드를 살펴보자.
6-3에서는 자동차 연료 상태를 구체적인 숫자 값으로 알려주고, 두 함수가 변수값을 읽어 반환한다는 걸 알 수 있다.
6-4에서는 자동차 연료 상태를 백분율이라는 추상적인 개념으로 알려주고, 정보가 어디서 들어오는지 전려 드러나지 않는다.

//6-3) 구체적인 Vehicle 클래스
public class Vehicle{
    double getFuelTankCapacityInGallons();
    double getGallonsOfGasoline();
}
//6-4) 추상적인 Vehicle 클래스
public interface Vehicle{
    double getPercentFuelRemaining;
}

자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다.
인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는다.
개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 고민해야 한다.

저작자표시 비영리 변경금지 (새창열림)

'개발 서적' 카테고리의 다른 글

[클린 코드] 객체와 자료구조(3)  (0) 2022.01.26
[클린 코드] 객체와 자료구조(2)  (0) 2022.01.26
[클린 코드] 형식 맞추기(2)  (0) 2022.01.17
[클린 코드] 형식 맞추기(1)  (0) 2022.01.11
[클린 코드] 주석(2)  (0) 2022.01.05
    '개발 서적' 카테고리의 다른 글
    • [클린 코드] 객체와 자료구조(3)
    • [클린 코드] 객체와 자료구조(2)
    • [클린 코드] 형식 맞추기(2)
    • [클린 코드] 형식 맞추기(1)
    MJ_94
    MJ_94
    안드로이드, 개발 관련 기술 블로그

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.