전체 글 180

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

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

DESIGN PATTERN 2022.04.14

[디자인패턴] 인터프리터패턴(Interpreter Pattern) 이란?

😀인터프리터 패턴 - 행동패턴으로, 특정 표현이나 언어로 바꿔주는 표현 인터페이스를 사용하는 패턴. - 문법 규칙을 클래스화 한 구조로, 일련의 규칙으로 정의된 문법적 언어를 해석하는 패턴. - sql과 같은 계층적 언어를 해석하기 위해 계층구조를 표현할 수 있음. 😀코드로 알아보기!! Expression.java package study.InterpreterPattern.code0; public interface Expression { boolean interprete(String context); } MinusExpression.java package study.InterpreterPattern.code0; public class MinusExpression implements Expression{ ..

카테고리 없음 2022.04.13

[디자인패턴] 추상 팩토리 패턴 (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

[노개북] "실용주의프로그래머" 챌린지 16일차

노개북" 노마드 개발자 북클럽 16일차!! #코딩 #개발자 #노마드북클럽 #노개북 #노마드챌린지 #실용주의프로그래머 #3주스케쥴 3 주차 수, 목 | Assignment #16 📚 복습 ✔️ 미션 Mission(4) Final Mission 더 좋은 코드를 쓰고, 더 좋은 방식을 택하고, 더 좋은 서비스를 만들고 싶은가요? 우리는 무언가를 더 잘하기 위해서는, 더 나아지기 위해서는 의식적으로 더 잘하려고 해야합니다. 어떻게 더 잘할지 생각하고, 실천해야 합니다. 실용주의 프로그래머의 교훈이, 여러분의 실력을 의식적으로 성장시키는 좋은 재료가 되기를 바랍니다. 최종 미션으로는 책을 읽으며 뼈맞았던 팁 중 10가지 원칙을 고르고, 이를 정리하시면 됩니다!