본문 바로가기
Unity 3D

Unity C# 문법 (7) 오버로딩, 오버라이딩의 차이

by 연꿈술사 2023. 8. 9.

안녕하세요, 연꿈술사 입니다.

오늘은 C# 문법에서 헷갈리기로 유명한 오버로딩과 오버라이딩의 차이에 대해 알아보겠습니다.

 

사실 오버로딩과 오버라이딩은 이름만 비슷할 뿐 아예 다른 개념입니다. 

사전적의미와 사용하는 방법, 모두 알아보겠습니다.

 

1. 오버로딩(OverLoading)

오버로딩의 사전적 의미는 '과적'입니다. C#에서는 메소드로 불리는 함수에 대해 매개 변수의 갯수와

타입을 다르게 정의해 같은 이름으로 여러 개를 구현하는 것을 말합니다. 주로 같은 역할을 하는 메소드에

대해서 이름을 같게 하고 매개변수의 이름과 타입만 다르게 정의해줍니다. 오버로딩을 사용하면 같은 행동을

하는 메소드에 대해 이름을 새로 지을 필요가 없을 뿐만 아니라 코드를 일관성있게 해주어 다른 사용자가

메소드에 접근할 때 이해하기 쉽고 보기 편하게 만들어줍니다.

한 번 예시를 들어 설명해 보겠습니다.

public class Test : Monobehaviour
{
  public int sum(int a, int b)
  {
    return a + b;
  }

  public float sum(float a, float b)
  {
    return a + b;
  }
  
  public int sum(int a, int b, int c)
  {
    return a + b + c;
  }

  private void Start()
  {
    Debug.Log(sum(10,20));
    Debug.Log(sum(1.5f,2.5f));
    Debug.Log(sum(10,20,30));

  }
}

이런 식으로 같은 이름을 가진 메소드에서 매개 변수의 타입과 갯수를 달리하여 같은 기능을 하는 경우에 사용합니다.

 

2. 오버라이딩(Overriding)

오버라이딩의 사전적 의미는 '최우선시되는', '다른 무엇보다 더 중요한' 이라는 뜻을 가지고 있습니다. 오버라이딩은

상속과 관련있는 개념으로, 부모 클래스에서 가상(virtual) 으로 정의한 메소드에 대해 자식 클래스에서 '재정의'해주는

개념입니다. 오버라이딩을 하게 되면 부모클래스의 가상함수보다 자식클래스에서 오버라이딩한 함수가 더 우선시되게

됩니다. 먼저, 부모 클래스에서 virtual 키워드를 포함한 메소드를 정의해준 후, 상속받은 자식 클래스에서 같은 메소드에 대해 'override'를 포함해 재정의 해주면 됩니다. 하지만 private 으로 접근제한자를 설정하면 virtual 함수를 선언할 수 없고, 당연히 오버라이딩 또한 불가능합니다. public이나 protected 등을 사용해주어야 하며, 자식 클래스에서 재정의 하는 메소드는 부모의 접근제한자와 동일해야 합니다.

 

이것 또한 예시를 들어보겠습니다.

public class Animal : MonoBehaviour
{
    public virtual void method()
    {
        Debug.Log("동물");
    }
}

public class Cat : Animal
{
    public override void method()
    {
        Debug.Log("고양이");
    }
}

public class Dog : Animal
{
    public override void method()
    {
        Debug.Log("개");
    }
}

유니티에서 오버라이딩은 이런 식으로 사용합니다. 객체지향 프로그래밍인 C#에서 이런 속성을 '다형성'이라고 합니다.

객체가 여러 형태를 가질 수 있다는 뜻입니다.

 

오늘은 가끔 헷갈리기도 하는 오버로딩과 오버라이딩의 개념에 대해 알아보았습니다.

다른 정보들도 블로그에 있으니 확인해보세요.

연꿈술사였습니다. 감사합니다.

댓글