일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- WPF
- PostgreSQL 설치 시 에러
- github
- Spring Boot
- 프로그래머스 코딩테스트 연습
- 파이썬
- 클린 코드
- 프로그래머스 코딩테스트 연습문제
- Word Cloud
- 바이오데이터 엔지니어
- selenium
- c#
- Python
- heroku
- Codeforces
- FastAPI
- 브랜디
- github actions
- 프로그래머스 코딩 테스트 연습
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 프로그래머스 월간 코드 챌린지 시즌1
- 디자인 패턴
- git
- 스코페2021
- 애드센스
- 프로그래머스 월간 코드 챌린지
- Firefox
- PostgreSQL
- terraform
- pycharm
- Today
- Total
목록디자인 패턴 (5)
프로그래밍 연습하기
싱글턴 패턴이란 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. 프로그램이 시작시에 생성되게 하지 않고 필요한 시기에 생성할 수도 있습니다. 싱글턴 패턴을 만들 때, private static으로 인스턴스를 저장합니다. 그리고 getInstance()를 구현하여 그 인스턴스가 있다면 그것을 반환하고, 없다면 새로 생성합니다. 이 과정이 멀티스레딩 상황에서 구현된다면, 자칫 인스턴스가 여러개 생성될 수 있습니다. getInstance()에 synchronize 키워드를 사용함으로써 이 문제를 해결할 수 있습니다. 하지만 속도 저하 등의 문제가 있습니다. 이런 문제에 대응하는 방법이 세 가지 있습니다. 그냥 Synchronize 키워드를 사용합니..
new를 사용하게 되면 구상 클래스의 인스턴스를 만들게 됩니다. 구상 클래스를 많이 사용하게 되면 구상 클래스를 추가할 때 마다 코드를 고쳐야 해서 많은 문제가 생기게 됩니다. 이런 경우를 변화에 닫혀있다라고 하고, OCP(Open/Closed Principle)을 어기게 됩니다. 따라서 객체를 생성하는 부분을 팩토리라고 이름 붙인 클래스로 따로 분리하게 됩니다. 하지만 이러한 Simple Factory는 디자인 패턴이라고 할 수는 없습니다. 단지 클라이언트와 구상 클래스를 분리하기 위한 간단한 기법으로 활용될 수 있습니다. 추상 클래스를 만들어 객체를 생성하는 메소드를 추상 메소드로 선언해둡니다. 여기서 나온 서브클래스들이 객체를 생성하는 추상 메소드를 필요에 맞게 구현하게 됩니다. 이것이 팩토리 메소..
데코레이터 패턴은 객체에 동적으로 새로운 기능을 추가해줄 수 있게 합니다. 이 방법은 서브클래스를 생성하는 것 보다 유연합니다. 객체를 생성하면서 데코레이터로 감싸주면서 새로운 기능을 추가할 수 있습니다. 컴포넌트를 만들고 그것을 데코레이터를 만듭니다. 데코레이터가 컴포넌트를 상속하는 이유는 형식을 그대로 유지하기 위해서 입니다. 실제 컴포넌트와 데코레이터는 각각을 상속하여 작성하고, 컴포넌트를 데코레이터로 감싸면서 원하는 기능을 추가하게 됩니다. 단점은 클래스들이 많아지면서 쉽게 이해하기 힘들어질 수 있다는 점, 그리고 구성 요소의 특정 형식에 의존하는 경우에는 사용하기 힘듭니다. 코드가 복잡해지는 문제는 팩토리나 빌더 패턴을 통하여 개선할 수 있습니다. 참고 자료 - Head First Design ..
옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고, 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다. 옵저버들을 관리하는 Subject 인터페이스를 구현하는 클래스를 만들고, Observer 인터페이스를 구현하는 옵저버 클래스들이 있게 됩니다. Subject 인터페이스는 옵저버 등록, 삭제, 알림 메소드가 있고 Observer 인터페이스는 업데이트 메소드가 있습니다. Subject 인터페이스에서 알림 메소드 안에서 Observer 인터페이스의 업데이트 메소드를 사용해서 내용을 갱신할 수 있습니다. 옵저버 패턴은 자바에서 java.util.Observable 을 통해 사용할 수도 있습니다. 하지만 이는 클래스를 상속받아서 구현해야되기 때문에 재사용성에 제약..