-
[Design Pattern] Object Oriented ParadigmLearn/Architecture 2022. 8. 20. 22:18
# Abstract Data Type (ADT)
- 데이터를 밖으로 노출하지 않고 operation 구현을 보여주지 않는 방식
장점 1. 내부 방식을 바꿔도 클라이언트가 영향을 받지 않음
> 시스템을 관리하고 수정하는데 용이함
장점2. Encapsulation
# Object-Oriented Paradigm
Class = ADT + Inheritance (reusability) + Polymorphism (flexibility)
클래스 재사용 뿐만 아니라 클라이언트 코드의 재사용도 중요
위 그림을 위의 코드와 같이 코딩하는건 좋은 설계가 아니다.
> 새로운 타입이 들어오면 아래와 같이 추가해야되는데 수천 수만개가 들어오면 어렵다.
아래와 같이 코딩해서 클라이언트가 정의하도록 하는게 polymorphic이다.
# Inheritance
자식이 부모를 상속받았다면,
- 자식은 부모의 모든 메서드와 데이터를 상속받는다.
- 자식은 부모다 (is a) --> 자식의 인스턴스는 부모의 인스턴스와 같게 취급할 수 있다.
즉, 부모 타입의 인스턴스가 필요한 모든 곳에서 자식 타입의 인스턴스를 쓸 수 있다.
# Polymorphism
같은 이름의 operation이 각각의 클래스에서 다르게 작동할 수 있다.
> conditional statement를 줄이는데 큰 역할을 한다.
두 가지 타입이 있다.
1. Runtime Polymorphism (Dynamic Polymorphism) --> Overriding
- 클래스가 2개 이상 필요
- 클래스에 따라 메서드가 다르게 동작한다.
- 런타임때 이루어진다.
- polymorphic variable은 본인 타입의 오브젝트도 될 수 있지만 자식(descendant)타입의 오브젝트도 될 수 있다.
> 부모는 안됨에 유의하자.
> 아래 예시에서 보면 X 타입의 variable이 X타입의 오브젝트도 당연히 되지만 Y타입의 오브젝트도 가능하다.
2. Compile Time Polymorphism (Static Polymorphism) --> Overloading
- 같은 이름의 메서드도 들어오는 값의 타입에 따라 다르게 동작한다.
- 컴파일 타임때 결정된다.
# Abstact Class, Method (JAVA)
- abstract method는 body가 없는 method
- abstract method가 하나라도 있다면 class는 반드시 abstract여야 함
> 역은 성립하지 않음. (abstract class가 무조건 abstract method를 가지진 않음)
- abstract class라도 자신의 자식이라면 concrete instance를 타입으로 지정할 수 있다. (polymorphism)
[예시]
- a 는 polymorphism에 따라 dag나 cat의 인스턴스가 가능하다.
- 오른쪽 세 번째 문단에서 Animal, Canine은 Abstract이므로 new가 안된다. (에러남)
- Canine은 Cat의 인스턴스를 가질 수 없다. (부모가 같은건 의미가 없다.)
# Interface
- abstract와 유사한데 모든 메서드가 abstract여야 함. (어떤 것도 구현되어선 안됨)
- 인스턴스 변수를 가질 수 없음
- static final로 정의된 상수는 허용함
- interface도 하나의 타입이다.
[예시]
- Animal과 Robot은 관련이 없으므로 aref는 robo가 될 수 없다.
- implement도 상속처럼 하위 인스턴스를 가리킬 수 있다.
- cref는 nabi나 robo의 인스턴스를 가질 수 없다.
# Abstract Class VS Interface
- 대부분의 경우 별 이유가 없으면 Interface 사용
- 정확히 "is a" 관계가 성립하고 부분적 구현이 필요할 때만 abstract를 사용한다.
# Change Propagations
- target이 변하면 source는 영향을 받는다.
- source가 변하는건 target에 영향을 주지 않는다.
[예시]
# Information Hiding
자주 변하는 지점에 Interface를 만들어주면 Encapsulation 가능
#QUIZ
풀 때는 class diagram을 먼저 그리면 쉽다.
a - type1은 interface이므로 new가 안된다.
c - 형제끼리는 안된다.
e - ITpye은 interface이므로 new가 안된다.
g - 형제기리는 안된다.
'Learn > Architecture' 카테고리의 다른 글
[Design Pattern] Observer Pattern (0) 2022.08.27 [Design Pattern] Strategy Pattern (0) 2022.08.26 [Design Pattern] GRASP Principle (0) 2022.08.24 [Design Pattern] SOLID Principle (0) 2022.08.21 [Design Pattern] Introduction (0) 2022.08.17