반응형
자료 추상화
OOP에서 특수한 경우가 아니면 class안의 인스턴스변수를 private으로 정의하는 한다. 왜냐하면 남들(사용하는 쪽)이 변수에 의존하지 않게 만들기 위해서이다.
참고 + (d-yong.tistory.com/21)
위의 내용에 한발더 나아가 클린코드에서는 추상화 인터페이스를 제공해 API를 사용하는 쪽에서 내부 구현을 모른채 기능을 사용할 수 있어야 한다고 주장한다.
말로는 설명이 어려우니 아래의 간단한 예를 보면서 이해해보자
간단한 예을 위해 set함수등 초기화는 스킵함
[추상화 단계가 상승하는 순]
1단계 (추상화 단계 하)
2단계 (추상화 단계 중)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class public {
public:
int getX() {
return x;
}
int getY() {
return y;
}
int getRadius() {
return ;
}
int getArea() {
return r*r*3.14;
}
private:
int x, int y;
float r;
};
|
cs |
변수 사이에 함수 계층을 넣는것으로는 구현이 안벽히 감춰지지 않는다.
3단계 (추상화 단계 상)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Shape {
virtual float getArea() = 0;
}
class Circle : public Shape {
virtual float getArea() override {
return r*r*3.14;
}
private:
int x, int y;
float r;
}
|
cs |
추상 인터페이스를 통해 사용자 입장에서는 내부의 구현을 모르게 된다.
class를 만들 때 동작을 공개하고(인터페이스) 자료를 숨기는것에 집중한다.
반응형
'좋은 코드 만들기 > 클린코드' 카테고리의 다른 글
[클린코드] 8. 경계 (0) | 2021.05.02 |
---|---|
[클린코드] 7. 오류 처리 (0) | 2021.04.25 |
[클린코드] 5. 형식 맞추기 (0) | 2021.04.11 |
[클린코드] 4. 주석 (0) | 2021.03.28 |
[클린코드] 3. 함수 (0) | 2021.03.21 |