목록Programing & Coding (86)
S E P H ' S
인터프리터(Interpreter) 패턴 인터프리터 패턴이란? 프로그램을 작성할 때 프로그램의 모든 행위를 정의하지 못하는 경우도 있다. 예를 들어서 브라우저를 만들때, 사이트 디자이너가 웹 페이지를 어떻게 행동하게 하고 싶어할지에 대해서 모두 예측하는 것은 불가능하다. 그럴때 JavaScript와 같은 인터프리터 언어를 통해서 브라우저에 브라우저 프로그래머가 구현하지 않은 행위를 추가할 수 있도록 한다. 인터프리터 패턴은 이러한 용도에 사용되는 인터프리터를 작성할 수 있도록 해준다. 먼저 언어의 문법을 기술하는 규칙들에 대한 형식 문법을 정의한다. 그리고 각 규칙들을 클래스를 통해 구현한다. 이 클래스들은 Context 객체를 공유하며, Context 객체를 통해 입력을 받고 변수 값을 저장하는 등의 작..
커맨드(Command) 패턴 커맨드 패턴이란? 실행된 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴이다. A 객체에서 B 객체의 메소드를 실행하려면 B를 참조하고 있어야 하는 의존성이 발생하는데 커맨드 패턴을 통해 의존성을 제거할 수 있다. 언제 사용할까? 하나의 객체를 통해 여러 객체들에게 명령해야할 때 사용된다. 여러 커맨드를 조합하여 하나의 커맨드처럼 사용할 필요가 있을 때 유용 이벤트가 발생했을 때, 실행될 기능이 다양하면서도 변경이 필요한 경우에 사용된다. 커맨드 발생 시점을 사용자가 커스터마이징 해야할 때 사용된다. 커맨드 실행 취소, 재실행 등의 기능을 구현해야 할 때 구조 Command : 실행될 기능에 대한 인터페이스. 실행될 기능을 ex..
데코레이터(Decorator) 패턴 데코레이터 패턴이란? 데코레이터 패턴은 상속(Inheritance)과 합성(Composition)을 사용하여 객체에 동적으로 책임을 추가할 수 있게 한다. 이 방법은 서브 클래스를 생성하는 것보다 유연한 방법을 제공한다. 쉽게 말해 데코레이터라는 말처럼 장식을 추가해 나간다고 생각하면 된다. 기본 기능을 가지고 있는 클래스를 하나 만들고 추가 기능들을 추가하기 쉽도록 하는 방식이다. 언제 사용할까? 클래스의 요소들을 계속하여 수정하면서 사용하는 구조가 필요한 경우 여러 요소들을 조합해서 사용하는 클래스 구조인 경우 예를 들어 커피를 제조한다고 한다면 종류마다 다양한 재료의 구성으로 하나의 커피가 완성된다. 이 재료들을 모두 클래스로 구현한다면 굉장히 많은 클래스를 구현..
Doubly LinkedList 실제 자바에서 제공하는 util 패키지의 LinkedList는 이번에 구현할 Doubly LinkedList와 같은 형식으로 구현되어 있다. 단일 연결리스트와 차이점은 단일 연결리스트는 노드에 데이터, 다음 노드를 가리킬 변수만을 갖고 있었다면 이중 연결리스트는 이전 노드를 가리키는 변수도 갖고 있다. 전체적인 구조는 다음과 같다. 양방향 연결리스트는 단방향 연결리스트보다 검색(색인)능력이 좋아진다. 단방향 연결리스트에서는 head부터 탐색했어야 했다. 하지만 양방향 연결리스트에서는 찾으려는 값이 만약 tail에 더 가깝다면 tail부터 탐색하면 되고 head에 더 가깝다면 head부터 탐색하면 되므로 보다 더 효율적인 탐색이 가능하다. Node 구현 public clas..