Factory Method Pattern 객체를 생성할 때 필요한 인터페이스를 만든다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정. 팩토리 메소드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브클래스에게 맡긴다. 여기서 '맡긴다'라는 표현을 스는 이유는 실행 중에 서브클래스에서 어떤 클래스의 인스턴스를 만들지를 결정해서가 아니라, 생산자 클래스가 실제 생산될 제품을 전혀 모르는 상태로 만들어지기 때문 Abstract Factory Pattern 구상 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공 구상 클래스는 서브클래스에서 만든다. Client - CustomValidatorBean 클라이언트를 만들 때는 추상 팩토리를 바탕으로 만든다...
정의 객체에 추가 요소를 동적으로 더할 수 있는 패턴. 데코레이터를 사용하면 서브클래스를 만들 때보다 훨신 유연하게 기능을 확장할 수 있다. 관련 내용 데코레이터의 슈퍼클래스는 자신이 장식하고 있는 객체의 슈퍼클래스와 같다. 한 객체를 여러 개의 데코레이터로 감쌀 수 있다. 데코레이터는 자신이 감싸고 있는 객체와 같은 슈퍼클래스를 가지고 있기에 원래 객체가 들어갈 자리에 데코레이터 객체를 넣어도 상관없다. 데코레이터는 자신이 장식하고 있는 객체에게 어떤 행동을 위임하는 일 말고도 추가 작업을 수행할 수 있다. 객체는 어제든지 감쌀 수 있으므로 실행 중에 필요한 데코레이터를 마음대로 적용할 수 있다. Spring에서 보는 Decorator Pattern 여기서 슈퍼클래스는 ApplicationContext..
정의 옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다. 이와 관련된 객체지향의 개념 느슨한 결합(인터페이스를 통한 구현) Subject는 특정 인터페이스를 구현한다는 사실만 알고 특정 클래스에 대해서는 몰라도 되게끔 구현하는 것이 느슨한 결합 쉽게 정의하자면 어떠한 클래스에 멤버변수를 정의할 때 특정 클래스로 정의하지 않고 인터페이스로 정의함으로써 다양한 클래스들이 참여할 수 있는 환경을 구성하는 것을 의미한다. 느슨하게 결합하는 디자인을 사용하면 변경 사항이 생겨도 무난히 처리할 수 있는 유연한 객체지향 시스템을 구축할 수 있다. 객체 사이의 상호의존성을 최소화하는 작업이기 때문이다..
정의 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 전략패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 정의만 봐서는 바로 이해가 되지 않을 것이다. 책을 읽으면서 제가 재정의한 Strategy Pattern은 다음과 같다. 어떠한 한 객체가 동작하는 데 있어서 여러 동작을 할 수가 있는데, 이를 유동적으로 변환하는 패턴 이 또한 바로 봐서는 "무슨 소리지?" 라고 할 수 있다. 우선 전략패턴을 사용하지 않았을 때 좋지 않은 케이스를 보도록 하겠다. 상속 현재 Person 이라는 클래스를 만들고 이에 대하여 하위 세 개의 클래스는 상속을 통해 구현한 모습을 볼 수 있습니다. public class Person { public void e..
WIKI 끼어듦, 또는 가로막기란, 마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력하드웨어등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것. 일하고 싶은 자가 일하고 싶다고 관리인에게 말하는 행위 소프트웨어적 인터럽트 리눅스 커널과 같은 운영체제에서 응용 프로그램의 저수준 입출력 함수가 실행되면, 해당 실시간 라이브러리 함수에 의해 소프트웨어 인터럽트가 실행된다. 적절한 서비스 루틴으로 제어를 전달 인터럽트 정보를 조사하는 일반적인 루틴을 호출 -> 인터럽트의 고유한 핸들러 호출 빠르게 처리되어야 하므로 루틴의 테이블 이용 테이블을 통하여 이용할 수 있음 (테이블은 하위 메모리에 저장) 인터럽트와 트랩의 차이점 인터럽트 트랩 주체 하..
의도 한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴으로, 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의 동기 시스템을 서브시스템으로 구조화하면 복잡성을 줄이는 데에 큰 도움이 된다. 공통적인 설계 목표는 서브시스템들 사이의 의사소통 및 종속성을 최소화하려는 것! 예를 들어 소비자가 어느 물품에 대하여 구매버튼을 눌렀다고 하자. 그러면 물류센터에서는 해당 물품을 출고할 것이고, 택배사에서는 해당 물품에 대하여 배송관련 작업을 시행할 것이다. 소비자 입장에서는 구매 버튼을 누르면 특정 시간이 지났을 때 물품이 오면 되는 것이다. 이러한 커머스 시스템은 구매 관련 클래스를 정의하고 구매 관련되어 있는 인터페이스를 정의합니다. 구매자는 어떤 택배사와 물류센터를..
의도 부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성. 사용자로 하여금 개별 객체와 복합 객체를 모두 동일하게 다룰 수 있도록 하는 패턴 활용성 부분-전체의 객체 계통을 표현하고 싶을 때 사용자가 객체의 합성으로 생긴 복합 객체와 개개의 객체 사이의 차이를 알지 않고도 자기 일을 할 수 있도록 만들고 싶을 때. 사용자는 복합구조의 모든 객체를 똑같이 취급 참여자 Component: 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의. 모든 클래스에 해당하는 인터페이스에 대해서는 공통의 행동을 구현. 전체 클래스에 속한 요소들을 관리하는 데 필요한 인터페이스를 정의한다. 순환 구조에서 요소들을 포함하는 전체 클래스로 접근하는 데 필요한 인터페이스를 정의하며, 적절하다면 그 인터페이스..
의도 구현에서 추상을 분리하여, 이들이 독립적으로 다양성을 가질 수 있도록 하는 것 활용성 추상적 개념과 이에 대한 구현 사이의 지속적인 종속 관계를 피하고 싶을 때. 이를테면, 런타임에 구현 방법을 선택하거나 구현 내요을 변경하고 싶을 때가 여기에 해당합니다. 추상적 개념과 구현 모두가 독립적으로 서브클래싱을 통해 확장되어야 할 때. 이 때, 가교 패턴은 개발자가 구현을 또 다른 추상적 개념과 연결할 수 있게 할 뿐 아니라, 각각을 독립적으로 확장 가능하게 합니다. 추상적 개념에 대한 구현 내용을 변경하는 것이 다른 관련 프로그램에 아무런 영향을 주지 않아야 할 때. 즉, 추상적 개념에 해당하는 클래스를 사용하는 코드들은 구현 클래스가 변경되었다고 해서 다시 컴파일되지 않아야 합니다. 사용자들은 사용자..
- Total
- Today
- Yesterday
- 면접
- BFS
- Java
- docker-compose
- Collections
- 자바
- Spring
- Pattern
- 파이썬
- 2021 KAKAO BLIND RECRUITMENT
- env
- Command Line
- 그래프
- django
- postgres
- PostgreSQL
- headers
- thread
- DRF
- 백준
- Linux
- setattr
- dockerignore
- ubuntu
- 알고리즘
- Python
- Celery
- docker
- 카카오
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |