본문 바로가기

ComputerScience/Software Engineering

소프트웨어공학 - 14. Object-Oriented Paradigm

728x90

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에서 변화가 생기면 어느 클래스까지 영향을 미칠까?를 나타낸 예시이다.

- 화살표 없는 직선은 <->와 같다.

728x90
반응형