2022/04 34

반복자(Iterator) 패턴이란?

1. 반복자 패턴이란? 의도 내부 표현부를 노출하지 않고 어떤 집합 객체에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공 집합 객체를 순회하는 클라이언트 코드를 변경하지 않고 다양한 순회 방법을 제공할 수 있다. 사용 시기 객체 내부 표현 방식을 모르고도 집합 객체의 각 원소들에 접근하고 싶을 때 집합 객체를 순회하는 다양한 방법을 지원하고 싶을 때 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 순회하고 싶을 때 구조 Iterator : 원소를 접근하고 순회하는 데 필요한 인터페이스를 제공 ConcreteIterator : Iterator에 정의된 인터페이스를 구현하는 클래스 Aggregate : Iterator 객체를 생성하는 인터페이스를 정의 ConcreteAggregate : 해당하는..

[Java] Comparable, Comparator, 정렬 방법

필자는 무언가 정렬을 잘 못하는것을 최근 깨달았다. 그래서 이번에는 자바에서 정렬을 하는 방법을 학습하려고 한다. 이게 이런게 참 기초이지만 모르는다는것에 부끄러움을 사알짝 느끼면서 오늘도 시자악~ 1. Comparable oracle에서 Comparable에 대한 설명을 가져왔다. 이 인터페이스는 그것을 구현하는 각 클래스의 객체에 total ordering을 수행한다. 이 ordering은 클래스의 natural ordering으로 여기지고, 클래스의 compareTo 메소드는 natural 비교 메소드로 여겨진다. 이 인터페이스를 구현하는 객체의 리스트는 자동적으로 Collections.sort(그리고 Arrays.sort)로 정렬될 수 있다. 이 인터페이스를 구현하는 객체는 정렬된 맵에서 키로 이..

해석자(Interpreter) 패턴이란?

1. 해석자(Interpreter) 패턴이란? 의도 어떤 언어에 대해, 그 언어의 문법에 대한 표현을 정의하면서 그것(표현)을 사용하여 해당 언어로 기술된 문장을 해석하는 해석자를 함께 정의 즉, 자주 등장하는 문제를 간단한 언어로 정의하고 재사용하는 패턴. 이를 이용하면 반복되는 문제 패턴을 언어 또는 문법으로 정의하고 확장할 수 있다. 사용 시기 해석이 필요한 언어가 존재하거나 추상 구문 트리로서 그 언어의 문장을 표현하고자 할 때. GoF의 설명에 따르면, 해석자 패턴이 잘 먹힐때는 정의할 언어의 문법이 간단할 때 이다. 구조 AbstrtactExpression : 추상 구문 트리에 속한 모든 노드에 해당하는 클래스들이 공통으로 가져야 할 Interpret() 연산을 추상 연산으로 정의 Termin..

커맨트(Command) 패턴이란?

1. 커맨트(Command) 패턴이란? 의도 요청 자체를 캡슐화하는 것. 이를 통해 요청이 서로 다른 사용자를 매개변수로 만들고, 요청을 대기시키거나 로딩하며, 되돌릴 수 있는 연상을 지원. 사용 시기 수행할 동작을 객체로 매개변수화하고자 할 때 서로 다른 시간에 요청을 명시하고, 저장하며, 실행하고 싶을 때 실행 취소 기능을 지원하고 싶을 때 시스템이 고장났을 때 재적용이 가능하도록 변경 과정에 대한 로깅을 지원하고 싶을 때 기본적인 연산의 조합으로 만든 상위 수준 연산을 써서 시스템을 구조화하고 싶을 때 구조 Command : 연산 수행에 필요한 인터페이스 선언 ConcreteCommand : Receiver객체와 액션 간의 연결성을 정의, 처리 객체에 정의된 연산을 호출하도록 Execute를 구현 ..

책임 연쇄(chain of responsibility) 패턴이란?

1. 책임 연쇄(chain of responsibility) 패턴이란? 의도 메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴. 하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 기회를 주려 한다. 즉, 요청을 보내는 쪽(sender)과 요청을 처리하는 쪽(receiver)의 분리하는 패턴이다. 사용 시기 하나 이상의 객체가 요청을 처리해야 하고, 그 요청 처리자 중 어떤 것이 선행자인지 모를 때, 처리자가 자동으로 확정되어야 한다. 메시지를 받을 객체를 명시하지 않을 채 여러 객체 중 하나에게 처리를 요청하고 싶을 때 요청을 처리할 수 있는 객체 집합이 동적으로 정의되어야 할 때 구조 Handler : 요청을 처리하는 인터페이스를 정의하고, 후속..

프록시(Proxy) 패턴이란?

1. 프록시 패턴이란? 의도 다른 객체에 대한 접근을 제어하기 위핸 대리자 또는 자리채움자 역할을 하는 객체를 다룬다. 즉, 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴이다 proxy를 통해 할 수 있는 일은 두가지로 구분할 수 있다. 접근제어 권한에 따른 접근 차단 캐싱 지연로딩 부가 기능 추가 원래 서버가 제공하는 기능에 더해 부가 기능 수행( 중간에서 변형! 혹은 로그 작동도 가능 ) 즉, 프록시 객체가 중간에 있으면 크게 접근 제어와 부가 기능 추가를 수행할 수 있다. 사용 시기 프록시 패턴은 단순한 포인터보다 조금 더 다방면에서 활용할 수 있거나 정교한 객체 참조자가 필요한 때 적용할 수 있다. 원격지 프록시 : 서로 다른 주소 공간에 존재하는 객체를 가리키는 대표 객체 가상..

퍼사드(FACADE) 패턴이란?

1. 퍼사드 패턴이란? 의도 한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴. 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의 즉, 복잡한 서브 시스템 의존성을 최소화하는 방법이다. 사실 이게 보면 뭔가... 굉장히 익숙하면서도 크게 어렵지도 않다. 많은 영상과 정보를 찾는 동안에도 모두가 별로 이야기할게 없다고 하긴 했다. 사용 시기 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때 추상 개념에 대한 구현 클래스와 사용자 사ㅏ이에 너무 많은 종속성이 존재할 때 서브시스템을 계층화 시킬 때 구조 Facade : 단순하고 일관된 통합 인터페이스를 제공. 서브시스템을 구성하는 어떤 클래스가 어떤 요청을 처리해야 하는지 알고 있으며, 사용자의 요청을 ..

데코레이터 패턴(Decorator Pattern)이란?

1. 데코레이터 패턴 의도 객체에 동적으로 새로운 책임을 추가할 수 있게 한다. 기능을 추가하려면, 서브클래스를 생성하는 것보다 용통성이 있다. 즉, 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴이다. 상속이 아닌 위임을 사용해서 보다 유연하게(런타임에) 부가 기능을 추가하는 것도 가능하다. 우리가 장식을 생각한다면 장식품을 달아주는 주체는 그 장식(데코레이터)만 추가될 뿐 주체는 여전히 동일하다. (예 : 크리스마스 트리에 장식품이 달려도 트리는 그대로임) 이것처럼 디자인 패턴에서도 이러한 느낌으로 데코레이터 패턴을 고안한게 아닌가 생각이 든다. (내 뇌피셜) 사용 시기 동적으로 또한 투명하게(transparent), 다시 말해 다른 객체에 영향을 주지 않고 개개의 객체에 새로운 책임을 추가하기..

Map 알아보기

저번에 List에 대해서 정리를 했는데 정리를 하지 않을 것이 Map이랑 Set이 있다. 이번에는 Map에 대해 알아보고자 한다. 1. Map이란? java.util에 존재하는 map interface는 키와 값사이의 매핑을 나타낸다. 맵 인터페이스는 컬렉션 인퍼테이스의 하위 항목이 아니다. 그러므로 컬렉션 타입의 나머지와 약간 다르게 작동한다. 맵은 유일한 키를 가진다. 출처 : https://www.geeksforgeeks.org/map-interface-java-examples/ Map은 사전처럼 key-value 연관 매핑같은 사용에 완벽하다. 맵은 키로 색인을 하는데 혹은 키로 값을 가져오거나 수정할 때 사용한다. 흔한 시나리오는다음과 같다. 에러 코드와 그 설명에 대한 맵 우편번호와 도시의 맵..

복합체(Composite) 패턴이란?

1. 복합체(Composite) 패턴이란? 의도 부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성한다. 사용자로 하여금 개별 객체와 복합 객체를 모두 동일하게 다룰 수 있도록 하는 패턴. 그룹 전체와 개별 객체를 동일하게 처리할 수 있다. 클라이언트 입장에서는 전체나 부분이나 모두 동일한 컴포넌트로 인식할 수 있는 계층구조를 만든다. 사용 시기 부분 - 전체의 객체 계통을 표현하고 싶을 때 사용자가 객체의 합성으로 생긴 복합 객체와 개개의 객체 사이의 차이를 알지 않고 자기 일을 할 수 있도록 만들고 싶을 때, 사용자는 복합 구조의 모든 객체를 똑같이 취급 구조 Component : 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의 Leaf : 가장 말단의 객체. 즉, 자식이 없는..