본문 바로가기
C#/C# 일반 & Basic (General & Basic)

C# 프로그래머 되기 오버라이딩 사용 및 봉인, 메소드 숨기기

by ★√★ 2021. 3. 4.

안녕하세요, Davey 입니다. 오늘 포스팅 할 사항은, C# 에서 매소드를 사용 할 때 안에 내용을 바구는 기능으로써, 오버라이딩이라는 기능에 대해서 설명해 드리겠습니다.

 

 

 

오버라이딩-사용-봉인-썸네일

 

 

 그리고 오버라이딩 설명하면서 추가적으로 Class 내부에 선언한 메소드를 사용하지 않고, Instance를 생성한 Class 내부 메소드로 실행하는 기능에 대해서도 설명해 드리겠습니다. 하나 하나 설명 해 드릴 테니, 천천히 따라오시면 됩니다. 

 

오버라이딩 (override)

 

: 말 그대로, 어떤 글을 썼는데, 그 위에 다시 쓴다는 의미로, 기존의 내용을 지우고, 새로운 내용을 입힌다는 뜻입니다. 즉, Class 에서 선언한 메소드의 내용을 다시 세팅하는 기능입니다. 오버라이딩을 할 메소드는 꼭 "virtual"로 선언을 해주셔야 하며, 메소드 사용 범위는 꼭 "public" 으로 해주셔야 합니다. 기본 구문은 아래와 같습니다.

 

 

=============================================================

class Demon1
{ 
public virtual void test1()  //  오버라이딩 할 수 있게 virtual로 선언

   {

     메소드 내용

   }
}

 
class Demon2
{

 public override void test1()   // virtual로 선언한 test1()의 메소드를 override 합니다.

   {

      수정할 메소드 내용

   }
}

=============================================================

 

 

 

오버라이딩 봉인

 

: virtual로 선언했다고 하지만, 그 해당 메소드를 override 안하게 강제적으로 막는 역할을 하는 것으로, 말 그대로 봉인을 한다는 느낌으로 이해하시면 됩니다. 기본 구문은 아래와 같습니다.

 

 

=============================================================

class Demon1
{ 
public virtual void test1()  //  오버라이딩 할 수 있게 virtual로 선언

   {

     메소드 내용

   }
}


class Demon2
{

 public sealed override void test1()   // virtual로 선언한 test1()의 메소드를 override 합니다.

   {

      수정할 메소드 내용

   }
}

=============================================================

 

 

-  쉬운 이해를 돕기 위해, 아래와 같이 간단하게 오버라이딩 사용과 봉인 예시 Code를 작성하였습니다. 

 

=============================================================

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace ConsoleApplication1

{

    class society

    {

        public virtual void test4()

        {

            Console.WriteLine("TEST4");

        }

 

 

        public virtual void test1()                // 오버라이딩 할 수 있게 virtual로 선언

 

        {

 

            Console.WriteLine("TEST1");

 

        }

 

    }



  class intervine1 : society 
    { 

        public sealed override virtual void test4()    // override 를 할 수 없게, sealed 문을 써서 test4() 메소드를 봉인

        { 
            Console.WriteLine("Seal TEST"); 
        } 
    }

  

    class Demonstration : society

 

    {

        int a;

        int b;

 

        public void test3(int x, int y)

        {

            Console.WriteLine("TEST3");

            this.a = x;

            this.b = y;

        }

 

        public override void test1()      // virtual로 선언한 test1()의 메소드를 override 합니다.

        {

            Console.WriteLine("TEST2");

            Console.WriteLine(a);

            Console.WriteLine(b);

        }

       

      static void Main(string[] args) 
        { 
            society aaaa = new society(); 
            Demonstration abc = new Demonstration(); 
            society aaa = new Demonstration(); 

            aaaa.test1(); 
            abc.test1(); 
            aaa.test1(); 
             

            Console.ReadKey(); 

        }

      

     }

}

=============================================================

 

- 결과 값은 아래와 같이 나옵니다. 

 

 aaaa.test1();  // 오버라이딩 하지 않았을 때 결과 값
 abc.test1();  // 오버라이딩 했을 때 Case #1 결과 값
 aaa.test1(); // 오버라이딩 했을 때 Case #2 결과 값

 

 

 

 

 

메소드 숨기기 or 사용하지 않기

 

: 말 그대로, 메소드를 숨기거나 사용하지 않는 기능입니다. 약간 Instance 생성 할때 어떤 class로 선언 해주냐에 따라 결과 값이 달라집니다. 기본 구문은 아래와 같습니다.

 

 

=============================================================

class Demon1
{



public void test1()  //  메소드 한개를 선언

   {

     메소드 내용

   }

 }


class Demon2
{

 public new void test1()   // "new" 구문을 삽입하여, 

   {

      수정할 메소드 내용

   }
}

=============================================================

 

 간단한 구문이므로, 출력 snap shot 대신 아래 구문으로 설명 드리겠습니다. 아래 예시 참조 하세요! 

=============================================================

Demon1 abc = new Demon1(); 
Demon2 def = new Demon2(); 
Demon1 ghi = new Demon2(); 


abc.test1()
// Demon1 test1() 메소드 출력 값 출력

def.test1()

// Demon2 test1() 메소드 출력 값 출력

ghi.test1()

 // Demon2 test1() 메소드 출력 값 출력

=============================================================

 

이상입니다. 지금까지 오버라이딩이라는 기능에 대해서 설명해 드리겠습니다. 실제적으로 유지 보수 하거나 특정인에게 어떤 기능을 사용하고 싶지 않게 할 때 유용할 거 같습니다. 그럼 제 posting이 조금이나마 도움이 되셨으면 하는 마음으로 마무리하도록 하겠습니다. 오늘도 같이 C# 프로그래머가 되는데 한 걸음 더 앞으로! 수고하셨습니다.

 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab