Unity Chapter 7-3. C# 프로그래밍 [중급] (2/2) : 다형성
카테고리: Unity Lesson 1
태그: C Sharp Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 7. C# 프로그래밍 : 중급 (2/2)
🔔 다형성
부모와 자식간의 집합 관계
- 조건이 적을 수록 넓은 집합.
- 숨을 쉰다.
- 조건이 늘어날 수록 좁은 집합.
- 숨을 쉰다 + 움직인다
- 동물이면 생명이다 ⭕
- ‘숨을 쉰다’는 면에서 ‘생명’에 속하기 때문에.
- 생명이면 동물이다 ❌
조건이 작으면 작을수록, 구현할게 없으면 없을 수록 범위는 굉장히 커진다.
조건이 많으면 많고, 구현할게 많으면 많을 수록 범위는 작아진다.
다형성이란 ⭐
다형성
: 상속에서 나오는 특징으로서, 부모클래스로부터 파생된 여러 자식 클래스들을 한방에 관리할 수 있는 특성
- ‘숨을 쉰다’는 면에서 ‘동물이면 생명’이고 ‘식물이면 생명’이다.
- 그럼 동물, 식물에서 '숨을 쉬는 기능'을 쓸 때, '생명'타입 하나로 동물과 식물을 한방에 접근하여 '숨을 쉬는 기능'을 사용하면 어떨까
- 이것이 다형성의 개념
부모 타입으로 여러 자식들을 참조하는 것
Dog, Cat 클래스는 Animal클래스를 상속받고 있다고 가정하자.
- class Animal
- Animal의 데이터(멤버변수)
- name
- weight
- age
- Animal의 기능(멤버함수)
- public void Print()
- public float GetSpeed()
- Animal의 데이터(멤버변수)
- class Dog
- 🖐 public void Hunt()
- Dog만이 가지는 기능이다.
- 🖐 public void Hunt()
- class Cat
- 🖐 public void Stealth()
- Cat만이 가지는 기능이다.
- 🖐 public void Stealth()
Cat nate = new Cat();
Dog jack = new Dog();
Animal someAnimal = jack;
someAnimal.Print();
someAnimal.Hunt(); // 에러 ⚡
Dog myDog = (Dog)someAnimal; // Dog타입으로 형 변환
myDog.Hunt();
- Animal someAnimal = jack;
- Animal 부모 타입의 변수 someAnimal로 Dog 타입의 자식 객체인 jack을 참조하는 것이 가능하다.
다형성
- 단, 이렇게 부모타입으로 자식 객체를 참조할땐
- Dog가 물려 받은 Animal로서 고유한 멤버들만 사용이 가능하다.
- someAnimal.Print()는 가능
- 자식만의 고유한 기능은 사용하지 못한다. 오직 부모에게 물려받은 멤버들만 사용 가능.
- someAnimal.Hunt()는 불가능하다. 에러!
- Dog가 물려 받은 Animal로서 고유한 멤버들만 사용이 가능하다.
- 단, 이렇게 부모타입으로 자식 객체를 참조할땐
- 단, 이때 jack의 Dog 타입만의 고유한 멤버들 Hunt() 이 메모리 상에서 날아가는건 아니다. 단지 사용을 못할 뿐.
- Dog myDog = (Dog)someAnimal;
- 다시 Dog타입으로 형 변환 해주면 Dog만의 고유 기능인 Hunt() 사용이 가능하다.
- Dog myDog = (Dog)someAnimal;
- Animal 부모 타입의 변수 someAnimal로 Dog 타입의 자식 객체인 jack을 참조하는 것이 가능하다.
여러 자식들을 부모 타입의 컨테이너에 모아놓고 한방에 관리하기
Cat nate = new Cat();
Cat sikbbang = new Cat();
Dog jack = new Dog();
Animal [] animals = new Animal[3];
animals[0] = nate;
animals[1] = sikbbang;
animals[2] = jack;
for(int i = 0; i < animals.Length; i++)
{
animals.Print();
}
Cat, Dog 등등 여러 자식 객체들을 부모 타입의 참조 변수 animals 배열로 한방에 관리 할 수 있다! 이 부모타입의 참조 변수 배열 하나로 Animal의 여러 자식 객체들을 Animal로부터 물려받은 Print()를 실행시킬 수 있다.
상속과 다형성의 장점
- 코드를 재활용 할 수 있다.
- 구조를 간결하게 할 수 있다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기