Unity Chapter 7-3. C# 프로그래밍 [중급] (2/2) : 다형성

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!


Chapter 7. C# 프로그래밍 : 중급 (2/2)


🔔 다형성

부모와 자식간의 집합 관계

image

  • 조건이 적을 수록 넓은 집합.
    • 숨을 쉰다.
  • 조건이 늘어날 수록 좁은 집합.
    • 숨을 쉰다 + 움직인다
  • 동물이면 생명이다 ⭕
    • ‘숨을 쉰다’는 면에서 ‘생명’에 속하기 때문에.
  • 생명이면 동물이다 ❌

조건이 작으면 작을수록, 구현할게 없으면 없을 수록 범위는 굉장히 커진다.

조건이 많으면 많고, 구현할게 많으면 많을 수록 범위는 작아진다.


다형성이란 ⭐

다형성 : 상속에서 나오는 특징으로서, 부모클래스로부터 파생된 여러 자식 클래스들을 한방에 관리할 수 있는 특성

  • ‘숨을 쉰다’는 면에서 ‘동물이면 생명’이고 ‘식물이면 생명’이다.
  • 그럼 동물, 식물에서 '숨을 쉬는 기능'을 쓸 때, '생명'타입 하나로 동물과 식물을 한방에 접근하여 '숨을 쉬는 기능'을 사용하면 어떨까
    • 이것이 다형성의 개념


부모 타입으로 여러 자식들을 참조하는 것

Dog, Cat 클래스는 Animal클래스를 상속받고 있다고 가정하자.

  • class Animal
    • Animal의 데이터(멤버변수)
      • name
      • weight
      • age
    • Animal의 기능(멤버함수)
      • public void Print()
      • public float GetSpeed()
  • class Dog
    • 🖐 public void Hunt()
      • Dog만이 가지는 기능이다.
  • class Cat
    • 🖐 public void Stealth()
      • Cat만이 가지는 기능이다.
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()는 불가능하다. 에러!
    • 단, 이때 jack의 Dog 타입만의 고유한 멤버들 Hunt() 이 메모리 상에서 날아가는건 아니다. 단지 사용을 못할 뿐.
      • Dog myDog = (Dog)someAnimal;
        • 다시 Dog타입으로 형 변환 해주면 Dog만의 고유 기능인 Hunt() 사용이 가능하다.


여러 자식들을 부모 타입의 컨테이너에 모아놓고 한방에 관리하기

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()를 실행시킬 수 있다.


상속과 다형성의 장점

  • 코드를 재활용 할 수 있다.
  • 구조를 간결하게 할 수 있다.




🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기


Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기