일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- kube
- Encapsulation
- 추상화
- Abstraction
- 쿠버네티스
- OOP
- kubenetes
- 레이블
- kubernetes
- 캡슐화
- delegation
- 객체지향
- ArgoCD
- kubernetes in actin
- 어플리케이션셋
- 메이븐
- applicationset
- 상속성
- 피터코드
- argocd applicationset
- 위임
- maven
- kubernetes in action
- kubenetes architecture
- 쿠버네티스 어노테이션
- 레이블 셀렉터
- kubenetes in action
- 피터코드의 상속규칙
- kubernetes component
- 빌드
- Today
- Total
IT 끄적장
OOP(Object Oriented Programming)의 특성 (상속성) -1 본문
- Inheritance (상속성)
하나의 일반화된 개체가 가지고 있는 속성을 다른 특수한 개체가 물려받아 부모-자식 관계를 형성하고, 각 자식 개체의 특수성에 알맞게 구현하는 OOP의 설계 원리
상속성은 OOP의 개념에서 가장 많이 오해하고, 잘못 사용될 여지가 큰 개념이다.
이 특성을 단순히 코드의 재사용으로 바라보는 관점은 상속성을 지극히 한정적으로 바라보는 시각이다.
상속성을 살펴보기 전에 일반화의 개념을 좀 더 생각해보자.
사과, 배 , 바나나, 오렌지를 생각하면 가장 먼저 떠오르는 것이 대부분 "과일"이라고 답할 것이다.
즉, 과일은 사과, 배, 바나나, 오렌지가 가진 공통 개념을 일반화한 개념이며
사과, 배, 바나나, 오렌지는 과일의 한 종류가 되므로 과일을 특수화 한 개념이 된다.
이와 같이 일반화를 하면 각각의 과일 종류에 신경 쓰지 않고, 과일 전체를 아우를 수 있는 수단을 얻게 된다.
만약 이와 같은 일반화 수단이 존재하지 않는다면, 사과, 배, 바나나, 오렌지의 특수성과 관련 없는 공통적인 부분에 대해서도 각각 신경을 써줘야 할 것이다.
코드를 작성할 때도 마찬가지이다.
추상화의 개념을 공부할 때 작성했던 것과 유사한 코드를 살펴보자.
int price = 0;
while(과일이 장바구니에 있을 경우){
switch(과일 종류){
case 사과:
price += 사과 가격;
break;
case 배:
price += 배 가격;
break;
case 바나나:
price += 바나나 가격;
break;
case 오렌지:
price += 오랜지 가격;
break;
}
}
이 코드 또한 다른 과일이 추가될 경우 case 문이 추가되어야 할 것이다.
위와 같이 과일의 종류를 일일이 고려하면서 코드를 작성할 경우 새로운 과일의 종류가 나타날 때마다 코드를 수정해야 하므로 변경사항에 민감하다.
따라서 우리는 다음과 같이 새로운 종류의 과일이 추가되더라도 코드를 수정할 필요가 없도록 바꿔야 한다.
int computeTotalPrice(ArrayList<Fruit> fruit){
int total = 0;
Iterator it = fruit.iterator();
while(it.hasNext()){
Fruit currentFruit = it.next();
total += currentFruit.calculatePrice();
}
return total;
}
물론, calculatePrice라는 메소드는 과일 객체에 따라 다른 게 구현해주어야 한다.
이는 추후 포스팅에서 공부할 다형성에 따른 부분이다.
지금까지 살펴본 일반화는 외부에 자식 클래스를 캡슐화하는 개념으로 생각할 수 있다.
(이때, 캡슐화의 개념을 한 클래스 내부에 속성에 대한 캡슐화에 한정되지 않고 일반화 관계를 통해 클래스를 캡슐화하는 것까지 확장된다.)
이러한 자식 클래스의 캡슐화는 외부 클라이언트가 개별적인 자식 클래스와 무관하게 프로그래밍을 할 수 있도록 도와준다.
'OOP' 카테고리의 다른 글
OOP - 피터 코드(Peter Coad)의 상속 규칙 (0) | 2019.11.15 |
---|---|
OOP(Object Oriented Programming)의 특성 (다형성) (0) | 2019.11.15 |
OOP(Object Oriented Programming)의 특성 (상속성)-2 (0) | 2019.11.14 |
OOP(Object Oriented Programming)의 특성 (캡슐화) (0) | 2019.11.14 |
OOP(Object Oriented Programming)의 특성 (추상화) (0) | 2019.11.14 |