Zero to Hero
Published 2021. 1. 23. 14:56
코딩을 지탱하는 기술 04 Review

변수와 함수를 합쳐서 모형을 만드는 법

1. 모듈, 패키지

 

2. 퍼스트 클래스: 함수를 해쉬에 넣기

 

3. 클로저

 

4. 클래스

 

상속

1. 일반화/특수화

부모 클래스로 일반적인 기능을 구현하고 자식 클래스로 목적에 특화된 기능을 구현하는 접근

자식 클래스는 부모 클래스를 특수화하는 설계 방법

 

2. 공통부분을 추출

복수 클래스의 공통부분을 부모 클래스로서 추출하는 접근법

자식 클래스는 부모 클래스의 일종이라고 할 수 없다.

 

3. 차분 구현

상속 후 변경된 부분만을 구현하면 효율이 좋다는 접근법. 상속을 재사용을 위해 사용하는 방법.

자식 클래스는 부모 클래스의 일종이라고 할 수 없다.

 

단점

 

1. 상속을 많이 사용하면 코드가 복잡해진다.

2. 상속이 많을수록 깊은 상속 트리가 만들어지고, 이것은 프로그램을 이해하기 어렵게 만든다.

3. 상속이 많을수록 리스 코프 치환 원칙을 위배할 가능성이 높아진다.

 

리스 코프 치환 원칙

어떤 클래스 T의 객체에 대해 항상 성립하는 조건이 있다면 그 조건은 자식 클래스 S에 대해서도 항상 성립해야 한다.

 

즉 어떤 조건 Q를 만족하는 T가 있다고 하면 T는 Q의 부 분집합니다.

그리고 T의 자식 클래스인 S를 만들었다. 즉 T의 형에 S클래스를 대입할 수 있다.

그런데 이 S가 Q를 만족한다고 보장할 수 있나? -> 없다, 정확히는 복잡해질수록 예외 케이스가 생길 가능성이 생긴다.

 

해결법

 

다중 상속

복수의 클래스를 상속하는 기법

 

장점

코드 재사용에 편리하다.

단점

위에 언급한 모든 것에 충돌 가능성이 증가한다

 

A라는 메서드를 호출하면 현재 클래스가 A메서드가 없는 경우, 어떤 부모 클래스의 A메서드를 실행해야 하는가?

 

해결법

 

1. 다중 상속 금지

Java의 경우가 그러함, 하지만 불편함 -> Interface로 우회함

 

인터페이스

코드를 가지고 있지 않은 클래스. 인터페이스를 상속하는 클래스는 반드시 인터페이스가 가지고 있는 메서드를 가지고 있어야 한다는 스펙, 즉 사양을 가지고 있다.

 

복수의 코드를 가지고 있을 때 충돌하지만 다중 인터페이스 상속의 경우 코드의 실체인 내용이 없기 때문에 문제가 되지 않는다.

 

2. 메서드 해결 순서를 정해준다

현실적으로 문제가 발생할 수 있는 방법, 마름모 상속이 발생할 수 있다

 

3. 처리를 섞기

Mix-in 설계를 통해 재사용하고 싶은 기능만을 모은 작은 클래스를 만들어서 해당 기능을 추가하고 싶은 클래스에 섞는 방법

상속 트리의 깊이를 줄일 수 있다

 

4. 트레이트

재사용 단위라는 역할에 특화된 보다 작은 구조(트레이트 = 메서드 묶음)를 만들어서 해결하기

 

 

 

코딩을 지탱하는 기술
국내도서
저자 : 니시오 히로카즈 / 김완섭역
출판 : 비제이퍼블릭 2013.10.16
상세보기

'Review' 카테고리의 다른 글

웹을 지탱하는 기술 02  (0) 2021.01.23
웹을 지탱하는 기술 01  (0) 2021.01.23
코딩을 지탱하는 기술 03  (0) 2021.01.23
코딩을 지탱하는 기술 02  (0) 2021.01.23
코딩을 지탱하는 기술 01  (0) 2021.01.23
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!