Abstract Data Type(ADT)
- 데이터, 관련된 operation들을 하나의 문법적인 unit에 캡슐화
- 장점
- 하나의 문법적인 요소라서 관리, 수정에 용이하고 분할 컴파일이 가능함
- 외부에서 바로 접근이 불가능하여 내부 변경되어도 외부에 영향을 미치지 않음
Object-Oriented Paradigm
- Class = ADT + Inheritance(재사용) + Polymorphism(유연성)
Inheritance
- class Y가 class X를 상속한다면? (Y is a X)
- Y는 X의 모든 메소드와 데이터를 상속받음
- Y의 모든 인스턴스는 X의 인스턴스 → X의 인스턴스를 요청하는 곳에서 Y 인스턴스 사용 가능
Polymorphism
- 한 operation이 서로 다른 방법으로 수행될 수 있음
- operation은 같은 이름을 가짐
- if-else, switch같은 조건문을 감소시킬 수 있음
- Polymorphic한 method가 호출되었을 때 어느 method가 call되는가?
- 현재 class (인스턴스의 객체)에 있다면 run
- 없으면, superclass에 해당 method가 있다면 run.. 없으면 계속 상위 class로 올라감
- 없으면, 에러 (단, java, c++에서는 컴파일 되지 않으므로 발생하지 않음)
- 종류
- Method Overriding :
- Runtime Polymorphism (Dynamic polymorphism)
- polymorphic variable 은 자신의 object나 그 후손의 object만 point할 수 있음
ex) class Y가 class X를 상속할 때 Y c = new X(); 불가능
- Method Overloading : 메소드 이름 동일하지만 파라미터가 다름
- Compile time Polymorphism (Static polymorphism)
- Compile time Polymorphism (Static polymorphism)
- Method Overriding :
- 예시 : Polymorphism + Abstract class
- Canine는 animal의 abstract method를 그대로 받아서 abstract class여야만 함
- Animal a = null (null은 어떤 타입 변수에도 넣을 수 있어서 가능)
- 예시 : Polymorphism + interface
Class Relationship
- Dependency : Source가 Target class(상속일 때, 부모 class)에 navigation 가능한다는 것은, target이 변화할 경우 source에 영향을 줄 수 있지만 source가 변하는 경우 target은 신경쓰지 않아도 됨
- 예시 : Class 변경에 대한 영향
- 단순 직선은 양방향 영향
※ Abstract Class, Method (in Java)
- abstract method는 정의(body)가 없고 protocol만 있음
- abstract method가 하나라도 있으면 abstract class여야만 함 (단, abstract class는 abstract method가 없어도 됨)
- instance 생성 불가능
- 상속 가능
- 사용해야하는 상황
- 상속 관계
- 부분적인 implementation이 필요한 경우
※ Interface
- abstract class와 유사하지만 차이점 존재 (더 추상적임)
- 모든 method가 abstract method
- instance variable을 가질 수 없음
- public static final variable(상수)은 허용
- 사용해야하는 상황
- 아무런 다른 제약조건이 없으면(implementation이 필요없을 경우) abstract class보단 interface 사용
- class의 모든 경우를 대표하는 것이 아닌 작은 일부만 조직화할 때
- 다른 class의 상속을 이미 받았을 때
- 예시
반응형
'💻 개발IT > Design Patterns' 카테고리의 다른 글
3. Behavior 패턴 - State Pattern (0) | 2022.03.01 |
---|---|
3. Behavior 패턴 - Iterator Pattern (0) | 2022.02.28 |
3. Behavior 패턴 - Template Method Pattern (0) | 2022.02.28 |
3. Behavior 패턴 - Observer Pattern (0) | 2022.02.27 |
3. Behavior 패턴 - Strategy Pattern (0) | 2022.02.27 |
2. 객체지향 개념과 설계원칙 - GRASP Principle (0) | 2022.02.24 |
2. 객체지향 개념과 설계원칙 - SOLID Principle (0) | 2022.02.23 |
1. Design Patterns (0) | 2022.02.06 |