DesignPartterns

이터레이터와 컴포지트 패턴

DesignPartterns - 이터레이터와 컴포지트 패턴

8 minute read

이터레이터 패턴의 정의 이터레이터 패턴은 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공한다. 이 패턴을 이용하면 집합체 내에서 어떤 식으로 일이 처리되는지에 대해서 전혀 모르는 상태에서 그 안에 들어있는 모든 항목들에 대해서 반복작업을 수행할 수 있다. 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어 있으면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있기 때문이다. 쉽게 설명하면 컬렉션들을 공통된 인터페이스를 구현하게 함으로써 공통된 방법으로 모든 항목에 접근할 수 있는 방법이다.

템플릿 메소드 패턴

DesignPartterns - 템플릿 메소드 패턴

2 minute read

정의 서로 다른 클래스들의 알고리즘이 공통될 때(상세 기능이 아닌 일반적인 관점에서) 공통된 알고리즘을 슈퍼클래스에서 정의하고 일부 다른부분은 추상 메소드로 정의하여 서브클래스에서 구현하는 패턴 템플릿 메소드 패턴의 특징 코드의 재사용에 크게 도움된다. 클래스간의 의존성을 낮춰준다. 프레임워크를 만들때 자주 사용되는 패턴이다. 변경이 일어나지 않는 부분은 슈퍼 클래스에서 final로 지정하여 오버라이드하지 못하게 막는다 템플릿 메소드 디자인 원칙(책에서는 헐리우드 원칙이라 나옴) 저수준 구성요소가 고수준의 구성요소를 직접 호출할 수 없다.(고수준의 구성요소에서 호출하기전에 저수준 구성요소는 대기한다.) 클래스의 주요 기능은 고수준 구성요소에서 장악하고 구현이 필요한 기능만 저수준 클래스를 호출한다.

어댑터 패턴과 퍼사드 패턴

DesignPartterns - 어댑터 패턴과 퍼사드 패턴

2 minute read

어댑터? 국산 플러그와 유럽식 소켓사이에서 국산 전원 플러그를 유럽식 소켓에 꽂을 수 있게 해주는 역할을 해주는 것. 어댑터 패턴(Adapter Pattern)의 정의 한 클래스(어떤)의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어탭터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다. 어댑터는 클라이언트로부터 요청을 받아서 새로운 업체에서 제공하는 클래스에서 받아들일 수 있는 형태의 요청으로 변환시켜주는 중개인 역할을 합니다. 어댑티? -> 어댑터를 가운데 두고, 클라이언트와 정반대 위치에 있는것을 어댑티라고 부름.

커맨드 패턴

DesignPartterns - 커맨드 패턴

7 minute read

커맨드 패턴의 정의 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능하다. 커맨드 패턴의 목적 한 차원 높은 단계의 캡슐화. 즉 메소드 호출을 캡슐화하는 것. 메소드 호출을 캡슐화하면 계산 과정의 각 부분들을 결정화시킬 수 있기 때문에, 계산하는 코드를 호출한 객체에서는 어떤 식으로 일을 처리해야 하는지에 대해 전혀 신경쓰지 않아도 된다.

싱글턴 패턴

DesignPartterns - 싱글턴 패턴

2 minute read

정의 어플리케이션에서 유일하게 존재하는 객체 싱글톤을 이용한 클래스는 new를 이용한 객체를 생성하지 못하고 클래스안의 getInstance() 메소드를 이용하여 객체를 가져온다.(명명규칙) java의 calendar = getInstance해도 새로운 객체를 만들어준다 고로 싱글톤이라할 수 없다 public static Calendar getInstance() { Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT)); cal.sharedZone = true; return cal; } private static Calendar createCalendar(TimeZone zone, Locale aLocale) { Calendar cal = null; String caltype = aLocale.getUnicodeLocaleType("ca"); if (caltype == null) { // Calendar type is not specified.