본문 바로가기
개발 이야기/개발자 이야기

[객체지향]Overloading과 Overriding

by 런던살자 2018. 11. 5.

안녕하세요 마블랑입니다.

 

이번에는 Overloading과 Overriding에 대해서 설명을 하겠습니다.

 

프로그래밍에 관한 서적을 보다보면 간혹가다 Overloading과 Overriding이라는 단어를 보실수 있을거에요

 

책에도 설명이 되어있긴 하지만 이해하기에는 좀 어려운 기술이지 않을까 싶은데요

 

조금이라도 도움이 될까하여 알기 쉽게 설명드리려고 합니다.

 

이번설명에 소개되는 예제는 C#으로 구현하였지만 Overloading과 Overriding에 대한 설명은 C++이나 JAVA 모두 개념이 동일하니 각 언어에 맞게 응용만 하면 구현하는데 어려움이 없을 것입니다.

 

 

먼저 Overloading에 대해 설명을 드리면 같은이름의 함수를 매개변수만 다르게 하여 추가하는 것입니다.

 

아래 예제 코드를 봐주십시오.

 

OverloadingFunc 라는 함수가 같은 이름으로 여러개 정의가 되어 있습니다. 하지만 서로 매개변수가 다르게 정의되어 있습니다.

 

이제 함수 정의 밑에 메인함수를 살펴보면 OverloadingFunc 함수에 매개변수가 정수형, 문자열, 실수형 순서대로 들어가 있는것을 볼수 있습니다.

 

이렇게 구현을 한뒤 빌드를 해도 에러가 나지 않습니다.

 

같은 이름의 함수가 여러번 정의 되었지만 매개변수를 다르게 하여  Overloading을 적용해줬기 때문이죠.

 

그럼 실행 결과를 보겠습니다.

 

OverloadingFunc 함수에 입력된 매개변수에 따라 서로 다른 함수가 실행된것을 확인할수 있습니다.

 

이렇게 같은 이름의 함수에 여러개의 매개변수를 입력할수 있도록 해주는 것이 Overloading 입니다.

 

 

다음은 Overriding에 대해서 알아보겠습니다.

 

Overriding에 대해서는 함수의 재정의라고 생각하시면 쉽게 이해하실수 있을겁니다.

 

부모클래스를 상속받은 자식클래스가 부모가 가지고 있는 함수를 재정의를 하는 것입니다.

 

아래 선언된 클래스를 봐주시기 바랍니다.

 

class Apple
    {
        public virtual void intro()
        {
            Console.WriteLine("Apple의 제품입니다.");
        }
    }

    class Iphone : Apple
    {
        public override void intro()
        {
            base.intro();
            Console.WriteLine("IPhone입니다.\n");
        }
    }

    class Ipad : Apple
    {
        public new void intro()
        {
            base.intro();
            Console.WriteLine("IPad입니다.\n");
        }
    }

 

Apple이라는 클래스를 상속하여 Iphone과 Ipad 클래스가 정의되어 있습니다.

 

Iphone과 Ipad 둘다 Apple에서 정의된 intro함수를 재정의하고 있습니다.

 

하지만 키워드를 보면 Iphone은 override 키워드, Ipad는 new 키워드를 사용하고 있습니다.

 

이에 대한 설명은 실행결과를 본뒤에 설명드리겠습니다.

 

메인 함수의 코드는 다음과 같습니다.

 

Iphone phone = new Iphone();
Ipad pad = new Ipad();

 

Apple apple_fromPhone = phone;

Apple apple_fromPad = pad;

 

phone.intro();

pad.intro();

           

apple_fromPhone.intro();

apple_fromPad.intro();

 

이제 빌드한 뒤 실행을 해보겠습니다.

 

 

실행결과를 살펴보면 Iphone과 Ipad 각각 클래스의 intro 함수는 정의된 대로 출력된 것을 확인할 수 있습니다.

 

그 다음 Apple의 객체는 Iphone과 Ipad를 대입하여 생성되었습니다.

 

Iphone을 대입한 apple_fromPhone는 자식클래스에서 override 키워드를 사용해 재정의가 되었으므로  Iphone의 intro와 같은 결과를 출력하게 된것입니다.

 

하지만 Ipad를 대입한 apple_fromPad 객체는 Ipad의 intro가 new 키워드를 사용하여 부모클래스의 Intro를 무시하고 새로 재정의를 한것이기 때문에 apple_fromPad는 원래 자신이 가지고 있는 Intro를 호출하여 다음과 같은 결과가 출력된 것입니다.

 

 

Overloading 이나 Overriding은 처음에는 이해하기 좀 어려울 기능일지 몰라도 한번 이해만 되면 응용하여서 유용하게 사용할 수 있는 기능일 것입니다. 어렵지 않게 설명을 드리려고 하였으나 잘 이해를 하셨나 모르겠군요

 

궁금하신 점이 있으면 댓글로 달라주시면 답변을 해드리겠습니다.

 

읽어주셔서 감사합니다.

댓글