일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 전체
- 자바
- 자바 야구게임
- 25가지 효율적인 sql작성법
- full text indexing
- while
- 다운캐스팅
- Validations
- 전체텍스트
- 상속예제
- 로또
- 전자정부
- 스프링
- 업캐스팅
- 이클립스
- 야구게임
- IBatis procedure
- 단축키
- Login with OAuth Authentication
- 다형성
- 가변인자
- angular2
- Random
- jquery
- 페이징
- 상속
- Full text
- 형변환
- 추상클래스
- Today
- Total
목록JAVA/999. 디자인패턴 (13)
nalaolla
[개요] 아래의 코드는 Linear( 선형큐)가 아닌 Circle Queue( 순환큐)를 이용하여 생산자/소비자 패턴을 구현해 보았습니다. 생산자/소비자 패턴은 멀티쓰레드 환경에서 주로 쓰이는 패턴입니다. 생산자와 소비자는 하나의 클래스를 공유하고 그 클래스는 큐구조를 가지게 됩니다. 생산자는 데이터를 지속적으로 만들어 큐에 넣을 것이고 소비자는 데이터를 지속적으로 큐에서 빼낼 것입니다. [구조] [Main.java] package provider_consumer; public class Main { public static void main(String[] args) { int size = 100; Table table = new Table(100); Thread provider = new Thread..
컴포지트 패턴 (Composite Pattern) = 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층 구조로 표현하는 것. 클리이언트에서 개밸 객체와 다른 객체들로 구성된 복합 객체(Composite)를 똑같은 방법으로 다룰 수 있음. Component (Interface) : 복합 객체내에 들어있는 모든 객체들에 대한 인터페이스를 제공합니다. 복합노드, 리프노드에 대한 메소드를 정의함. Leaf : 그 안에 들어있는 원소에 대한 행동을 정의. Composite (=복합객체) : 자식이 있는 구성요소의 행동을 정의하고 자식 구성요소를 저장하는 역할을 맡음. Client : Component 인터페이스를 사용해 복합 객체 내의 객체들을 조작할 수 있음. Composite = Composite +..
반복자 패턴 (이터레이터 패턴, Iterator Pattern) : 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체안에 들어있는 모든 항목에 접근할 수 있게 해 주는 방법을 제공해 주는 패턴. 양치기와 염소치기 이야기 옛날에 양치기와 염소치기가 살았습니다. 아침이 되면 그들은 양과 염소가 밤에 도망갔는지 아니면 늑대의 습격을 받아 희생되었는지 확인하기 위해 숫자를 세었습니다. 양치기는 훌륭한 목동견의 도움을 받아 양들을 일렬로 쭉 세운다음 한마리 씩 세었습니다. 반면에 염소치기는 어릴 때 부터 염소들에게 이름을 지어주고 부르면 오도록 훈련을 시켰기 때문에 한 마리씩 이름을 불러서 숫자를 세었습니다. 어느날 양치기가 너무나 배가 아파서 이웃마을의 의사에게 진찰을 받으러 갔습니다. 무려 일주일 동안 시간..
퍼사드 패턴 (Facade Pattern) = 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다. * 퍼사드(Facade) 라는 것은 무엇일까요? 퍼사드란, 프랑스어 Façade 에서 유래된 단어로 건물의 외관이라는 뜻을 가지고 있습니다. 건물의 외벽에서 보면 안의 구조는 보이지 않습니다. 퍼사드 패턴은 많은 서브시스템(내부 구조)을 거대한 클래스(외벽)로 만들어 감싸서 편리한 인터페이스를 제공해 줍니다. 퍼사드패턴으로 전자레인지 만들기 우리는 전자레인지를 버튼만 클릭하면 동작 시킬 수 있습니다. 동작시킬 타이머만 설정하고 실행 버튼만 클릭하면 곧 따뜻한 음식을 먹을 수 있죠. 여기서 전자레인..
어뎁터 패턴 (Adapter Pattern) : 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 이 패턴을 사용하면 다른 인터페이스와의 호환성 문제를 해결할 수 있다. 여기서 말하는 어뎁터(Adapter)를 설명하자면.. 보통 직구를 해서 전자제품을 구매하거나, 해외여행을 갈 때 한국과는 다른 규격의 전기 플러그를 사용할 때가 있습니다. 그럴때 보통 '돼지코'라고 불리는 플러그 변환 어뎁터를 씁니다. 이 어뎁터가 특정 규격의 플러그를 다른 플러그와 호환이 가능하게 하듯이, 객체 지향 프로그래밍에서도 비슷하게 사용할 수 있습니다. A시스템사는 몇년 전 부터 식권 발매 시스템을 개발하여 운영하고 있습니다. 이 시스템이 안정적으로 운영되면서 최근 같은 사업을 하던 G그룹이 ..
커맨드 패턴(Command pattern)을 이용하면, 요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러가지 다른 요구사항을 집어넣을 수 도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원이 가능합니다. 커맨드 패턴은 식당의 주문 시스템으로 이해 하면 쉽습니다. 주문서로 주문을 하는 식당에 갔다고 생각을 해봅시다. 웨이터는 홀서빙 아르바이트생이라고 생각하셔도 좋습니다 ^^ 1. 자리에 앉아서 주문서를 적어서, 웨이터에게 전달합니다. 2. 웨이터는 주방에 가서 손님에게 받은 주문서를 전달합니다. 3. 주방장이 받은 주문대로 요리를 만듭니다. 주문서는 받은 주문을 캡슐화 하는 역할을 합니다. 웨이터는 주문서의 내용을 전혀 몰라도 됩니다. 그냥 이 주..
싱글턴 패턴(Singleton Pattern) = 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴. 싱글턴 객체는 유일하게 존재 하는 객체입니다. 예를 들면, 레지스트리 설정이라던가, DB 커넥션 객체 등이 여러 개 존재하면 심각한 오류가 발생하거나, 자원이 낭비 될 가능성이 있죠. (예를 들어서 2개의 설정 객체의 인스턴스를 무작위로 참조 하게 된다면.. ) 이런 객체들은 단 하나만 존재하게 해서, 그 객체의 인스턴스만 어디서든 쓸 수 있게 만들어 줘야 합니다. 싱글턴 객체가 이 싱글턴 객체를 어떻게 만들까요? 싱글턴 객체를 만드려면 두 가지의 조건을 만족해야 합니다. 1. 어디서든 접근이 가능하고, 인스턴스를 얻어서 사용할 수 있게 할 것. 2...
추상 팩토리 패턴 (Abstract-Factory Pattern) 에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정 하지 않고도 생성할 수 있습니다. 이말은 즉, 우리가 팩토리 메소드 편에 보았던 JPStyleBrownShoes, FRStyleRedShoes .. 이런 식으로 추상클래스에 의존 하는 구상 클래스를 만들지 않고도 생성할 수 있다는 뜻이죠. 디자인 패턴을 사용 하지 않았을때는? class DependentShoesStore { public Shoes makeShoes(String style, String name) { Shoes shoes = null; if (style.equals("Japan")) { if (name.equals("blackShoes"))..
팩토리 메서드 패턴(Factory method pattern)은 객체지향 디자인 패턴이다. Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. 팩토리 패턴을 시작하기 전에.. "new" 라는 것은 구상 객체를 뜻합니다. 구상 객체는 구상 클래스의 인스턴스를 만드는 것이고 공통적인 인터페이스가 아닌 특정 구현을 사용하는 것이죠. 이렇게 구상 클래스를 통해서 객체를 구현 하게 되면 나중에 수정해야 할 상황이 닥치면 모든 구상 클래스를 확인해서 바꾸어야 하는 불상사가 생길 수 있습니다. Footwear fo..
데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 객체에 추가적인 요건을 동적으로 첨가하며, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다. 복잡해 보이는 설명을 예시로 한 번 풀어서 표현해 보겠습니다. (본문에 나오는 예시가 아주 좋아서 그 주제를 가지고 설명하겠습니다.) 이 글을 보고 계시는 대부분의 분들이 카페에 한 번쯤 가보셨다고 생각을 합니다. 카페에 가서 주문을 하는 상황을 한 번 상상해 봅시다. 문을 밀고 들어가서 카운터에서 점원에게 주문을 합니다. "따뜻한 카페라떼 한 잔 주세요!", 옆에서 커피가 나오는 동안 기다리는데, 다른 손님이 들어와서 주문을 합니다. "카라멜 프라푸치노에, 헤이..