20240213_오버로딩, 오버라이딩

2024. 2. 14. 10:02IT/TIL

오늘의 TIL은 오버로딩과 오버라이딩에 관한 내용이다.

 

오버로딩과 오버라이딩은 비슷한 이름으로 헷갈릴 수 있는 개념인데,

 

실제로 사용되는 모습은 매우 다른 두 개념이기 때문에 이 둘의 차이점을 확실히 알고가기 위해서 정리한다.

 

 

오버로딩(Overloading)

오버로딩은 사전적 의미인 '과적하다'를 그대로 차용한 개념으로 하나의 함수에 여러 기능을 구현한 것을 말한다.

 

오버로딩을 사용하면 하나의 함수 명을 이용하여 다양한 역할을 하는 함수를 만들 수 있는데,

 

예를 들어서 덧셈을하는 Add함수를 만든다고 가정했을 때 덧셈이라는 기능을 한 가지로만 고정할 수 없다.

 

예를 들어서 두 수의 덧셈이 있을 수 있고, 세 수의 덧셈이 있을 수 있으며,

 

int 간의 덧셈이 있을 수 있고, float 간의 덧셈이 있을 수 있고, 둘의 혼합이 있을 수 있다.

 

이를 코드로 작성하면 아래와 같다.

 

public static int Add(int a, int b)
{
    return a + b;
}

public static int Add(int a, int b, int c)
{
    return a + b + c;
}

public static float Add(float a, float b)
{
    return a + b;
}

public static float Add(int a, float b)
{
    return a + b;
}

 

이렇게 하나의 이름의 함수에 다양한 기능을 구현하는 것을 오버로딩이라고한다.

 

 

오버라이딩(Overriding)

오버라이딩은 사전적 의미로 '더 우선하다'라는 의미를 사용한 것으로 상속과 관련하여 사용하는 개념이다.

 

부모 클래스에서 상속 받은 자식 클래스에서 해당 기능을 추가로 확장시키는 경우에 사용하는 개념으로,

 

오버라이딩을 하게되면 부모 클래스의 기능보다 자식 클래스의 기능이 더 우선시되게 된다.

 

이는 이전에 정리했던 객체 지향 프로그래밍(OOP)에서 다형성을 구현하는 방법으로 사용된다.

 

오버라이딩(override) 하기 위해서는 부모 클래스에서 virtual로 정의되어 있어야한다.

 

위에서 예를 들었던 덧셈 함수를 이용하여

 

상속 받은 덧셈 함수의 경우에는 좀 더 자세하게 입력된 두 수를 알려주게 만든다고 하면 아래와 같이 구현할 수 있다.

 

class Program
{
    public virtual int Add(int a, int b)
    {
        return a + b;
    }
}

class NewProgram : Program
{
    public override int Add(int a, int b)
    {
        Console.Write($"{a} + {b} = ");
        return a + b;
    }
}

 

이렇게 함수를 수행한다면 아래의 이미지와 같이

Add(1, 2)는 3 이라는 결과창만 나오던 것과 다르게

NewProgram에서는 1 + 2 = 3 로 표기가 된다.

 

이렇게 기존의 함수를 확장시켜서 기능을 추가하도록 만드는 것이 오버라이딩이라고 할 수 있다.

 

 

 

오늘은 오버로딩과 오버라이딩에 대해서 정리하는 시간을 가졌는데,

 

많이 사용하는 기능이지만 제대로 정리된 개념을 갖고 사용하는 것이 아닌

 

경험에 의해 사용하고 있었던 기능들이었던 것 같다.

 

오늘의 정리를 기회로 위의 두 개념을 확실히 이해하고 사용하도록 할 수 있는 계기가 되도록 노력해야겠다고 생각한다.

'IT > TIL' 카테고리의 다른 글

20240215_디자인 패턴  (0) 2024.02.15
20240214_오브젝트 풀링  (0) 2024.02.14
20240210_2개 이하로 다른 비트(프로그래머스)  (2) 2024.02.10
20240209_유니티 초기화 순서 관련  (0) 2024.02.10
20240208_기술면접 회고  (1) 2024.02.09