개발 서적 기록/오브젝트_조영호

24일차 - DIP와 중복 코드 제거하기

밍 끄적 2023. 8. 29. 17:55
728x90

2023.08.29 TUE

300p ~ 322p

 

23일차 내용 ⬇️

2023.08.25 - [개발 서적 기록/오브젝트_조영호] - 23일차 - 의존성 주입

 

23일차 - 의존성 주입

2023.08.25 FRI 289p ~ 304p 22일차 내용 ⬇️ 2023.08.24 - [개발 서적 기록/오브젝트_조영호] - 22일차 - OCP 적용하기 22일차 - OCP 적용하기 2023.08.24 THU 276p ~ 290p 21일차 내용 ⬇️ 2023.08.23 - [개발 서적 기록/오

magenta-ming.tistory.com


DIP 의존성 역전 원칙

상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다. 모두 추상화에 의존해야한다.

추상화는 구체적인 사항에 의존해서는 안된다. 구체적인 사항은 추사화에 의존해야한다.

 

상위 수준의 클래스는 절대로 하위 수준의 클래스에 의존해서는 안된다.

왜냐하면 상위 수준의 클래스를 재사용할때 하위 수준의 클래스도 필요하기 때문에 재사용하기 어려워진다.

변경시에도 상위클래스와 하위클래스에 의해 영향을 받는다.

 

따라서 추상화를 통해 의존하도록 변경해서, 하위 수준 클래스의 변경으로 인해 상위 수준의 클래스가 영향을 받는 것을 방지해야한다.

 

중복 코드의 문제점

코드를 재사용하기 위해서, 중복 코드를 삭제할 수 있다. 

중복 코드는 변경을 방해하기 때문이다. 코드를 수정할 때 수정 작업이 몇배로 늘어난다. 

 

어떠한 코드가 중복인지 판단하는 기준은 변경에 따라 다르다.

항상 함께 수정되는 코드가 있다면 이 코드를 중복 코드일 수 있다.

 

타입 코드로 중복 코드 제거하기

중복이 있는 두 클래스 사이의 코드를 제거하기 위해, 클래스를 하나로 합칠 수 있다.

중복 코드를 하나로 통일할 하나의 타입 코드를 추가하고, 타입 코드의 값에 따라 로직을 분기시키는 것이다.

이런 타입 코드는 ENUM으로 적용할 수 있다.

 

상속으로 중복 코드 제거하기

유사한 클래스를 상속을 통해 중복 코드를 제거해 재사용하는 것이 가장 좋다.

위의 해결방안인, 타입을 이용한 해결방안은 항상 적용할 수 있는 것도 아니기 때문이다.

 

하지만 상속을 적용하면 그만큼 부모 클래스와 자식 클래스 간에 결합도가 증가한다.

특히 내부에서 super를 호출하고 있다면 결합도가 높아진다. 부모 클래스의 메서드를 직접 호출하게 되기 때문이다. 따라서 super를 대체할 수 있는 방법을 고민해봐야한다.

 

 

 

 

728x90