개발/디자인패턴 24

[Java][디자인 패턴] 14. 반복자 패턴 (Iterator Pattern)

디자인패턴 [Java][디자인 패턴] 14. 반복자 패턴 (Iterator Pattern) 반복자 패턴은 내부 구조를 노출하지 않고 집합체를 통해 원소 객체에 순차적으로 접근할 수 있는 방법을 제공한다. 반복자 패턴이란? 반복자 패턴은 순한 알고리즘이 실제 구현된 객체에 의존하지 않고, 독립적인 동작을 유지하기 위해 객체의 내부 메서드에 직접 접근하지 않는다. 대신 반복자의 메서드를 호출하여 처리한다. 반복자 패턴 구조 Iterator 집합체의 요소들을 순서대로 검색하기 위한 인터페이스 ConcreateIterator Iterator 인터페이스 구현 Aggregate 여러 요소들로 이루어져 있는 집합체 ConcreateAggregate Aggreagate 인터페이스를 구현하는 클래스 반복자 패턴 예시 코..

[Java][디자인 패턴] 13. 프록시 패턴 (Proxy Pattern)

디자인패턴 [Java][디자인 패턴] 13. 프록시 패턴 (Proxy Pattern) 객체 접근을 제어하기 위해 중간 단계에 대리자를 위치시키는 패턴이다. 프록시 패턴이란? 프록시는 실제 객체를 호출하면 행위를 중간에 가로채서 다른 동작을 수행하는 객체로 변경한다. 객체를 정교하게 제어해야 하거나 객체 참조가 필요한 경우 프록시 패턴을 사용한다. 프록시 패턴의 적용 사례는 매우 다양하고 다른 패턴과 결합하여 사용되는 경우도 많다 프록시 패턴의 특징은 투명성을 이용해 객체를 분리하여 재위임한다는 것이다. 분리된 객체를 위임함으로써 대리 작업을 중간 단계에 삽입할 수도 있으며 분리된 객체를 동적으로 연결함으로써 객체의 실행 시점을 관리할 수도 있다. 프록시 패턴은 세밀한 객체의 접근이 필요할 때도 매우 유용..

[Java][디자인 패턴] 12. 플라이웨이트 패턴 (Flyweight Patten)

디자인패턴 [Java][디자인 패턴] 12. 플라이웨이트 패턴 (Flyweight Pattern) 플라이웨이트 패턴은 객체를 공유하여 객체를 재사용해서 시스템을 절약할 수 있는 디자인 패턴이다. fly(가볍다) + weight (무게) = 중복되는 코드의 객체를 공유해서 메모리를 적게 할당해서 무게가 가벼움 플라이웨이트 패턴이란? 플라이웨이트 패턴은 객체의 할당을 적게 하기 위한 패턴이며, 한 번 할당한 자원을 재사용함으로써 메모리를 관리한다. 플라이웨이트 패턴은 중복을 제거하고 공유를 통해 자원을 효율적으로 사용한다. 플라이웨이트 패턴은 보다 효율적인 공유 객체를 관리하기 위해 별도 저장소를 갖고 있는데 이를 공유 저장소라고 한다. 플라이웨이트 패턴은 팩토리 클래스에 공유 저장소를 추가하여 객체의 중복..

[Java][디자인 패턴] 11. 파사드 패턴 (Facade Pattern)

디자인패턴 [Java][디자인 패턴] 11. 파사드 패턴 (Facade Pattern) 파사드는 요즘과 같이 협업과 대형 시스템을 개발하고 배포하는 데 자주 응용되는 패턴이다. (API 등) 파사드 패턴은 강력한 결합 구조를 해결하기 위해 코드의 의존성을 줄이고 느슨한 결합으로 구조를 변경한다. 파사드 패턴이란? 파사드 패턴이란 서브 시스템을 보다 쉽게 쓸 수 있도록 높은 수준의 인터페이스를 정의하는 작업으로, 이미 수많은 API 서비스와 라이브러리, 패키지에서 파사드 패턴 응용 중이다. 파사드 패턴은 강력한 결합 구조를 해결하기 위해 코드의 의존성을 줄이고 느슨한 결합으로 구조를 변경한다. 파사드 패턴은 메인 시스템과 서브 시스템 중간에 위치하는데, 새로운 인터페이스 계층을 추가하며 시스템 간 의존성을..

[Java][디자인 패턴] 10. 장식자 패턴 (Decorator Pattern)

디자인패턴 [Java][디자인 패턴] 10. 장식자 패턴 (Decorator Pattern) 장식자 패턴은 객체의 동적 기능을 추가하기 위해 구조를 개선하는 패턴이다. 다양한 확장을 위해 객체를 조합한다. 장식자 패턴이란? 장식자 패턴은 동적으로 객체를 결합하기 위해 객체지향의 구성을 통해 확장한다. (코드를 변경하지 않고 확장 가능) 실시간 동작으로 자신의 객체를 확장하면서, 필요로 하는 다양한 책임을 수행하고 문제를 해결해 나간다. 장식자의 기본 배경이 되는 개념은 복합 객체와 위임이다. 상속을 배제하고 구성을 통해 객체를 동적으로 확장한다. 장식자 패턴은 언제 사용할까? 만약 뼈대는 동일하지만 특정 기능들을 확장하거나 삭제하거나 일부만 변경하는 등 객체를 다양하게 확장하려면 어떻게 해야 할까? 이럴..

[Java][디자인 패턴] 9. 복합체 패턴 (Composite Pattern)

디자인패턴 [Java][디자인 패턴] 9. 복합체 패턴 (Composite Pattern) 복합체 패턴은 객체 간의 계층적 구조화를 통해 객체를 확장하는 패턴이다. 복합체는 재귀적으로 결합된 계층화된 트리 구조의 객체이다. 복합 객체란? 복합 객체는 객체가 또 다른 객체를 포함하는 것 복합적인 객체 관계를 복합화 또는 집단화라고 한다. 강력한 결합 구조를 가진 상속과 달리 느슨한 결합을 가지고 있으며, 의존체 주입 방식을 사용한다. 복합체 패턴이란? 복합채 패턴은 분할 디자인 패턴의 하나이다. 복합체 패턴을 이용하면 객체의 상위, 하위 체계를 파악할 수 있고 일대일, 다대일을 처리하는 데도 매우 유용하다. 하나의 객체를 호출하면 서브로 갖고 있는 자식의 객체 메서드를 호출할 수도 있다. 복합체 패턴은 언..

[Java][디자인 패턴] 8. 브리지 패턴 (Bridge Pattern)

디자인패턴 [Java][디자인 패턴] 8. 브리지 패턴 브리지 패턴은 객체의 확장성을 향상하기 위한 패턴으로, 객체에서 동작을 처리하는 구현부와 확장을 위한 추상부를 분리한다. 브리지 패턴이란? 브리지 패턴은 기능을 처리하는 클래스와 구현을 담당하는 추상 클래스로 구별한다. 구현뿐 아니라 추상화도 독립적 변경이 필요할 때 브리지 패턴을 사용한다. 2개의 객체는 추상화를 구현에서 분리하여 매우 독립적으로 사용할 수 있어야 한다. 브리지 패턴은 기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가할 때 사용하면 유용하다. 브리지 패턴은 새로운 인터페이스를 정의하여 기존 프로그램의 변경 없이 기능을 확장할 수 있다. 브리지 패턴은 언제 사용하면 좋을까? 부모 추상 클래스가 기본 규칙 세트를 정의하고 구체적인..

[Java][디자인 패턴] 7. 어댑터 패턴 (Adapter Pattern)

디자인패턴 [Java][디자인 패턴] 7. 어댑터 패턴 (Adapter Pattern) 어댑터 패턴이란 코드를 재사용하기 위해 구조를 변경하는 패턴이다. 어댑터 패턴이란? 어댑터 패턴은 기존 코드를 재사용하기 위해 내적, 외적 구조를 변환하는 작업을 처리한다. 어댑터 패턴은 코드를 재사용하기 위한 인터페이스를 처리하고 인터페이스를 활용해 보정 코드를 사용한다. 어댑터 패턴은 기능상 문제없이 동작하는 코드가 단지 인터페이스 차이 때문에 사용할 수 없는 경우 많이 응용되는 패턴이다. 또 기존 코드에 오류가 있거나 보정 작업이 필요한 경우에도 유용하다. 어댑터 패턴은 오래된 레거시 코드나 라이브러리를 재사용할 때 유용한 패턴이다. 또한 어댑터 패턴은 서로 호환되지 않는 인터페이스를 가진 코드를 결함 하여 응용..

[Java][디자인 패턴] 6. 프로토타입 패턴 (Prototype Pattern)

디자인패턴 [Java][디자인 패턴] 6. 프로토타입 패턴 (Prototype Pattern) 프로토타입 패턴은 new 키워드를 사용하지 않고 객체를 복제해 생성하는 패턴이다. 프로토타입 패턴이란? new 키워드를 통해 객체를 생성하는데 비용이 많이 든다면 프로토타입 패턴을 통해 객체를 복제하는 것도 방법이 될 수 있다. 객체를 복제하면 인스턴스화 과정이 생략되어 생성 로직에 소모되는 처리 비용과 자원을 절약할 수 있다. 프로토타입 패턴 구조 한 개발자를 생성해서 스킬을 업데이트하고 개발 언어와 연차를 업그레이드할 수 있는 메서드가 있다고 해보자. 우선 생성자에서는 개발자의 이름과 연차(1년 차)를 초기화하고, Languege, Skill은 빈 HashMap으로 초기화되어있다. 이 상황에서 차곡차곡 up..

[Java][디자인 패턴] 5. 빌더 패턴 (Builder Pattern)

디자인패턴 [Java][디자인 패턴] 5. 빌더 패턴 (Builder Pattern) 빌더 패턴은 추상 팩토리를 확장하여 크고 복잡한 객체를 생성할 수 있다. 빌더 패턴이란? 빌더 패턴은 복잡한 구조를 가진 복합 객체의 생성 과정을 분리하여 처리하는 패턴이다. 복합 객체의 생성 과정을 단계별로 분리함으로써 복합 객체의 생성을 일반화할 수 있다. 추상 클래스인 Builder는 추상 메서드 build()를 선언한다. build()는 복합 객체를 생성하는 로직을 하위 클래스에 위임한다. 빌더 패턴 구조 빌더 패턴을 사용하여 만든 각자의 환경에 맞는 Office를 구성하는 예시 코드이다. (예시 코드를 조금 대충 만든 것 같기도 한데 그냥 빌더 패턴 구조를 파악하는데 의의를 두자) 빌더 패턴 코드 1.Build..