위키득계정 ↗
기술

상속 (객체 지향 프로그래밍)

상속 (객체 지향 프로그래밍)기술
영문명
Inheritance
주요 관계
기반 클래스와 파생 클래스
주요 용도
공통 동작 이용과 확장
관련 설계
합성과 다형성
객체 지향 프로그래밍에서 상속은 기존 형식이나 클래스의 정의를 바탕으로 다른 형식을 구성하는 관계다. 공통 구현을 이용하고 동작을 확장하는 데 쓰이지만, 단순한 코드 재사용과 올바른 타입 관계는 구분해야 한다.

공통 동작에서 출발하기

여러 도형이 면적을 계산하는 연산을 제공하도록 만들 수 있다. 공통의 도형 형식을 두고 원과 사각형이 각자 다른 계산을 제공하는 방식은 상속을 이용한 설계의 한 예다. 실제로 어떤 멤버를 물려받고 바꿀 수 있는지는 언어의 규칙에 따라 다르다.

대신 사용할 수 있는가

파생 형식을 기반 형식으로 다루는 코드에서는 공통으로 약속한 동작을 기대한다. 파생 형식이 그 기대를 깨뜨린다면 문법상 상속이 가능해도 설계상 문제가 될 수 있다. 이름이나 속성이 비슷하다는 이유만으로 적절한 상속 관계가 성립하지는 않는다.

구현 공유와 결합

기반 클래스의 코드를 공유하면 중복을 줄일 수 있지만 내부 동작에 대한 의존성도 생길 수 있다. 기반 클래스가 변경되면서 파생 클래스의 예상과 어긋나는 일이 발생할 수 있다. 계층이 깊어질수록 실제 동작을 이해하기 위해 여러 정의를 따라가야 할 수 있다.

합성과의 선택

다른 객체를 내부에 두고 필요한 일을 맡기는 합성도 재사용 방법이다. 전체와 부품의 관계인지, 기존 형식을 대신할 수 있는 관계인지에 따라 선택이 달라진다. 상속을 쓰지 않는 것과 재사용하지 않는 것은 같은 말이 아니다.

관련 문서

객체 지향 프로그래밍 / 프로그래밍 언어 / 추상화 (컴퓨터 과학) / 자료형