DESIGN PATTERN 12

[디자인패턴] 옵저버패턴(Observer Pattern) 이란? - 개발자 배찌

😀옵저버패턴 (observer pattern) 다수의 객체가 특정객체 상태변화를 감지하고 알림을 받는 패턴 😀옵저버 패턴의 장점 상태를 변경하는 객체와 변경을 감지하는 객체(observer)의 관계를 느슨하게 유지할 수 있다. 상태 변경을 주기적으로 조회하지 않고 자동으로 감지할 수 있다. 😀옵저버 패턴의 단점 복잡도가 증가한다. 다수의 observer객체를 등록 이후 해지하지 않으면, 메모리누수 발생할 수 있다. 😀코드로 알아보기! ChatServer.java package study.observerPattern.code1; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; p..

DESIGN PATTERN 2022.04.15

[디자인패턴] 템플릿 메소드 패턴(template Method Pattern) 이란? - 개발자 배찌

😀템플릿 메소드 패턴 - 특정 작업을 처리하는 일부분을 서브클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정단계에서 수행하는 내용을 바꾸는 패턴 - 객체지향 언어로 개발을 하다 보면 무의식적으로 사용하는 패턴. 😀템플릿 메소드 패턴 장점 - 중복코드를 줄일 수 있다. - 자식클래스의 역할을 줄여 핵심 로직의 관리가 용이하다. 😀템플릿 메소드 패턴 단점 - 추상메소드가 많아지면서 클래스 관리가 복잡해진다. - 클래스간의 관계와 코드가 꼬일 염려가 있다. 😀코드로 알아보기!! Teacher.java package study.templateMethodPattern.code0; import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class Teacher ..

DESIGN PATTERN 2022.04.15

[디자인패턴] 싱글톤패턴(singleton Pattern) 이란? (+static) - 개발자 배찌

😀싱글톤 패턴 전역변수를 사용하지 않고, 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴. 객체의 인스턴스가 오직 1개만 생성되는 패턴. 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static), 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴. 😀싱글톤 패턴 장점 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있음. 두번째 이용시 부터는 객체 로딩시간이 현저하게 줄어 성능이 좋아진다. 😀싱글톤 패턴 단점 멀티스레딩 환경에서 동시성문제가 발생할 수 있다. 동시성 문제를 해결하기 위해 syncronized 키워드를 사용해야 한다. 테스트하기 어렵다. 싱글톤 인스턴스는 자원을 공유하기때문에..

DESIGN PATTERN 2022.04.14

[디자인패턴] 추상 팩토리 패턴 (abstract Factory Pattern) 이란? - 개발자 배찌

😀추상 팩토리 패턴 팩토리 메서드 패턴과 비슷해보이지만, 명확한 차이점이 있다. - 팩토리 메서드 패턴 : 조건에 따른 객체 생성을 팩토리클래스로 위임하여, 팩토리 클래스에서 객체를 생성하는 패턴. - 추상 팩토리 패턴 : 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이를 팩토리조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 😀코드로 알아보기 ComputerFactory.java package study.abstractFactoryPattern.code0; public interface ComputerFactory { void createKeyboard(); void createMouse(); } LgComputer.java package study.abstrac..

DESIGN PATTERN 2022.04.13

[디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern) 이란? - 개발자 배찌

😀 팩토리 메서드 패턴? 객체를 생성하는 인터페이스는 미리 정의하되, 객체 생성은 팩토리(서브 클래스)로 위임하는 패턴. 😀 팩토리 메서드 패턴을 사용하는 이유? 객체 생성하는 코드를 분리하여 클라이언트 코드와 결합도를 낮추어 코드를 건드리는 횟수를 최소화 😀 팩토리 메서드 패턴 주의점 Factory Method가 중첩되기 시작하면 굉장히 복잡해 질 수 있다. 또한 상속을 사용하지만 부모클래스를 전혀 확장하지 않는다. 따라서, 이 패턴은 extends관계를 잘못 이용한 것으로 볼 수 있다. extends 관계를 남발하게 되면 프로그램의 엔트로피가 높아질 수 있으므로 Factory Method 패턴의 사용을 주의해야한다. 😀 코드로 알아보자!! Drink.java package study.factoryMe..

DESIGN PATTERN 2022.04.12

[디자인패턴] 전략패턴 (strategy Pattern)이란? - 개발자 배찌

😀전략패턴이란? 객체의 행위를 동적으로 바꾸고 싶은 경우, 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말한다. 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴. 메서드내의 기능구현을 수정하고 싶을 때, 직접 그 코드에 찾아가 수정하게 된다면, 그 메서드를 사용하는 다른 코드들에게 영향을 끼치게 된다. 이는 SOLID의 원칙 중, OCP(Open-Closed Principle)에 위배됨!! 이러한 문제점을 해결하기 위한 패턴이 "전략패턴"이다. 😀코드로 알아보기!! Moving.java package study.strategyPattern.code0; publi..

DESIGN PATTERN 2022.04.12

[디자인패턴] 어댑터 패턴(Adapter Pattern)이란? - 개발자 배찌

😀어댑터 패턴이란? 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 즉, 어댑터 패턴은 '돼지코 콘센트'처럼 기존 클래스를 재사용 할 수 있도록 중간에서 맞춰주는 역할을 한다. Client는 Target인터페이스를 사용하여 메서드를 호출한다. Adapter에서는 Adaptee 인터페이스를 사용하여 ConcreteMethod 호출로 변경한다. 이때 client는 중간에 Adapter가 존재한다는 것을 인식하지 못한다. 😀코드로 알아봅시다! 110V 헤어드라이기와 220V 에어컨이 있다. 220V에어컨을 틀기 위해 어댑터를 사용 하여 110V에 끼워맞추기 Electronic..

DESIGN PATTERN 2022.04.11

[디자인패턴] 책임 연쇄 패턴 (Chai- of-responsibility Pattern) - 개발자 배찌

😀책임 연쇄 패턴이란? - 클라이언트에게 어떤 요청이 들어왔을 때, 요청받은 객체가 해당요청을 해결할 수 없을 경우 연결된 다음 객체들에게 전달하여 해당 요청을 해결할 수 있는 객체가 처리하는 방식 즉, 요청을 처리할 수 있는 객체가 여러개이고, 처리객체가 특정적이지 않을 경우 권장되는 패턴 😀장점 - 요청의 발신자와 수신자를 분리시킬 수 있다. - 결합도를 낮춰준다. - 클라이언트는 처리객체의 집합 내부 구조를 알 필요가 없다는것을 충족함. 😀단점 - 충분한 디버깅을 거치지 않을 경우, 집합 내부에서 사이클이 발생할 수 있음. 😀코드로 알아봅시다!! 요청 : 거스름돈을 남겨주는 로직. 100원, 10원, 1원단위로만 남겨줄 수 있음. DispenseChain.java package study.chain..

DESIGN PATTERN 2022.04.11

[디자인패턴] 브릿지패턴(Bridge Pattern) 이란? - 개발자 배찌

브릿지패턴이란? Bridge(=다리).. 서로 떨어져 있는 두 장소를 이어주는 역할 이것이 Bridge 패턴의 핵심!! 구현과 기능에 대해 두개의 별도 클래스로 구현한다. 😊코드로 알아봅시다! Noodle -> 추상클래스 Ramen -> Noodle 을 상속받는 클래스 Pasta -> Noodle 을 상속받는 클래스 (밑에 코드에 구현하진 않았음) ....등등 구현객체들..이 있겠죠.. NoodleTypeHandler -> 인터페이스 NoodleTypeIsRamen -> 라면 기능 구현클래스 NoodleTypeisPasta -> 파스타 기능 구현클래스 (코드에 구현하진 않았음) .....등등 기능객체들....이 있겠죠 Noodle.java package study.BridgePattern.code1; i..

DESIGN PATTERN 2022.04.07

[디자인패턴] 프록시패턴(proxy Pattern)과 데코레이터패턴(decorator Pattern) - 개발자 배찌

프록시패턴(proxy pattern) 과 데코레이터패턴(decorator pattern) 😊공통점 둘 다 프록시를 이용한다는 점! 😊프록시란? '대리' 라는 의미로 프록시에게 어떤 일을 대신 시키는 것 😊프록시의 기능? • 접근제어 (권한에 따른 접근 차단, 캐싱, 지연로딩) => 프록시패턴 이용 • 부가기능추가 (원래 서버가 제공하는 기능에 더해서 부가기능을 수행) =>데코레이터패턴 이용 ex) 요청값이나 응답값을 중간에 변형한다. ex) 실행시간을 측정해서 추가 로그를 남긴다. 1. 프록시패턴 😀코드로 알아보기!! Subject.java public interface Subject { void run(); } RealSubject.java @Slf4j public class RealSubject im..

DESIGN PATTERN 2022.04.07