본문 바로가기

공부16

Singleton Pattern (싱글톤 패턴) Singleton Pattern (싱글톤 패턴) Singleton Pattern은 유일하게 하나의 인스턴스만 존재하도록 보장하며, 생성된 인스턴스는 전역변수를 참조하는 것 처럼 어디서든 참조할 수 있다. Implementations Coin 인스턴스는 private static으로 선언하고, 외부에서는 getInstance()를 통해서만 사용할 수 있도록 한다. public class Coin { private static final int ADD_MORE_COIN = 10; private int coin; private static Coin instance = new Coin(); // eagerly loads the singleton private Coin() { // private to preven.. 2023. 2. 3.
디자인 패턴 개발자5의 이야기 약 15년간 개발자로 있으면서 개발자에게 중요하다고 생각하는 몇 가지 중 하나를 꼽으라면 바로 이다. 사실 나는 기억력이 매우 나쁜 편이라 아직도 패턴 이름을 다 매칭 시키지 못한다. 어떤 구현에 들어갈 때 ㅇㅇ패턴을 사용하면 좋을 것 같군, 혹은 코드를 보고 ㅇㅇ패턴을 사용했군. 이라고 말하지 못하지만, 중요한 것은 상황에 맞는 적절한 패턴을 찾아 구현할 수 있으면 된다고 생각한다. 우리가 구현하는 많은 코드들은 엄청나게 패턴을 사용하고 있지만 실제로 패턴을 사용하는지 조차 인지하지 못하고 사용하는 경우가 많다. 사실 인지할 필요가 없이 개발하다보면 그냥 이렇게 구현해야겠다. 라고 떠오르는 경우가 대부분이므로 이부분이 문제라고 말하고 싶은 것은 아니다. 어쨋든, 디자인 패턴에 대해 한.. 2023. 2. 3.
Factory Method Pattern (팩토리 메소드 패턴) Factory Method Pattern (팩토리 메소드 패턴) 부모클래스에서는 객체 생성의 인터페이스만 제공하고, 구체적인 객체 생성은 자식 클래스에서 한다. 즉, 자식 클래스가 어떤 객체를 생성할 지 결정한다. 이를 이용하면 기존코드를 수정하지 않고(인터페이스 동일) 인스턴스를 생성하는 부분을 확장시킬 수 있다. 팩토리 메소드 패턴은 "생성"에 사용된다는 점만 다를 뿐 궁극적으로는 템플릿 메소드 패턴과 동일하다. Structure Creator : 부모 클래스로 객체 생성 인터페이스를 제공한다. ConcreateCreator : Creator를 상속받는 구체 클래스로 실제 인스턴스 생성을 수행한다. Product : ConcreateCrator에 의해 생성되는 결과물이다. 확장성을 위해 Product.. 2023. 2. 2.
Abstract Factory Pattern (추상 팩토리 패턴) Abstract Factory Pattern (추상 팩토리 패턴) 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공하는 것이 목적이다. Example 엘레베이터에는 Motor와 Door 부품이 들어간다. Samsung 엘레베이터에는 Samsung Motor와 Door, LG 엘레베이터에는 LG Motor와 Door, A사 엘레베이터는 Motor와 Door를 직접 만들지 않아 Samsung Motor와 LG Door를 사용한다고 하자. 이해하기 쉽도록 아래 UML과 매칭시켜 보자. Product는 부품이다. 즉, Motor와 Door이다. AbstractProductA : Motor ProductA1 : Samsung Motor ProductA2 : LG Motor Abstrac.. 2023. 2. 2.
Factory Pattern (팩토리 패턴) Factory Pattern (팩토리 패턴) 서로 관련성이 있거나 책임이 같은 클래스들을 "생성"해주는 클래스를 객체 생성관정 중간에 두어 복잡도를 줄이는 방법이다. 즉, 비슷한 객체를 공장(factory)에서 찍어내듯이 생성해주는 역할을 하는 클래스를 따로 두는 것을 말한다. 이러한 역할을 하는 클래스의 클래스명 자체에 명시적으로 Factory를 붙여주기도 한다. Example 아래는 image type에 따르는 Reader를 생성하는 JAVA 예제이다. public class ImageReaderFactory { public static ImageReader createImageReader(ImageInputStreamProcessor iisp) { if (iisp.isGIF()) { return n.. 2023. 2. 2.