본문 바로가기
알고리즘/디자인 패턴

2. 다형성(Polymorphism) + 추상화( Abstract class)의 예시

by 지칸 2021. 3. 10.

안녕하세요. 지칸입니다.

오늘부터 1편에 이어서 몇가지 예시를 정리하려고 합니다.

2021.03.10 - [알고리즘/디자인 패턴] - 1. object-oriented paradigm, OOP, 객체지향


1) 다형성과 추상화, 상속
부모 타입에 자식 인스턴스를 넣을 수 있다는 점!

동적 다형성을 이용하여 인스턴스에 따라 다른 동작을 할 수 있는점!

위 2가지를 사용한 예제를 보여드리겠습니다.

 

 

Class 정의와 Class Diagram

추상화 클래스 Animal 에는 추상화 함수 say()가 존재합니다.

그리고 Cat은 Animal을 상속받고 추상화 함수 say를 오버라이딩 해야합니다.

Canine도 Animal을 상속받는 추상화 클래스며 이를 상속받는 Dog 클래스가 있습니다.

마찬가지로, say를 오버라이딩 해야합니다.

위 예시에서는 주어진 클래스들로 변수 정의에 대해 다양한 예제를 보여주고 있습니다.

Dog baduki = new Dog() 처럼 본인의 클래스타입에 본인의 인스턴스를 넣는건 당연히 가능하지만

Animal c1 = new Animal() 처럼 추상화 클래스 타입에 추상화 인스턴스는 넣을 수 없습니다.

 

Animal a = baduki, Animal a = nabi 처럼 부모 클래스 타입에 자식 인스턴스를 넣는건 가능합니다.

이것으로 매우 강력한 효과를 만들 수 있는데 a.say() 라는 똑같은 단어로 다른 행동을 불러올 수 있습니다.

변수 a의 인스턴스 클래스에 따라 서로 다른 결과를 가져오는거죠.

(baduki일때는 멍멍, nabi일때는 야옹)


2) 어떤 클래스의 함수를 리턴할까?

이번에는 부모/자식 모두 같은 함수가 존재할때 어떤 함수를 리턴할지에 대해 살펴보겠습니다.

위 예시를 보면 Y는 X를 상속받고 있습니다.

x2.methodA를 호출하면 x2의 인스턴스인 Y 클래스에서 methodA를 먼저 검색합니다.

동일한 함수가 존재하고 이 함수를 리턴하는것을 볼 수 있습니다.

반면, x2.methodB를 호출하면 x2의 인스턴스인 Y클래스에서 methodB를 먼저 검색하고, 없다면 그 부모 클래스에서 methodB를 검색합니다. 따라서, methodB of class X가 출력된 것을 확인할 수 있었습니다.

반응형

댓글