본문 바로가기

Lecture32

자바 디자인 패턴: 반복자, 방문자, 연쇄책임 패턴 1.  반복자 패턴 Iterator Pattern 반복자 패턴이란? - 구조 안을 돌아다니며 처리하는 패턴 - 객체 요소들의 내부 표현방식을 공개하지 않고 외부에서 객체를 순회하는 객체를 만든다. - Java Collection Framework의 Iterator가 대표적이다. 의도와 동기 - 내부에서 객체의 순차적인 제공을 하지 않는 경우 - 순회 구현 방식이 다르더라도 동일한 방식(메서드)로 순회할 수 있게 제공한다. - 동일한 방식으로 순회하는 것이 핵심 클래스 다이어그램 집합 적인 객체가 있다고 했을 때, 이터레이터 인터페이스가 선언이 되어 있고 해당하는 구현체들이 그 집합체를 돌릴 수 있도록 구현한다. - Iterator: 요소에 접근하고 순회하는데 필요한 메서드 제공 - CocreteIter.. 2023. 7. 6.
자바 디자인 패턴: 상태 패턴, 옵저버 패턴, 메멘토 패턴, 파사드 패턴, 중재자 패턴 1.  상태 패턴 State Pattern 상태 패턴이란? - 상태가 달라지는 변화에 대응하는 패턴 - 클래스가 하나의 상태에 따라 그 내부의 여러 메서드의 기능이 바뀐다고 하면 이를 각각의 클래스로 분리한다. 의도와 동기 - 객체의 기능은 상태에 따라 달라질 수 있다. - 상태가 여러가지이고 클래스 전반의 모든 기능이 상태에 의존적이라 하면 상태를 클래스로 표현하는 것이 적절하다. - 많은 if-else 문을 방지하고 추후 상태 변화에 대응한다. 클래스 다이어그램 언제 어떤 클래스가 쓰일지를 적절하게 switch 해주는 것이 관건이다. - Context : ConcreteState의 인스턴스를 관리하고 서로 상태가 바뀌는 순간을 구현할 수 있다. - State : Context 가 사용할 메서드를 선.. 2023. 7. 6.
자바 디자인 패턴: 데코레이터 패턴, 콤포지트 패턴, 어댑터 패턴 1.  데코레이터 패턴 Decorator Pattern 데코레이터 패턴이란? - 장식과 실제 내용물을 동일시 -> 이질적인 객체들을 동일한 방식으로 핸들링할수 있다. - 객체에 동적으로 책임을 추가한다. - 자바 I/O stream에서도 사용한다. 기존 클래스에 +알파를 할때, 상속을 생각하기 쉬운데, Is-A 관계가 아니라 결합도를 보다 낮추면서도 유연하게 하는 방식 의도와 동기 - 상속을 사용하지 않고 기능의 유연한 확장이 가능한 패턴 -> 복잡한 hierarchy를 회피한다. - 객체에 동적으로 새로운 서비스를 추가 할 수 있음 - 전체가 아닌 개별적인 객체에 새로운 기능을 추가 할 수 있음 예를 들어서 어떤 클래스에는 이것이 필요하고 어떤 클래스에는 이것이 필요 없을 때 상속을 사용하면 필요 없.. 2023. 7. 5.
자바 디자인 패턴: 템플릿 메서드, 팩토리 메서드, 전략 패턴, 브릿지 패턴 1. 템플릿 메서드 패턴 Template Method 템플릿 메서드 패턴이란? - 상위 클래스에서는 전반적인 흐름을 정의한다. - 흐름을 정하는 것이 핵심이다. -> 알고리즘 - 하위 클래스에서는 상위에서 정의한 메서드를 구현한다. -> 하위 클래스에게 위임한다. 의도와 동기 - 오퍼레이션의 알고리즘 골격을 정의하고, 서브 클래스가 구체화한다. - 추상화된 함수를 통해 알고리즘의 일부 단계를 정의하여 템플릿 메서드의 처리 순서를 변하지 않게 한다. 클래스 다이어그램 템플릿 메서드를 프레임워크에서 많이 사용한다. 참고로 라이브러리와 프레임워크의 핵심적인 차이는 제어권의 여부이다. 프레임워크 -> 제어권을 프레임워크가 갖는다. 템플릿 메서드 -> 시나리오, 알고리즘을 정의함으로써 이미 정의된 것을 구현만 .. 2023. 7. 5.
자바 디자인 패턴: 인스턴스 생성 패턴 - 싱글톤, 프로토타입, 빌더, 추상 팩토리 1. 싱글톤 패턴 Singleton Pattern 싱글톤이란? - 자바에서는 객체는 항상 new를 통해 생성한다. - 매번 new를 하여 새로운 인스턴스를 생성하는 것이 아니라, 시스템 내에 하나의 인스턴스를 갖는 것 -> 단 하나임을 보장 ! -> C, C++에서는 전역 변수로 사용하는데 자바에서는 그 개념이 아니라 (global 변수가 없음) 하나의 인스턴스를 갖고 공유하도록 하는 의미임 의도와 동기 - 왜 하나여야 할까? 여러개가 있으면 문제가 되는 것을 하나로 보장하는 것 - 여러 번 생성되어서 각각의 값을 가질 필요가 없는 것이다. > 예를 들어 JDBC Connection Pool -> 단 하나만 필요하다. - 클래스의 인스턴스가 하나만 생성되고, 이후에는 해당 인스턴스를 공유하여 사용할 수 .. 2023. 7. 5.