본문 바로가기

[C#] 오버로딩(Overloading), 오버라이딩(Overriding)

C#
·
2020. 3. 24. 17:37
반응형

오버로딩(Overloading)

오버로딩의 사전적 의미는 과적하다 입니다. 오버로딩은 하나의 메소드에 여러 가지로 구현하는 것을 말합니다.
오버로딩을 하게 되면 하나의 메소드에 여러 개의 구현을 과적할 수 있습니다. 오버로딩은 같은 메소드 이름으로 매개 변수의 개수 또는 타입을 다르게 정의할 수 있습니다. 동일한 역할을 하는 메소드의 경우 이름을 다르게 할 필요 없이 매개 변수의 개수 또는 타입만 다르게 정의하면 됩니다. 오버로딩을 활용 하면 메소드 이름을 새로 지을 필요가 없을 뿐만 아니라 코드를 일관성 있게 유지해 줍니다. 컴파일러는 매개 변수의 개수와 타입을 분석해서 어떤 메소드를 실행할지 찾습니다.

다음은 오버로딩의 예제 코드입니다.

namespace Overloading
{
    class MainApp
    {
        static int GetRectangleArea(int width, int height)
        {
            return width * height;
        }

        static float GetRectangleArea(float width, float height)
        {
            return width * height;
        }

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

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

        static void Main(string[] args)
        {
            Console.WriteLine(GetRectangleArea(20, 50));
            Console.WriteLine(GetRectangleArea(1.2f, 3.5f));
            Console.WriteLine(Sum(1, 2));
            Console.WriteLine(Sum(10, 11, 12));
        }
    }
}
1000
4.2
3
33

오버라이딩(Overriding)

오버라이딩의 사전적 의미는 더 중요한, 최우선시 되는 입니다. 오버라이딩은 기반 클래스에서 물려받은 메소드를 파생 클래스에서 재정의하는 것입니다. 오버라이딩을 하게 되면 기반 클래스의 메소드보다 파생 클래스의 메소드가 더 우선시 됩니다. 객체 지향 프로그래밍에서 다형성(Polymorphism)은 객체가 여러 형태를 가질 수 있다는 의미인데, 이 다형성을 구현하기 위해서는 오버라이딩을 사용합니다.

메소드를 오버라이딩 하기 위해서는 메소드가 virtual 키워드로 한정되어 있어야 하고 오버라이딩 하는 메소드는 override 키워드로 한정해줘야 합니다. 또한 private 키워드로 한정된 메소드는 오버라이딩 할 수 없습니다.

다음은 오버라이딩의 예제 코드입니다.

namespace Overriding
{
    class ChessPiece
    {
        public virtual void Move()
        {
            Console.WriteLine("체스피스 : 이동할 수 없음");
        }
    }

    class Pawn : ChessPiece
    {
        public override void Move()
        {
            Console.WriteLine("폰 : 앞으로 한칸씩 이동, 초기에는 2칸 이동 가능");
        }
    }

    class Rook : ChessPiece
    {
        public override void Move()
        {
            Console.WriteLine("룩 : 가로막고 있는 피스가 없는 한 종횡으로(상하좌우로) 원하는만큼 이동");
        }
    }

    class Bishop : ChessPiece
    {
        public override void Move()
        {
            Console.WriteLine("비숍 : 가로막고 있는 피스가 없는 한 대각선방향으로 원하는만큼 이동");
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            ChessPiece piece = new ChessPiece();
            piece.Move();

            ChessPiece pawn = new Pawn();
            pawn.Move();

            ChessPiece rook = new Rook();
            rook.Move();

            ChessPiece bishop = new Bishop();
            bishop.Move();
        }
    }
}
체스피스 : 이동할 수 없음
폰 : 앞으로 한칸씩 이동, 초기에는 2칸 이동 가능
룩 : 가로막고 있는 피스가 없는 한 종횡으로(상하좌우로) 원하는만큼 이동
비숍 : 가로막고 있는 피스가 없는 한 대각선방향으로 원하는만큼 이동

참고

반응형
블로그 이미지
Frontend Engineer

댓글