본문 바로가기

Programming/과거포스팅

(127)
스테이트(State) 패턴 - 상태의 객체화 스테이트(State) 패턴스테이트 패턴을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다.뽑기 기계의 상태 변화객체의 상태에 따라서 실행되는 행위가 달라져야 할 때 → 객체 내부에서 if 절 또는 switch - case 절 의 전개// 동전을 투입하는 행위 public void insertQuarter() { if (state == HAS_QUARTER) { System.out.println("동전은 한 개만 넣어주세요."); } else if (state == NO_QUARTER) { state = HAS_QUARTER; System.out.println("동전을 넣었습니다."); } else if (stat..
자바빈이란? 자바빈이란? 이글은 토비의 스프링을 참고하여 작성한 글이다. - 자바빈(JavaBean)은 원래 비주얼 툴에서 조작 가능한 컴포넌트를 말한다. 자바의 주력 개발 플랫폼이 웹 기반의 엔터프라이즈 방식으로 바뀌면서 비주얼 컴포넌트로서 자바빈은 인기를 잃어갔지만, 자바빈의 몇가지 코딩 관례는 JSP빈, EJB와 같은 표준 기술과 자바빈 스타일의 오브젝트를 사용하는 오픈소스 기술을 통해 계속 이어져왔다. 이제는 자바빈이라고 말하면 비주얼컴포넌트라기 보다는 다음 두 가지 관례를 따라 만들어진 오브젝트를 가리킨다. 간단히 빈이라고 부르기도 한다.디폴트 생성자 : 자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야 한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문에 필요하다.프로퍼티 : 자바빈..
스프링의 세 가지 핵심 프로그래밍 모델 스프링의 세가지 핵심 프로그래밍 모델 프레임 워크라 함은 틀(뼈대)라고 생각하면 된다. 어플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공해주고 코드가 어떻게 작성돼야 하는지에 대한 기준을 제시 해주기 때문에 틀을 따라 내용만 구성해주면 된다. 이런 틀을 프로그래밍 모델이라고 한다. 스프링은 세 가지의 핵심 프로그래밍 모델을 지원한다. 첫 번째, IoC/DI라고 불리는 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델이다. 스프링의 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI를 프레임워크의 근간으로 삼고 있다. 제어의 역전(IoC), 의존성 주입(DI)의 자세한 내용은 앞으로 추가 될 예정이다. ..
이터레이터와 컴포지트 패턴(Iterator And Composite Pattern) - 컬렉션 관리를 잘하는 방법 이터레이터 패턴의 정의이터레이터 패턴은 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공한다.이 패턴을 이용하면 집합체 내에서 어떤 식으로 일이 처리되는지에 대해서 전혀 모르는 상태에서 그 안에 들어있는 모든 항목들에 대해서 반복작업을 수행할 수 있다. 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어 있으면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있기 때문이다.쉽게 설명하면 컬렉션들을 공통된 인터페이스를 구현하게 함으로써 공통된 방법으로 모든 항목에 접근할 수 있는 방법이다.이터레이터를 사용하지 않을 경우 문제 예MenuItem이라는 클래스로 하나의 메뉴를 구현한다.PancakeHouseMen..
템플릿 메소드 패턴 (Template Method pattern) - 알고리즘 캡슐화 정의서로 다른 클래스들의 알고리즘이 공통될 때(상세 기능이 아닌 일반적인 관점에서) 공통된 알고리즘을 슈퍼클래스에서 정의하고 일부 다른부분은 추상 메소드로 정의하여 서브클래스에서 구현하는 패턴템플릿 메소드 패턴의 특징코드의 재사용에 크게 도움된다.클래스간의 의존성을 낮춰준다.프레임워크를 만들때 자주 사용되는 패턴이다.변경이 일어나지 않는 부분은 슈퍼 클래스에서 final로 지정하여 오버라이드하지 못하게 막는다템플릿 메소드 디자인 원칙(책에서는 헐리우드 원칙이라 나옴)저수준 구성요소가 고수준의 구성요소를 직접 호출할 수 없다.(고수준의 구성요소에서 호출하기전에 저수준 구성요소는 대기한다.)클래스의 주요 기능은 고수준 구성요소에서 장악하고 구현이 필요한 기능만 저수준 클래스를 호출한다.클래스의 구성요소들의 ..
커맨드 패턴 (Command Pattern) - 한단계 높은 캡슐화 커맨드 패턴의 정의커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능하다.커맨드 패턴의 목적한 차원 높은 단계의 캡슐화. 즉 메소드 호출을 캡슐화하는 것. 메소드 호출을 캡슐화하면 계산 과정의 각 부분들을 결정화시킬 수 있기 때문에, 계산하는 코드를 호출한 객체에서는 어떤 식으로 일을 처리해야 하는지에 대해 전혀 신경쓰지 않아도 된다. 그냥 결정화된 메소드를 호출해서 필요한 일만 잘 할 수 있으면 된다. 그 외에도 캡슐화된 메소드 호출을 로그 기록용으로 저장을 한다거나 취소(undo)기능을 구현하기 위해 재사용하는 것과 같은 작업도 할 ..
싱글턴 패턴(Singleton Pattern) - 인스턴스가 하나뿐인 특별한 객체 싱글턴 패턴정의어플리케이션에서 유일하게 존재하는 객체싱글톤을 이용한 클래스는 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,..
팩토리 패턴(Factory Pattern) - 느슨한 결합을 이용하는 디자인 패턴 팩토리 패턴 팩토리패턴디자인패턴 중에서 생성 패턴(Creational Pattern)의 대표적인 패턴들이다.팩토리 패턴의 종류팩토리 메서드(Factory Method) 패턴추상 팩토리(Abstract Factory) 패턴시작하기전에디자인 패턴에 포함되지는 않지만, 팩토리 패턴의 기본이 되는 팩토리 구조에 대해서 알아보자.팩토리를 사용하는 이유클라이언트에서 사용할 객체를 생성하는 부분을 캡슐화하여 느슨한 결합 상태로 만들어, 변화에는 닫혀있고 확장에는 열려있는 코드를 만들 수 있다.변경 전의 코드// Pizza 클래스의 객체의 생성 및 사용을 모두 수행하는 메서드 Pizza orderPizza(String type) { Pizza pizza; if (type.equals("cheese")) { pizza ..