SOLID 원칙 4

[SOLID] DIP(=Dependency Inversion Principle, 의존관계 역전 원칙)

SOLID 원칙 중 마지막인 5. DIP(=Dependency Inversion Principle, 의존관계 역전 원칙) " '고수준 모듈'은 '저수준 모듈'의 구현에 의존해서는 안 된다. '저수준 모듈'이 '고수준 모듈'에서 정의한 추상 타입에 의존해야 한다." - 다른 말로 "자신보다 변하기 쉬운 것에 의존하 지 마라" - Ex) 고수준 모듈은 자동차 / 저수준 모듈은 스노우 타이어 - '추상화'를 이용해 문제 해결 - Ex) DIP 위반 사례 ⓐ 고수준 모듈인 자동차가 저수준 모듈인 스노우 타이어에 의존하는 상태 ⓑ 일반 타이어로 교체하기로 결정 ⓒ [문제] 의존하고 있던 자동차의 코드도 연쇄적으로 영향을 끼치게 됩니다.(개방-폐쇄 원칙을 위반) class Car(val tire: SnowTire)..

[SOLID] ISP(=Interface Segregation Principle, 인터페이스 분리 원칙)

SOLID 원칙 중 4번째인 1. ISP(=Interface Segregation Principle, 인터페이스 분리 원칙) " 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다." - 다른 말로 "클라이언트는 자신이 사용하는 메소드에만 의존해야 한다." - 클라이언트를 기준으로 인터페이스를 분리함으로써, 클라이언트로부터 발생하는 인터페이스의 여파가 다른 클라이언트에 미치는 영향을 최소화하는 것을 목표로 한다 - Ex) ISP 위반 사례 ⓐ interface Machine 에는 copy(), print(), fax(address: Address) 와 같은 모든 기능별 메소드가 선언되어 있다. ⓑ Machine을 상속받은 'class CopyMachine'는 copy() 외의 기능을..

[SOLID] LSP(=Liskov substitution principle, 리스코프 치환 원칙)

SOLID 원칙 중 3번째인 1. LSP (=Liskov substitution principle, 리스코프 치환 원칙) " 특정 메소드가 상위 타입을 인자로 사용한다고 할 때, 그 타입의 하위 타입도 문제 없이 정 상적으로 작동을 해야 한다." - 다른 말로 "상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한 다."를 의미 public int calculate(final Item item) { return item.calculate(); } ㄴ> 상위 타입인 Item이 있고, 그 하위 타입이 Apple이라면, LSP원칙 준수 시 위 인자로 item이 아닌 apple을 넘겨도 코드가 동작해야 합니다. - LSP 원칙이 제대로 지켜지지 않으면 다형성에 ..

카테고리 없음 2022.06.28

[SOLID] OCP (=Open-Closed Principle, 개방 폐쇄 원칙)

SOLID 원칙 중 두번째인 1. OCP (=Open-Closed Principle, 개방 폐쇄 원칙) "확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다." - 다른 말로 "기능변경하거나 확장할 수 있으면서 그 기능을 사용하는 코드는 수정하지 않는다."를 의미 - 적용방법 (2가지) => 변화하는 부분을 추상화함으로써 기존 코드를 수정하지 않고도, 확장을 할 수 있게 만들어 줍니다. #1) 변화하는 부분을 추상화하는 것 -> 주로, 인터페이스를 통해서 구현을 합니다. #2) 상속을 이용하는 것 더보기 - ex) 상속을 사용 ⓐ HTTP 응답 프로토콜에 맞춰 데이터를 전송해 주는 ResponseSender 클래스가 존재한다. ⓑ 이때, 기존 기능에 압축 기능을 추가 필요한 상황 발생 ⓒ Respon..