OOP44 Singleton 핵심 의도 싱글턴 패턴은 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공한다. 적용 상황 프로그램이 실행될 때 인스턴스를 하나만 만드는 것이 더 안전하거나 경제적인 경우 사용한다. 예를 들어 스레드 풀이나 커넥션 풀, 캐시, 대화상자, 설정, 로그, 디바이스 드라이버 등이 있다. 또한 하나만 존재해야하는 객체의 생성 비용이 큰 경우 지연생성 방식으로 필요할 때 인스턴스를 생성하는 상황에 적합하다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 객체는 원래 맡은 책임과 함께 자신이 하나만 존재하도록 관리하고 생성하는 책임을 담당한다. 따라서 싱글톤 객체는 외부로부터 생성 요청을 받아서 자신의 인스턴스를 생성한다. 싱글톤 객체는 자신만 접근할 수 있는 private 생성자를 가.. 2023. 2. 24. Simple Factory, Factory Method, Abstract Factory Simple Factory 핵심 의도 객체 생성의 책임을 분리하자. 적용 상황 요구사항 변경에 의해 객체 생성에 필요한 코드가 자꾸 바뀌는 경우에 사용할 수 있다. 객체 생성에 필요한 과정을 템플릿처럼 정해서 다른 책임들로부터 분리할 수 있다. 솔루션의 구조와 각 요소의 역할 객체를 생성하는 부분이 요구사항에 따라 바뀌는 부분이므로, 객체 생성 책임을 별도의 객체인 Factory에 할당한다. 적용 예시 요구사항 피자 가게에서 주문 요청을 받으면 피자를 만들어 굽고 잘라서 박스에 넣으려고 한다. 이때 피자의 종류는 세 가지이고, 피자의 종류는 문자열로 구분한다. 설계 피자 가게인 PizzaStore이 피자 생성과 주문 메시지를 받을 수 있다. 이때 SimplePizzaFactory는 문자열에 따라 피자를 .. 2023. 2. 24. Decorator 핵심 의도 데코레이터 패턴으로 객체에 추가 요소를 실행 중에 동적으로 더할 수 있다. 데코레이터를 사용하면 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있다. 적용 상황 감싸고 있는 객체에 행동을 추가하거나 위임하는 용도로 만들어진다. 예를 들어 문자열을 다양한 방법으로 출력하고 싶을 때 사용할 수 있다. 문장 앞에 줄번호를 붙이거나, 소문자로 바꾸어 출력하거나, 박스로 감싸서 출력할 수 있다. 이때 문자열은 감싸지는 객체이고 추가하는 행동은 데코레이터의 책임이다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 어떤 객체와 상호작용하는 다른 객체들은 그 객체의 장식의 유무와 상관없이 그 객체에게 메시지를 보낸다. 데코레이터에게도 원래 객체와 동일한 메시지 요청이 오므로, 이 메시지.. 2023. 2. 24. Observer 핵심 의도 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의하는 패턴이다. 신문 구독 매커니즘과 유사하다! 신문사는 사업을 시작하고 신문을 찍어낸다. 독자가 구독 신청을 하면 새로운 신문이 나올 때마다 배달을 받을 수 있다. 신문을 더 이상 보고 싶지 않으면 구독 해지 신청을 한다. 옵저버 패턴에서는 신문사를 Subject, 구독자를 Observer라고 부른다. 적용 상황 특정 상태의 쓰기와 읽기 책임이 명확하게 분리되는 경우 사용할 수 있다. 특히 쓰기는 한 곳에서 발생하는데 읽기는 여러 곳에서 발생하면 의존 관계를 더 유연하게 구성할 수 있다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 상태를 저장하고 제어(w.. 2023. 2. 24. Strategy 핵심 의도 전략 패턴은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해 쓸 수 있게 한다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 적용 상황 어떤 객체의 행동에 대해서, 구체적인 구현 방법을 실행 중에 변경하고 싶을 때 사용한다. 예를 들어 계산기의 덧셈 기능에 대해 일반 계산기에 대해서는 누적합을 구하는 방식으로 덧셈을 하도록 하고, 공학 계산기에 대해서는 가우스 합을 구하는 방식으로 덧셈을 하도록 하고 싶을 때 사용할 수 있다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 어떤 행동을 할 수 있는 Context 객체가 존재한다. 이 객체는 각 행동에 대해 클라이언트가 원하는 방식으로 행동할 수 있어야 한다. 그러려면 클라이언트가 원.. 2023. 2. 24. 공부 방법 설정 2023. 2. 24. 이전 1 ··· 3 4 5 6 7 8 다음