옵저버 패턴 옵저버 패턴(Observer Pattern)이란, GoF가 소개한 디자인 패턴 중 하나로 관찰 대상이 되는 객체가 변경되면 대상 객체를 관찰하고 있는 옵저버(observer)에게 변경사항을 통지(notify)하는 디자인 패턴을 말한다. 옵저버 패턴을 사용하면 객체 간의 상호작용을 수월하게 하고 효과적으로 데이터를 전달할 수 있다. 옵저버 패턴 구조 옵저버 패턴은 관찰 대상인 서브젝트(Subject)와 이를 관찰하는 옵저버(Observer)로 이루어져 있다. 하나의 서브젝트에는 1개 또는 여러 개의 옵저버를 등록할 수 있다. 서브젝트의 상태가 변경되면 자신을 관찰하는 옵저버들에게 변경사항을 통지한다. 서브젝트로 변경사항을 통지 받은 옵저버는 부가적인 처리를 한다. 옵저버 패턴은 서브젝트와 옵저..
템플릿 콜백 패턴 프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. 좀 더 풀어서 얘기하면, callback은 코드가 호출(call)은 되는데 코드를 넘겨준 곳의 뒤(back)에서 실행된다는 것이다. 템플릿 콜백 패턴은 GOF 패턴은 아니고, JdbcTemplate, RestTemplate, TransactionTemplate, RedisTemplate과 같이 스프링 내부에서 자주 사용된다. 이전에 살펴본 전략 패턴에서 템플릿과 콜백 부분이 강조된 패턴이라 생각하면 된다. 이번에도 역시 요리사들의..
전략 패턴 GOF에서는 전략 패턴을 "알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다"고 말한다. 이전에 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 자식 클래스에 두어서 상속을 사용해서 문제를 해결했다. 전략 패턴은 변하지 않는 부분을 Context라는 곳에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는 것이다. 이번에도 이해를 돕기 위해 요리사들의 요리 시작부터 완성하기까지의 시간을 측정해야 한다고 가정해보고, 전략 패턴을 적용하여 구현해보자. 전략 패턴..
템플릿 메서드 패턴 GOF에서는 템플릿 메서드 패턴을 "작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기한다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있다"고 말한다. 이 말은 부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 로직은 자식 클래스에 정의하는 것이다. 이렇게 하면 자식 클래스가 알고리즘의 전체 구조를 변경하지 않고, 특정 부분만 재정의할 수 있어 상속과 오버라이딩을 통한 다형성으로 문제를 해결하는 것이다. 이해를 돕기 위해 요리사들의 요리 시작부터 완성하기까지의 시간을 측정해야 한다고 가정해보고, 템플릿 메서드 패턴을 적용하여 구현해보자. 먼저 템플릿 메서드 패턴을 적용하기 전의 코드다...
- Total
- Today
- Yesterday
- 스프링
- 릿코드
- 리팩토링
- 알고리즘
- 그리디
- 문자열
- 스프링 부트
- 노마드코더
- 정렬
- 파이썬
- mysql 8.0
- 코틀린
- 백준
- kotlin
- spring boot
- 스프링부트
- leetcode
- Spring
- 데이터베이스
- 구현
- 코테
- MySQL
- 자료구조
- 김영한
- webflux
- Real MySQL
- 노마드
- 북클럽
- 인프런
- Algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |