일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 처음 만나는 AI수학 with Python
- 자료구조와 함께 배우는 알고리즘 입문
- 네트워크 설정
- 선형대수
- 코드로배우는스프링웹프로젝트
- ㅒ
- 스프링부트핵심가이드
- 처음 만나는 AI 수학 with Python
- iterator
- 친절한SQL튜닝
- 구멍가게코딩단
- /etc/network/interfaces
- GIT
- 알파회계
- 코드로배우는스프링부트웹프로젝트
- baeldung
- 이터레이터
- 리눅스
- 자바편
- resttemplate
- 페이징
- Kernighan의 C언어 프로그래밍
- d
- 목록처리
- 티스토리 쿠키 삭제
- 데비안
- 자료구조와함께배우는알고리즘입문
- 스프링 시큐리티
- network configuration
- 서버설정
- Today
- Total
목록Design Pattern (10)
bright jazz music
옵저버 패턴 옵저버 패턴은 객체들 사이에 일대다 관계를 정의한다. (Subject --> observers) 주제는 동일한 인터페이스를 써서 옵저버에게 연락한다. Observer 인터페이스를 구현하기만 하면 어떤 구상클래스의 옵저버라도 패턴에 참여할 수 있다. 주제는 옵저버들이 Observer인터페이스를 구현한다는 것을 제외하면 옵저버에 관해 전혀 모른다. 따라서 이들 사이의 결합은 느슨한 결합(loose coupling)이다. 옵저버 패턴을 사용하면 주제가 데이터를 보내거나(푸시 방식) 옵저버가 데이터를 가져올(풀 방식) 수 있다. 일반적으로 풀 방식이 더 옳은 방식이라고 간주한다. 스윙은 다른 여러 GUI프레임워크처럼 옵저버 패턴을 많이 사용한다. RxJava, 자바빈, RMI 외에 코코아나 스위프트..
https://www.hanbit.co.kr/support/supplement_list.html 한빛출판네트워크 더 넓은 세상, 더 나은 미래를 위한 아시아 출판 네트워크 :: 한빛미디어, 한빛아카데미, 한빛비즈, 한빛라이프, 한빛에듀 www.hanbit.co.kr
https://github.com/hojuncha997/designPatternStudy/tree/main/src/main/java/com/example/designpatternstudy/compoundPattern GitHub - hojuncha997/designPatternStudy: design pattern study design pattern study. Contribute to hojuncha997/designPatternStudy development by creating an account on GitHub. github.com 1. QuackableInterfaceForCompoundPattern 생성 (오리 생성) 처음엔 QuackableInterfaceForCompoundPattern..
개별 (오리, QuackableInterfaceForCompoundPattern)객체의 상태 변경을 체크하고 싶어졌다. 따라서 Observer 패턴을 사용한다. 우선 Observable 인터페이스를 생성한다. 여기서는 QuackObservable이라고 명명했다. Observable이 바로 관찰 대상이 된다. Observable에는 옵저버를 등록하는 메소드와 옵저버에게 연락하는 메소드가 존재해야 한다. 필요시 옵저버 제거 메소드를 포함할 수도 있다. //QuackObservable.java package com.example.designpatternstudy.compoundPattern; //개별 객체의 동작을 감시하고자 할 때 사용 //여기서는 QuackableInterfaceForCompoundPatt..
팩토리 패턴을 사용함으로써, 일일이 데코레이터로 객체를 감싸는 작업에서 벗어났다. 데코레이터로 감싸는 팩토리 클래스를 사용하면 데코레이터로 감싸진 오리 객체(QuackableInterfaceForCompoundPattern)이 생성되기 때문이다. 그러나 여전히 오리를 개별로 관리해 줘야 하는 불편이 존재한다. 오리를 종류별로 분류하여 관리할 수는 없을까? 이런 경우 Composite 패턴을 사용할 수 있다. Composite패턴은 "객체를 원소로 가지는 컬렉션"을 개별 객체와 같은 방식으로 다루기 위해 사용하는 패턴이다. 우선 컴포지트 패턴을 사용한 Flock 클래스부터 생성하자. //Flock.java //오리 무리를 만드는 클래스 //composite패턴 사용: 객체들로 구성된 컬렉션을 개별 객체와 ..
DuckSimulator에서 데코레이터로 객체를 감싸야만 오리가 소리 낸 횟수를 셀 수 있다. 그런데 오리의 종류가 늘어나고 DuckSimulator의 코드가 복잡해진다면 실수로 객체를 감싸지 않는 문제가 생길 수 있다. 이런 경우 차라리 오리를 생성하고 감싸는 작업을 분리하여 한 군데서 수행하는 것이 좋다. 이 때 팩토리 패턴을 사용해볼 수 있다. 이 예제에서는 추상 팩토리 클래스를 만들고 그 팩토리 클래스를 상속하는 방식으로 또다른 팩토리 클래스를 만들어 나가는 방식을 사용한다. 아래는 추상 팩토리 클래스인 AbstractDuckFactory이다. 이를 기반으로 기능을 추가한 팩토리 클래스를 생성할 것이다. //AbstractDuckFactory.java //새로운 기능을 사용할 때는 객체를 데코레이..
갑자기 오리가 소리낸 횟수를 세는 기능을 오리 클래스 수정 없이 추가하고 싶어졌다. 이 때 데코레이터 패턴을 사용할 수 있다. 데코레이터 패턴은 기존 기능의 수정 없이 새로운 기능을 추가하고 싶을 때 사용할 수 있다. 사실상 어댑터 패턴과 유사하다. 어댑터 패턴은 호환에 좀 더 중점을 준다는 점이 다른 것 같다. 데코레이터 패턴은 데코레이터 클래스를 만들어서 기존 객체들을 데코레이터로 감싸면 된다. 이렇게 하면 Duck코드는 건드리지 않아도 된다. 1. 데코레이터 생성 //QuackCountingDecorator.java package com.example.designpatternstudy.compoundPattern; //데코레이터. 어댑터와 마찬가지로 타겟 인터페이스 구현 필요 public class..
여기에 quack하는 기능을 가진 QuackableInterfaceForCompoundPattern 인터페이스가 있다. //QuackableInterfaceForCompoundPattern package com.example.designpatternstudy.CompoundPattern; public interface QuackableInterfaceForCompoundPattern { public void quack(); } 여러 가지 오리 클래스들이 인터페이스를 구현하여 quack 기능을 오버라이드 한다. MallardDuck, RedheadDuck, 그리고 오리 소리를 낼 수 있는 DuckCall, RubberDuck 역시 QuackableInterfaceForCompoundPattern을 구현하여..
상태 패턴은 특정 상태에 따라 행동이 달라지는 객체를 위한 패턴. 쉽게는 리모콘이 예다. 티비의 상태에 따라(켜/꺼)에 따라 버튼이 작동이 다르다. - 켜: 채널 - 꺼: 채널 블로그도 마찬가지, 비공개 상태( 드래프트 상태)일 때의 포스팅은 클릭할 수도 없고 URL을 입력한다고 접근할 수 없다. 공개가 되면 다른 사람들이 와서 댓글/조항요도 누를 수 있다. --> 상태 변경에 따라 특정 오브젝트들의 행동이 바뀌는데, 이를 스테이트 패턴으로 정리할 수 있다. ---------------------------- 전략패턴과 상태패턴은 쌍둥이다. - 전략패턴은 바꿔 쓸 수 있는 알고리즘을 사용한다. - 상태패턴은 내부 상태를 바꿈으로써 객체가 행동을 바꿀 수 있도록 한다. 예를 들어 동전 뽑기 기계 두 가지 ..