어댑터 패턴서로 다른 두 인터페이스가 함께 동작할 수 있도록 중개역할하는 디자인 패턴변환기 or 중개자 역할OOP 원칙 중 하나인 OCP ( 개방 - 폐쇄 원칙 ) 을 따른다.일상생활 예시 : 충전기충전기휴대폰 ↔ 전원 콘센트 사이 어댑터 역할휴대폰과 전원 콘센트서로 다른 인터페이스충전기가 연결을 가능하게함.프로그래밍 예시 : JDBC ODBCJDBC ( Java Database Connectivity )ODBC ( Open Database Connectivity )는 여러 다른 데이터베이스 시스템 통일된 인터페이스 제공어댑터 패턴 → 개방 폐쇄 원칙JDBC 와 JRE 는 기존 시스템에 영향을 주지 않고, 다양한 DB 와 플랫폼에 쉽게 적용가능코드 예시 : 어댑터가 적용되지 않음public class S..
프록시 패턴(Proxy Pattern)대리자, 대변인누군가를 대신해 그 역할을 수행프록시 적용전public class ClientWithNoProxy { public static void main(String[] args) { // 프록시를 이용하지 않은 호출 Service service = new Service(); System.out.println(service.runSomething()); } }public class Service { public String runSomething() { return "서비스 짱!!!"; } }Service 객체의 runSomething() 메서드 직접 호출프록시 적용 후public class Service implements IService { public St..
데코레이터 패턴객체에 동적으로 새로운 책임(장식) 을 추가하는 디자인 패턴코드의 유연성 부여가능원본 객체에 여러 가지 장식을 덧입힐 수 있음.프록시 패턴과 차이프록시목적제어의 흐름 변경별도의 로직 처리클라이언트가 받는 반환값을 특별한 경우가 아니면 변경 X데코레이터클라이언트가 받는 반환값에 장식을 더함클래스 다이어그램과 시퀀스 다이어그램프록시와 데코레이터는 클래스 다이어그램 , 시퀀스 다이어그램에서 유사한 구조를 가질 수 있음.하지만, 프록시원래의 반환값 전달데코레이터반환값 자체에 변화라는 점이 다르다.코드public interface IService { public abstract String runSomething(); }public class Service implements IService { @..
정의서브클래스는 언제나 자신의 기반타입 즉, 슈퍼클래스로 교체될 수 있어야한다.잘못된 예시 : 아버지와 딸아버지를 슈퍼 클래스를 두고 서브 클래스로 딸을 두는 경우분류도가 아니라, 계층도 혹은 조직도에 가깝다.아버지 춘향이 = new 딸()아버지가 할 수 있는 일을 딸이 무조건 수행할 수 있는 것이 아니다.올바른 상속 : 동물과 펭귄동물 뽀로로 = new 펭귄()리스코프 치환 원칙을 잘 지키는 예시펭귄은 동물의 하위분류동물이 할 수 있는 모든 행위를 펭귄도 할 수 있음.인터페이스의 중요성명칭과 그 존재로서 → 리스코프 치환 원칙을 지키는데 도움을 줌AutoCloseable → 자동으로 닫을 수 있음Appendable → 덧붙일 수 있음등으로, 어떤 클래스가 특정 인터페이스를 구현할 때, 그 인터페이스가 ..
인터페이스 분리 원칙 (interface Segregation Principle)정의클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안된다하나의 인터페이스가 너무 많은 기능을 가지게 되면, 그 기능을 모두 사용하지 않는 클라이언트가 있는 경우 불필요한 의존성이 생김.ISP와 단일 책임 원칙(SRP)ISP(인터페이스 분리 원칙) 와 SRP(단일 책임 원칙) 은 둘다 클래스 or 객체가 가져야할 책임과 역할을 구분하는 데 중점을 둠.SRP하나의 클래스가 하나의 책임만!ISP인터페이스를 통해 여러 책임을 분리예제남자 클래스 가 남자친구, 아들 , 사원, 소대원 등의 역할을 가진다고 가정다양한 책임을 가지는 것은 단일 책임 원칙에 어긋남.단일 책임 원칙 적용남자 클래스를 여러 개의 클래스로 분화한다.각 클래..
의존 역전 원칙 (Dependency Inversion Principle)정의고차원의 모듈이 저찬원의 모듈에 직접 의존하는 것을 피해야함주요 내용의존 역전 원칙의 주장고차원 모듈은 저차원의 모듈에 의존X추상화된 것은 구체적인 것에 의존 X구체적인 것이 추상화된 것에 의존이 두 모듈은 모두 다른 추상화된 것에 의존예시자동차가 구체적인 스노우 타이어에 의존하는 관계스노우 타이어는 계절에 따라 일반 타이어로 교체될 수 있음자동차는 자주 바뀔 가능성이 있는 스노우 타이어에 의존하는 문제점자동차가 구체적인 타이어들 ( 스노우, 일반, 광폭 ) 에 직접 의존하는 대신 추상화된 타이어 인터페이스에만 의존의존 역전 원칙의 장점 및 특징변화의 영향 최소화추상화된 인터페이스나 슈퍼 클래스를 통해 변화가 잦은 구체적인 요소..