ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Unity | 다형성(Polymorphism) 이란?
    다시한번 개발자도전! 2026. 1. 14. 16:11

    오늘은 다형성에 대해 공부해보자!

     다형성(Polymorphism)이란?

    • 어원: 'Poly(여러 개)' + 'Morph(형태)' = **"다양한 형태를 가질 수 있는 능력"**임.
    • 객체 지향 프로그래밍(OOP)에서 하나의 인터페이스나 참조 변수가 다양한 타입의 객체를 다루거나, 하나의 메소드가 다양한 방식으로 동작하는 능력
    • 코드의 재사용성유연성을 높이며, 상위 클래스 타입의 변수가 하위 클래스의 객체를 참조하는 방식

    1. 오버로딩 (Overloading): 

    정적 다형성이라고도 부름. 같은 이름의 함수를 매개변수(입력값)만 다르게 해서 여러 개 만드는 기술임.

    • 다형성과의 관계: "공격한다"는 이름은 하나지만, Attack()이냐 Attack(10)이냐에 따라 동작의 형태가 달라짐.
    • 특징: 컴파일러가 "아, 이건 인자가 없으니 1번 함수네!"라고 미리 정해버림.
    public class Player 
    {
        public void Move() { /* 걷기 */ }
        public void Move(float speed) { /* 특정 속도로 뛰기 */ } // 다형성(오버로딩)
    }

     

    2. 추상화 (Abstraction): "무엇을 할지 결정하는 약속"

    구체적인 내용은 숨기고 핵심적인 기능(껍데기)만 정의함.

    • 다형성과의 관계: "모든 유닛은 Move를 해야 한다"라고 추상적으로 약속해둬야, 나중에 전사든 마법사든 각자 다형성을 발휘해서 움직일 수 있음.
    • 특징: abstract나 interface를 사용해서 실체 없는 '설계도'를 만듦.
    public abstract class Unit 
    {
        public abstract void Attack(); // 추상화: "공격 기능은 반드시 있어야 해!"
    }

     

    3. 오버라이딩 (Overriding): "부모의 명령을 내 식대로 실행"

    동적 다형성의 핵심임. 부모가 물려준 함수를 자식이 자기 입맛에 맞게 완전히 새로 짜는 것임.

    • 다형성과의 관계: 똑같은 Attack() 명령을 내려도, 전사는 을 휘두르고 마법사는 마법을 씀. **실행 시점(Runtime)**에 객체에 따라 행동이 결정됨.
    • 특징: virtual과 override 키워드를 사용함.
    public class Warrior : Unit 
    {
        public override void Attack() => Console.WriteLine("칼 휘두르기!"); // 다형성(오버라이딩)
    }
    public class Mage : Unit
    {
        public override void Attack() => Console.WriteLine("파이어볼!"); // 다형성(오버라이딩)
    }
Designed by Tistory.