1. Abstract Data Type
- 추상 자료형이다. 최대한 encapsulation한 것을 말한다.
- 실제 구현 내용은 생략하고 data, operation만 정의한다.
2. OOP
- OOP의 정수 class는 ADT + 상속 + 다형성이라고 정의할 수 있다.
- 상속을 통해 코드의 재사용성을 높일 수 있다.
- 또한 상속 관계에서 부모 클래스 인스턴스가 자식 클래스 인스턴스들을 가리킬 수 있다. 실제 누구를 가리키고 있는지는 런타임에 결정될 수 있다. (다형성)
3. Inheritance
- 자식 클래스는 부모 클래스의 모든 메서드, 데이터를 상속받아 온다.
- Y는 X의 모든 것을 사용할 수 있다.
- Y is X라고 표현할 수 있다. 즉 X 인스턴스는 X인스턴스 뿐만 아니라 Y 인스턴스를 가리킬 수 있다.
4. Polymorphism
- 상속 관계에서 부모 클래스 인스턴스가 자식 클래스 인스턴스들을 가리킬 수 있다.
- 실제 누구를 가리키고 있는지는 런타임에 결정될 수 있다.
Method Overloading
- 컴파일 타임에 컴파일러는 파라미터 개수, 이름에 따라서 동일한 name을 구분할 수 있다. (compile time polymorphism)
Method Overriding
- 상속관계에서 포인터가 실제로 가리키고 있는 객체의 method를 찾아갈 수 있다. (runtime에서 결정된다)
- 단! 부모 클래스에서도 해당하는 함수를 정의하고 있어야 한다. Object obj는 X, Y를 가리킬 수는 있지만 obj.methodA()를 호출할 수는 없다.
- X, Y 모두 methodA()를 가지고 있기 때문에 Y를 가리키고 있는 X는 methodA()를 호출하면 Y의 것을 호출한다.
5. Abstract method, class
- abstract method : 실제 구현은 없고 준수해야 하는 Protocol만 정의된 메서드를 말한다.
- abstract method를 하나 이상 가지고 있으면 abstract class가 된다. 물론 concrete한 method를 가질 수 있다.
- 추상클래스는 인스턴스를 만들 수 없다.
- 하지만! 추상클래스 타입이 자식 클래스 인스턴스들을 가리키는건 가능하다.
- 추상클래스 끼리는 상속할 수 있다. 여기서 추상 클래스는 Animal, Canine 두개가 있다.
- 여기서 a는 Animal을 가리킬 수 있는 reference이다. Animal instance는 만들 수 없지만 a가 자식 클래스의 인스턴스들을 가리키는데는 전혀 문제가 없다. (다형성)
- a를 통해 .say()를 하면 a가 실제로 가리키고 있는 인스턴스(Dog, Cat)의 say()를 실행한다. (함수 오버라이딩)
6. Interface
- 모든 method가 abstract method이면 해당 클래스는 interface가 된다.
- instance 생성 불가
- 속성도 가질 수 없다. (멤버변수 없음)
- public static final variable처럼 상수만 가지고 있을 수 있다.
- abstract class보다 더 abstract한 class이다.
- 상속은 extend였는데 인터페이스는 implements로 사용한다.
- 상속은 하나밖에 못 하지만 인터페이스는 여러번 implements할 수 있다.
- 인터페이스도 마찬가지로 자식 인스턴스들을 가리킬 수 있다. (Type으로 사용이 가능하다.)
- 인터페이스를 Implement하면 반드시 추상 메서드들을 구현해야 한다.
- 빨강 코드는 에러이다.
7. Change Propagation
- (start) Class에서 변화가 생기면 어느 클래스까지 영향을 미칠까?를 나타낸 예시이다.
- 화살표 없는 직선은 <->와 같다.
'ComputerScience > Software Engineering' 카테고리의 다른 글
소프트웨어공학 - 16. UML Communication Diagrams (0) | 2022.05.04 |
---|---|
소프트웨어공학 - 15. MVC Architecture pattern (0) | 2022.05.04 |
소프트웨어공학 - 13. Logical Architecture (0) | 2022.04.28 |
소프트웨어공학 - 12. Sequence Diagram -> Operation Contract (0) | 2022.04.14 |
소프트웨어공학 - 11. Domain Models (0) | 2022.04.13 |