Study Programming/Design Pattern 10

[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] OCP (=Open-Closed Principle, 개방 폐쇄 원칙)

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

[SOLID] SRP(=Single Responsibility Principle, 단일 책임 원칙)

SOLID 원칙 중 첫번째인 1. SRP : Single Responsibility Principle = 단일 책임 원칙 " 하나의 클래스는 하나의 책임을 가지고 책임을 캡슐화해야 한다. " - 다른 말로 "어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함"을 의미 - 책임 이란? ㄴ> 기능변경 시 변화되는 부분을 하나의 책임의 단위로 묶을 수 있다. ㄴ> 각각의 책임은 서로 다른 이유로 변경되어야 한다. ex) 데이터를 읽어 오는 책임의 기능이 변경될 때 데이터를 보여주는 책임은 변하면 안 됩니다. - 왜 '단일 책임'을 가져야 하는가? ㄴ> 책임의 개수가 많아질수록 한 책임의 기능 변화가 다른 책임에 주는 영향이 비례해서 증가하기 때문에 확장 및 유지보수가 어려워진다. ㄴ> ex)..

[SOLID] 객체지향 SOLID 원칙 (=객체지향 5대 원칙=SOLID원칙)

본 포스팅에서 Design Pattern이라고 매번 쓰기 귀찮아 'DP'로 일컫으려고 합니다. 객체지향 SOLID 원칙 - [대략설명] 객체 지향 개발 시 가급적 지켜야할 5개 원칙의 약자 모음 - [상세설명] SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. - [종류] 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다. - [배경] 로버트 마틴[1][2]이 2000년대 초반[3]에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙 SOLID 원칙 종류 SRP 단일 책임 원칙 (Single responsibility pr..