언어 자료구조 알고리즘/C# 언어 문법

15. 상속

언제나휴일 2009. 8. 19. 05:47
반응형

상속

 

다루는 내용

 - 상속

 - 인터페이스 다중 상속(구현 약속)

 - 액세스 한정자

 - sealed

 

 OOP의 세 기둥이라 하면 캡슐화와 상속, 다형성을 얘기를 한다.  지금까지 다룬 내용들은 모두 캡슐화에 관련된 내용으로 어떻게 클래스를 정의를 할 것인가에 대해서 살펴보았다.

 

 상속은 정의되어 있는 클래스를 기반으로 재 사용, 수정 및 확대를 통해 파생된 클래스를 정의할 수 있게 해 준다.  경우에 따라서는 자신을 기반으로 파생하는 것을 봉인할 수도 있다.  C++언어에서는 다중 기반 클래스로부터 파생을 할 수 있는 다중 상속을 제공해 주었는데 C#에서는 기반이 되는 클래스는 많아야 하나이다.  대신 인터페이스에 대해 다중 상속(구현 약속)을 지원을 해 주고 있다.

 

 Look & Feel & Think  
 
 
 
위에 Man이라는 추상 클래스와 IStudy, IThink 인터페이스가 정의되어 있다.
이를 기반으로 파생 클래스를 정의하는 예가 아래에 있다.  기반이 되는 클래스는 많아야 하나이며 기반 클래스가 존재하는 경우에 상속을 명시할 때 맨 앞에 와야 한다.  인테페이스에 대한 구현 약속(상속)에 대해서는 다중 상속을 제공해 주고 있다.  예를 든 Stu 클래스를 우리는 "학생은 사람인데 공부와 생각을 할 수 있다"와 같이 얘기를 할 수 있을 것이다.
 

 

액세스 한정자 중에서 클래스의 멤버 앞에 붙는 것은 상속과 깊은 연관이 있다.  private의 경우는 해당 클래스 내에서만 가시성이 있으며 protected의 경우는 파생된 클래스까지 가시성이 확대된다.  public은 전체 영역에서 가시성이 있으며 internal의 경우는 이 후 다루게 될 어셈블리에 대한 언급에서 자세히 다루겠지만 동일 어셈블리 내에서 가시성이 존재하게 된다.  그리고, protected internal의 경우는 같은 어셈블리와 파생된 클래스에게 가시성이 주어진다.  이처럼 목적에 따라 액세스 한정자를 명시할 수 있게 해 주고 있다.

 

 Look & Feel & Think  

여기에서는 액세스 한정자를 protected로 설정했을 때의 예만을 들기로 하겠다.  다른 부분에 대해서는 이를 기반으로 사고를 확장하고 테스트 코드를 작성해 보길 바란다.  물론, internal과 protected internal을 이해하기 위해서는 현재까지의 내용으로는 이해하기 힘들며 .NET 어셈블리에 대해 이해하고 있어야 한다.  앞에서 얘기했지만 이들에 대해서는 어셈블리를 다루면서 다시 언급하기로 하자.

 

액세스 한정자를 명시하지 않은 멤버는 디폴트가 private로 설정이 되며 Man클래스의 i필드와 name필드의 경우가 private 액세스 권한을 갖게 된다.  Name필드는 protected 액세스 한정자를 설정하였고 ToString()의 경우는 public이다.

 

name필드의 경우 액세스 한정자가 private로 설정되어 있기 때문에 Man클래스 이외에서는 접근이 불가능하다.

 

Name필드의 경우 Man의 protected로 설정되어 있는데 Program클래스는 Man을 기반으로 한 파생 클래스가 아니므로 접근이 불가능하다.

 

Name필드의 경우 Man의 protected로 설정되어 있고 Stu클래스는 Man을 기반으로 파생된 클래스이므로 접근이 가능하다.

 

 Look & Feel & Think  

다음의 예를 통해 sealed 키워드를 통해 파생을 봉인하는 것을 확인할 수 있다.

 

반응형

'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글

17. 인터페이스(Interface)  (0) 2009.08.19
16. 다형성  (0) 2009.08.19
14.정적 클래스 및 정적 멤버  (0) 2009.08.19
13.메소드  (0) 2009.08.19
12. 속성(Property)  (0) 2009.08.19
11.Class  (0) 2009.08.19
10.Casting  (0) 2009.08.19
9.String  (0) 2009.08.19
8. Object  (0) 2009.08.19
7. 배열  (0) 2009.08.19