무효 클릭 IP 추적 중...
c#

[c#] 클래스 상속 | 오버라이딩 3가지 방법 | sealed

꼬예 2022. 5. 20.

이번 포스팅에서는 오버라이딩(overriding)에 대한 개념과 오버라이딩을 하는 3가지 방법에 대해서 알아보겠습니다.

 

 

 

1. 오버라딩 기법 3가지

(1) 오버라이딩 기본 형태

Animal이라는 클래스Animal을 상속받은 Monkey라는 클래스가 있습니다.

그런데 이 두 클래스의 메소드가 완전히 같은 형태이네요.

 

결과를 실행하면 어떤 출력이 나올까요?

정답은 아래와 같습니다.

 

Output:

 

부모 클래스의 메소드자식(파생) 클래스의 메소드가 덮어 쓴 상황이 일어났습니다.

이러한 현상을 우리는 오버라이딩이라고 합니다. 

(오버로딩과 이름이 비슷하여 헷갈리시는 분들이 있을텐데요, 오버로딩은 해당 포스팅 내용을 참고바랍니다.)

 

 

(2) new 키워드 사용

그런데 아래 잘 보시면 정상적으로 실행되었음에도 불구하고 경고 메세지가 뜹니다.

 

내용을 정리하자면, 오버라이딩을 하기 위해서 "자식(파생) 클래스의 메소드를 쓰겠다"라고 명시적으로 적어주기를 요청하고 있는것입니다.

 

우리는 여기서 요청하는대로 new라는 키워드를 추가해보겠습니다.

마찬가지로 이렇게 작성하여도 결과는 똑같습니다.

 

 

(3) virtual, override 키워드 사용하기

마지막을 제가 가장 추천 드리는 방법인데요.

new를 사용할때자식 클래스의 메소드에만 표시를 해주었다면, 이번에는 부모 클래스, 자식 클래스 모두에게 명시적으로 표현해주는 방법입니다. 

 

보시는것처럼 부모 클래스 메소드에는 virtual 키워드를 넣어줍니다.

이렇게 적어주는것만으로도 여러명이 개발을 진행할때, "아 이 기반 클래스를 상솓받아서 메소드를 재 정의하라는 뜻이구나" 라는 걸 알 수있게 되는거죠.

 

뿐만아니라 이렇게 적어주었을때 강력함은 다형성(polymorphism)에서도 발휘가 됩니다.

(관련내용은 다형성 포스팅에서 다루도록 하겠습니다.)

 

마지막으로 자식 클래스의 메소드에도  override라는 키워드를 적어 명시적으로 표현해주었습니다.

 

참고로 virtual을 사용하면, 자식(파생) 클래스에서 오버라이딩할 메소드 작성시 자동완성기능이 있으니 적극 사용하길 추천드립니다.

 

 

 

2. base 사용법

오버라이딩을 하면 더이상 부모 클래스의 메소드는 사용할 수 없을까요?

방법이 있는데요.

그때 사용하는것이 base입니다. 

 

base라는 단어에서도 느낄수 있듯  base자식 클래스(Monkey)부모가 되는 클래스를 의미하고, 당연히 여기선 Animal이겠죠.

결과적으로 base.sleep();Anlmal.sleep();를 의미하게 됩니다.

 

출력을 해보면 부모 클래스 메서드가 실행이 되는걸 알 수 있습니다.

 

Output:

 

 

 

 

3. Sealed사용법

Sealed 키워드는 내가 만든 클래스를 다른 곳에 상속하지 못하게 막는 기법입니다.

 

만약 Animal클래스 앞에 sealed를 적으면 아래와 같이 상속을 받아 사용할 수 있었던 모든 기능을 사용할 수 없게 됩니다.

 

 

 

 

이 글과 읽으면 좋은글

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글