우아한 테코톡(7), 상속과 조합

2022. 8. 18. 23:04간단한 컴퓨터 이론/우아한테코톡

728x90
반응형

본 포스팅은 우아한Tech의 테코톡 클레이님의 상속과 조합 영상을 정리한 내용입니다.

상속과 조합의 특징 및 문제점을 위주로 정리했습니다.


상속과 조합


1. 상속의 문제

1) 상속이란?

기존에 정의되어있는 클래스의 필드, 메소드를 물려받아 새로운 클래스를 생성하는 기법


 

2) 상속의 장점

(1) 중복 코드를 제거하고 기능 확장을 쉽게 할 수 있다.

 

(2) 클래스들의 계층적인 구조를 만들 수 있다.


3) 상속의 문제점

(1) 하위 클래스가 상위 클래스의 구현에 의존하기 때문에 상위 클래스가 변경될 경우 취약하다.

즉, 상속은 부모 클래스와 강하게 의존하고, 부모 클래스의 캡슐화를 해치며 결합도가 높아진다는 단점이 있다. 따라서 부모 클래스의 구현을 변경하면 많은 자식 클래스를 모두 변경해야하는 상황이 발생할 수 있다.

 

(2) 상위 클래스의 모든 퍼블릭 메서드가 하위 클래스에도 반드시 노출된다.

불필요한 메서드도 상속받는 문제가 발생할 수 있다.  상속은 불필요한 부모 클래스의 퍼블릭 메서드가 자식 클래스도 어쩔 수 없이 노출하게 된다. 특히 공개된 부모 클래스의 퍼블릭 메서드가 자식 클래스의 내부 규칙과 맞지 않을 수 있다.

 


2. 조합으로 바꿔보기

1) 조합이란?

전체를 표현하는 클래스가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용하는 방법


 

2) 조합의 특징

(1) 상속과 달리 부분 객체의 내부 구현이 공개되지 않는다.

 

(2) 퍼블릭 인터페이스에 의존해서 메소드를 호출하기에 부분 객체의 내부 구현이 변경되어도 비교적 안전하다.

 

(3) 부분 객체의 모든 퍼블릭 메서드를 공개하지 않아도 된다.


3) 상속을 조합으로 바꾸기

조합하고 싶은 클래스의 인스턴스를 새로운 클래스의 private 필드로 참조하여 그 인스턴스의 메서드를 호출하는 방식으로 구현할 수 있다. 이렇게 조합으로 바꾼다면 부분 객체의 캡슐화를 지킬 수 있다. 조합은 부분 객체의 퍼블릭 인터페이스에 의존하게 된다. 조합을 사용하면 새롭게 메서드를 정의할 수 있기에 부분 객체의 모든 공개 메서드를 노출하지 않아도 된다.


3. 상속과 조합은 어떨 때 사용할까?

1) 상속의 목적

(1) 서브타이핑

다형적인 계층구조 구현

(부모와 자식 클래스의 호환 o)

 

(2) 서브클래싱

다른 클래스의 코드를 재사용

(부모와 자식 클래스의 호환 x)

 

=> 서브클래싱을 목적으로 코드를 작성하는 경우에는 조합을 사용하는 것이 좋다.


2) 상속을 고려하기 전에 물어볼 질문

(1) 상속을 고려하는 두 객체가 IS-A 관계인가? 

(2) 클라이언트 관점에서 두 객체가 동일한 행동을 할 것이라 기대하는가?

=> 두 질문에 YES라고 답할 수 있는 경우에 상속을 사용하는 것이 좋다.


 

출처


 

 

https://www.youtube.com/watch?v=U4OSS4jJ9ns 

 

728x90
반응형