안녕하세요, 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 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]
'C# > C# 일반 & Basic (General & Basic)' 카테고리의 다른 글
C# 프로그래머 되기 Property 선언 or 초기화 방법 및 추상 클래스 이용한 Property 활용 (0) | 2021.03.04 |
---|---|
C# 프로그래머 되기 추상 클래스 및 Property 기본 구문 (0) | 2021.03.04 |
C# 프로그래머 되기 접근 한정자 개념, 클래스 형식 변화 그리고 is 와 as 개념 (0) | 2021.03.04 |
C# 프로그래머 되기 기반 클래스, 파생 클래스, 그리고 this 개념 (0) | 2021.03.04 |
C# 프로그래머 되기 - ArrayList 활용하기 (1) | 2021.03.04 |
댓글