본문 바로가기

SoftwareEngineering

SOLID - 객체지향 설계: 유지 보수와 확장이 쉬운 시스템 설계

S : 단일 책임 원칙(SRP) : 퍼사드, 프록시 패턴

클래스는 단순히 함수와 데이터를 결합한 집합

만약 하나의 클래스에 변경을 위한 두 가지 이상의 이유가 있다면 그 클래스는 한 가지 이상의 책임을 가지고 있는 것

SRP를 적용하면 클래스의 숫자가 늘 수는 있다. 하지만 클래스 숫자의 증가가 프로그램의 복잡도 증가와 비례하는 것은 아니다.

Actor : 변경을 일으키는 사람 또는 집단

하나의 클래스는 하나의 Actor만을 책임 (하나의 역할만 할 것)

동일 객체의 역할 분리 : Interface와 각각의 역할 구현체로 분리(*ISP), 또는 상속을 통한 클래스 분할(*SRP)

Facade 패턴 : SRP를 적용하면 클래스의 숫자가 늘어날 수 있는데, 클래스의 숫자가 늘어나면 사용이 불편하게 되므로 퍼사드 패턴을 통해 사용의 복잡함을 단순화 시켜 줄 수 있다.

서브시스템에 있는 인터페이스 집합에 대해서 하나의 통합된 인터페이스를 제공하는 패턴으로, 서브시스템을 좀 더 사용하기 편하게 만드는 상위 수준의 인터페이스를 정의

쉽게 말하면 하위 시스템의 복잡함을 단순화 시키는 패턴.

Proxy 패턴 : 연쇄하는 역할의 분리, 클라이언트 -> 인터넷(인터페페이스) w 인터넷 구현체 DI -> 프록시 구현체 (차단역할) and 실제 인터넷 연결 위임-> 인터넷 구현체 (인터넷 연결 역할)

https://huisam.tistory.com/entry/ProxyPattern

AOP 사용

O : 개방 폐쇄의 원칙(OCP) : 전략 패턴

확장에는 개방, 수정에는 폐쇄, 상속보다는 인터페이스 사용
클라이언트 has a 인터페이스 - 구현체, Dependency Injection

순환참조 제거 : A클래스는 B클래스를 호출하지만 B클래스는 A클래스를 호출하지 않고, 모든 컴포넌트 관계는 단방향

시스템 -> 컴포넌트 단위로 분리 , 저수준 컴포넌트의 변경이 고수준 컴포넌트의 영향이 없도록 의존성 계층구조

클라이언트 has a 전략 DI
전략1 implments 전략
전략2 implements 전략
전략3 implements 전략

https://dublin-java.tistory.com/48?category=680842

 

[객체지향] OCP (개방 폐쇄의 원칙 : Open Close Principle)

글의 순서 if-else의 문제점 OCP (Open Close Principle) 전략 패턴 (Strategy Pattern) OCP란? Open Close Principle : 개방폐쇄의 원칙 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 로버트 마틴이..

dublin-java.tistory.com

L : 치환 원칙 (LSP) : 상속(Categorize: 추상화, 일반화 - 구체화, 특수화)

하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야함

상속관계 (Extends): A가 B를 상속한다: A는 B이다, A는 B의 한 종류이다. (아버지 - 할아버지 X, 금붕어 - 물고기 O)

구현관계 (Implemnet) : 구현 클래스 ia able to 인터페이스

하위 클래스가 상위 클래스의 기능을 재정의 하지 말자

I : 인터페이스 분리 원칙 (ISP)

어떤 클래스가 다른 클래스에 종속 될 때 최소한의 기능만을 사용

SRP와 비슷하게 책임(역할)나누기이며
SRP는 하나의 클래스를 하나의 책임(역할)만 행하는 다수의 클래스로 분할
ISP는 각 역할에 맞는 인터페이스로 분리하여 이를 통해 책임(역할) 구현

복합기 implements 프린터, 복사기, 팩스
프린트기능 클라이언트 has a 프린터
복사기기능 클라이언트 has a 복사기
팩스기낭 클라이언트 has a fax

D : 의존 역전 원칙(DIP)

변화하기 어려운 것, 거의 변화가 없는 것에 의존하라.

추상클래스 혹은 인터페이스에 의존 관계를 맺는 것이 유연하다.

https://supark7.tistory.com/

 

배우는 즐거움

 

supark7.tistory.com

https://blog.naver.com/1ilsang/221105781167

 

JAVA 객체지향 디자인패턴] 3. SOLID 원칙 / 단일책임원칙 SRP, 개방폐쇄원칙 OCP, 리스코프 치환 원칙 LSP, 의존 역전 원칙 DIP, 인터페이스 분리 원칙 ISP

JAVA 객체지향 디자인패턴] 3. SOLID 원칙 / 단일책임원칙 SRP, 개방폐쇄원칙 OCP, 리스코...

blog.naver.com