sealed 클래스 [C#]

공부/C#  2012.09.18 09:00

안녕하세요. 명월입니다.


이번 포스트는 상속 금지 클래스인 sealed 클래스와 메소드에 대해 공부하겠습니다..
sealed 클래스란 추상 메소드와 반대인 봉인 클래스라고도 합니다. 즉 sealed 키워드를 넣으면 상속을 할 수 없게 바뀌게 됩니다. (자바에서는 final과 같습니다.)



클래스에 sealed 선언하고 다른 클래스에서 상속받게 되면 위와 같이 에러가 발생합니다..
sealed 키워드는 클래스만 사용할 수 있는 게 아닙니다. 상속은 할 수 있어도 상속된 클래스에서 매소드를 오버라이드 못하게 막을 수도 있습니다.



위처럼 매소드에 sealed를 선언하고 하위 클래스에서 override로 재정의하면 에러가 발생합니다.

보통 프로그램을 만들 때는 sealed를 잘 사용하지는 않습니다만 String 등은 sealed 처리 되어있어서 상속을 받을 수 없습니다. 그러나 디자인 패턴 중에 adapter, proxy 패턴이 있는데 상속을 받을 수 없어도 proxy 클래스를 만들면 상속의 효과(?)를 만들 수 있기 때문에.
개인적인 생각입니다만 sealed 키워드는 의미가 있을까 싶네요.

'공부 > C#' 카테고리의 다른 글

예외 처리 - [C#]  (0) 2012.09.22
이벤트(Event) - [C#]  (0) 2012.09.21
델리 게이트(delegate) - [C#]  (0) 2012.09.20
인터페이스 [C#]  (0) 2012.09.19
sealed 클래스 [C#]  (2) 2012.09.18
this, base 키워드 [C#]  (0) 2012.09.17
추상 클래스(abstract)와 가상 함수(virtual) [C#]  (2) 2012.09.16
상속 [C#]  (2) 2012.09.15
열거형 [C#]  (2) 2012.09.14

댓글 2개가 달렸습니다.
댓글쓰기
  1. cc
    2016.06.21 15:07 신고 |  수정/삭제  댓글쓰기

    물론 우회해서 사용된다면 , 별 의미가 없겠지만 sealed 를 명시함으로써 가독성을 높일수 있지 않을까요..

  2. 요원009
    2016.12.07 15:54 신고 |  수정/삭제  댓글쓰기

    sealed의 원래 목적은 무분별한 상속을 막아 가독성과 유지 보수의 용이성을 확보하기 위함인데, 중요한 목적이 하나 더 있습니다.
    제약 사항이 많다보니 성능 향상이 된다는 것이죠. 실제로 인터페이스가 많은 프로그램일수록 상속받는 sealed 클래스가 일반 클래스보다 성능이 낫습니다. 윗분 말씀처럼 명시적인 가독성 향상도 좋지만, 필요한 곳에 사용하여 성능을 올리는 것도 sealed를 사용하는 방법 중 하나입니다.