객체지향 기본원칙 |
SRP(Single Responsibility) : 단일책임원칙 OCP(Oepn Cloased): 개방폐쇄원칙 LSP(the Liskov Substitution Principle): 리스코프 치환원칙 ISP(Interface Segregation Principle) : 인터페이스 분리설계원칙 DIP(The Dependency Inversion Principle): 의존성 주입
|
SRP (Single Responsibility Principle) 단일책임원칙 |
객체는 단 한 개의 책임(역할)만을 가져야 한다는 내용으로, 객체를 변경해야 하는 이유는 단 하나여야 한다는 원칙
결합도가 증가할 가능성이 높아 하나의 책임을 변경할 경우 다른 책임을 변경할 가능성 생김
|
OCP (Oepn Cloased Principle) 개방폐쇄원칙 |
변화부분은 확장가능하되, 변경은 어려운구조 (불변하는 부분만 클라이언트제공)
클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다
connect를 s사 키보드에 종속되어 keyborad를 받아서 객체를 주입받는다.
public void connect() { System.out.println("S사 키보드가 연결 되었습니다."); }
public void setKeyboard(Keyboard keyboard) { this.keyboard = keyboard; }
Computer 클래스의 멤버 변수에 Keyboard 인터페이스를 정의하고, setKeyboard 메소드를 통해 특정 제조사의 키보드 객체를 주입 받는다. 이와 같이 인터페이스를 이용해 키보드 연결이라는 행위를 추상화함으로써 Keyboard 인터페이스를 구현한 어떠한 키보드 클래스도 주입 받을 수 있을 것이다. 대응전략 : 전략패턴 |
LSP(the Liskov Substitution Principle) 리드코프 치환원칙 |
상위 클래스타입으로 선언된 곳에 구체 클래스타입의 객체를 대입해도 문제되지 않도록 설계하라는 원칙
하위클래스가 상위클래스의 역할을 맡겨도 문제가되지 않게 설계해라
오수진 눈높이 아버지(상위)<-딸 (상속) 받아서 클래스를 만들면 딸이 아버지 역할에 대한 함수도 처리해야 하므로 문제가 된다.
자식들은 부모 타입 사용하는 곳에 대체 가능하며,상속후 재정의 하지 않고 사용 – 객체지향의 상속은 계층도가 아니라 분류도가 되어야 함
|
ISP (Interface Segregation Principle) 인터페이스 분리원칙 |
어떤 클래스를 인터페이스를 사용하여 구현할 때 사용하지 않는 메소드를 가지고 있는 인터페이스에 의존하게 하지 말아야 한다. 클래스가 사용하는 기능만 제공하도록 인터페이스를 분리하는 것. ‘하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스가 낫다.’
복합기를 나눠서 구현
해당하는 기능만 제공받도록 구성
|
DI(Dependency Injection ) |
의존성주입 각 계층 사이, 각 계층 클래스 사이에 필요로 하는 의존 관계를 컨테이너가 자동으로 연결해주는 것 각 클래스간 의존관계를 bin 설정 정보를 바탕으로 컨테이너가 자동으로 연결해줌
유형 - 스프링 설정방법 Setter Injection : 인자없는 생성자나 static factory 메소드 빈의 setter 메소드 호출화여 실제화,설정파일<property>태그이용 Constructor Injection 생성자 이용 클래스간 의존관계주입,설정파일<constructor-arg> 태그이용 Method Injection : singleton인스턴스와 non singleton 인스턴스 의존관계 연결시킬필요없을때, 지원암함 https://velog.io/@wlsdud2194/what-is-di
public Programmer() { this.coffee = new Coffee(); }
// 그 날 마실 커피를 고를 수 있게된 개발자 public Programmer(Coffee coffee) { this.coffee = coffee; } |
DIP(The Dependency Inversion Principle) |
의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는거의 변화가 없는 것에 의존되도록 설계하라는 원칙 – 의존 대상은 구체클래스나 파생클래스가 아닌 추상 클래스 Interface에 의한 프로그래밍,객체간 연동 - IoC(Inversion Of Control) : 제어의 역전 - DI(Dependency Injection) : 의존성 주입 - 주입 : 주입이란 말은 외부에서라는 뜻을 내포하고 있는 단어다. 자동차 내부에서 타이어를 생산하는 것이 아니라 외부에서 생산된 타이어를 자동차에 장착하는 작업이 주입이다. |
IoC (Inversion Of Control) |
클래스간 의존도를 낮추어 실행시점에 클래스간의 관계가 형성되게 설계하여의존성을 생성
main()과 같은 프로그램 시작지점에서 다음에 사용할 객체를 결정하여 생성, 메소드 호출 등의 작업을 반복하여 프로그램을 수행하던 전통적 방법의 불편함을 해소 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조로 각 객체는 프로그램 흐름을 결정하거나 사용할 객체를 구성하는 작업에 능동적으로 참여하는 방식 |
DL(Dependency Lookup) |
의존성 검색 저장소에 저장되어 있는 bin에 접근하기 위해 개발자들이 컨테이너 제공하는 api를 이용하여 사용하고자 하는 bin을 lookup하는 것
dl방법 의존성풀 : 필요할때마다 레지스트리에 의존성 가져옴 SHAPE \* MERGEFORMAT 컨텍스화된 의존성 룩업 : 컨테이너는 내부 WAS 나 스프링 프레임워크에서 제공
|
'기술사 > SW' 카테고리의 다른 글
Adapter 패턴 (0) | 2021.04.23 |
---|---|
싱글톤 패턴(디자인패턴) (0) | 2021.03.05 |
factory 패턴 (디자인패턴) (0) | 2021.03.05 |
디자인패턴 (0) | 2021.03.05 |
객체지향 특징(캡추다정상) (0) | 2021.01.20 |