본문 바로가기
프로그래밍/c#

c#_33 클래스 상속(Class inheritance)

by 지나팩 2021. 7. 20.

상속이라 하면 보통 부모의 재산을 자식이 물려받는 것을 말합니다. 이 클래스의 상속 역시 부모의 자원을 물려받는 다는 것은 똑같습니다. 다만 부모의 모든 것을 물려받는 것이 아닌 물려주고자 하는 자원들만 상속을 받게 됩니다. 상속을 하는 이유는 각 객체들이 공통적으로 가지게 되는 자원들을 편리하게 사용하기 위함입니다. 사람을 예로들어 설명해보겠습니다.

사람이라는 객체가 공통적으로 가지게 되는 상태와 기능들이 있습니다. 이러한 자원들은 사람이라면 모두 가지고 있죠. 그리고 각 개인들만이 독립적으로 가지고 있는 상태와 기능들도 있을 겁니다. 만약 개인에 해당하는 객체들을 클래스로 만들어 생성한다면 그 수가 작을 땐 큰 문제가 없을 수 있지만 그 수가 많다면 공통되는 상태와 기능에 대한 코드를 일일히 다 써야합니다. 이런 작업은 정말 비효율적이겠죠?

그래서 공통되는 상태와 기능들은 상속을 통해 물려받음으로써 작업의 양을 대폭 줄일 수 있습니다. 더불어 공통된 자원들 중 추가되거나 삭제해야할 상태와 기능들도 부모 클래스 내에서 작업을 함으로써 확장성과 안정성도 확보가 됩니다.

 

상속 방법

상속하고자 하는 부모 클래스를 자식 클래스 이름 옆에 : 와 함께 부모 클래스의 이름을 붙혀주면 상속완료!!

위 예제에서 보듯 상속을 받은 자식 클래스는 부모의 모든 자원을 물려받습니다. 자식 클래스 객체를 다른 클래스 내에서 생성 시 모든 자원에 접근이 가능한 걸 볼 수가 있습니다. 다만 지난 포스팅에서 알아보았던 접근 제한자 중 public 또는 protected로 선언된 필드(변수)와 메소드(함수)만 물려봤습니다. 아래의 예제를 통해 더 알아보도록 하죠.

부모 클래스
자식 클래스
타 클래스

예제를 통해 보듯 prtivate으로 선언된 money 필드의 경우 자식 클래스 내에서도 접근이 불가능한 것을 볼 수 있습니다. 더불어 protected로 선언된 필드들도 자식 클래스에선 접근이 가능하지만 타 클래스에선 접근이 불가능합니다. 이렇듯 부모 클래스로 부터 상속을 받지만 모든 것을 다 상속받는 것은 아닙니다. 부모가 물려주고자 하는 자원만 물려주는 것이죠. 

위 예제는 상속을 받은 자식 클래스의 객체를 생성 시 부모 클래스의 생성자가 호출된 뒤 자식 생성자가 호출되는 것을 볼 수 있습니다. 생성자의 경우 상속이 되지 않습니다. 반대로 소멸자를 포함하게 된다면 객체가 삭제될 때 자식의 소멸자가 호출된 뒤 부모의 소멸자가 호출됩니다.

댓글