본문 바로가기

디자인 패턴7

[디자인 패턴] 싱글톤(Singleton) 패턴 싱글톤(Singleton)이란? 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. by 위키피디아 핵심은 객체의 인스턴스를 한 개만 생성되도록 만드는 패턴입니다 싱글톤 패턴을 사용하면 총 3가지 측점에서 이점을 얻을 수 있습니다. 1. 메모리 측면 싱글톤 패턴을 사용하게 된다면 한 개의 인스턴스 만을 고정 메모리 영역에 생성하고 추후 해당 객체를.. 2023. 2. 8.
[디자인 패턴] 프록시 (Proxy) 패턴 공부 배경 android context를 공부하며 context, contextImpl, contextWrapper가 프록시패턴으로 이뤄져있다는 것을 확인할 수 있었습니다. 왜 프록시를 사용하여 아래 그림과 같이 구현된 것인지 공부해보려고 합니다. 프록시 패턴이란? 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미입니다. 일종의 비서라고 생각하면 됩니다. 연예인에게 먼저 접촉하기 전에 매니저과 일정조율을 하듯 먼저 구현체가 아닌 프록시에게 먼저 물어보는 개념입니다. 이렇게 어떤 객체를 사용하고자 할 때, 객체를 직접 참조하는 것이 아니라, 해당 객체를 대행하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고 또한.. 2023. 2. 4.
데커레이터 (Decorator Pattern) 패턴 데커레이터 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많을 경우에 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능을 설계하는 방식입니다. 예를 들어 요리하는 기구의 기능이 삶다, 튀기다, 굽다, 찌다라는 4개의 기능이 있을 경우 총 15가지의 조합이 가능해집니다. 이 조합을 모두 하나의 객체를 상속받게 되면 15개의 객체가 되어 너무 많은 객체가 만들어집니다. 따라서 이런 부분들을 조합에 따라 객체를 만드는 것이 아닌 Decorator 객체로 각 기능을 만들어 조합하는 방식으로 가는 것이 더 효율적입니다. // Cut, Steam, Fry, Grill abstract class Cook { public abstract void show(.. 2022. 8. 8.
커맨드 패턴 (Command Pattern) 커맨드 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다. 버튼을 눌러 램프를 킨다는 상황을 가정으로 코드를 구현해보면 Button Class가 Lamp를 주입받아 버튼을 눌렀을 떄 lamp의 turnOn 함수가 실행되는 것을 확인할 수 있습니다. public class Lamp { public void turnOn() { System.out.println("Lamp On"); } } public class Button { private Lamp theLamp; public Button(Lamp theLamp) { this.theLamp = theLamp; } public void pressed() { th.. 2022. 7. 27.
객체지향 원리 추상화 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업 // 각 자동차마다 case를 나누는 것보다 switch(자동차 종류) { case 아우디: case 벤츠: case BWM: } // 추상화를 통해 공통된 부분인 car이라는 클래스로 처리할 수 있다 void changeEngineOil(Car c) { c.changeEngineOil(); } 응집도와 결합도 응집도: 클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타냄 결합도: 어떤 기능을 실행하는 데 다른 클래스나 모듈들에 얼마나 의존적인지를 나타냄 -> 높은 응집도와 낮은 결합도를 유지할 수 있도록 설계해야 요구사항을 변경할 때 유연하게 대처할 수 있다 캡슐화 낮은 결합도를 유지할 수 있도록 해주는 객체지향 설계 원리.. 2022. 6. 24.
객체지향 모델링 모델링 (Modeling) 서로의 해석을 공유해 합의를 이루거나 해석의 타당성을 검토 현재 시스템 또는 앞으로 개발할 시스템의 원하는 모습을 가시화 시스템의 구조와 행위를 명세할 수 있으며 시스템을 구축하는 틀을 제공 모델은 추상화 (abstraction)에 바탕을 두고 만들어져야 함 추상화는 대상을 표현할 때 특정 관점에서 관련이 있는 점은 부각시키고 관련이 없는 면은 무시하는 것이 필요 ex) 대학교 학사 지원 업무 - 학생의 머리색은 관련이 없지만 학번이나 수강 과목 등은 매우 중요한 요소 UML (Unified Modeling Language): 시스템을 모델로 표현해주는 언어 시스템 개발 과정에서 개발자 사이의 의사 소통이 원할하게 이루어지도록 표준화한 통합 모델링 언어 시스템의 구조와 동작을 .. 2022. 6. 20.
Singleton 패턴 활용! 싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴입니다. 위의 그림과 같이 보통 웹 애플리케이션은 여러 클라이언트로 부터 동시에 요청이 들어오곤 합니다. 예를 들어 배달을 주문 하는 경우 배달앱에서는 여러 유저가 동시에 배달을 주문하기 때문에 결제서비스가 새롭게 생성되면 메모리가 낭비가 심할 뿐더러 문제가 생길 수도 있습니다. 따라서 이러한 현상을 해결하기 위해 해당 객체를 딱 한개만 공유하도록 설계한 것이 싱글톤 패턴입니다. 위의 그림이 싱글톤 패턴을 적용하여 하나의 인스턴스만을 생성하고 전달하는 것입니다. 1. Eager Initialization public class SingletonPattern { // 1. static 영역에 객체를 1개만 생성합니다. priv.. 2021. 12. 24.