본문 바로가기

전체 글

(170)
프록시 패턴(Proxy Patterns) - 객체 접근을 제어하기 프록시 패턴정의어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴클라이언트에서 메소드 호출시 호출을 중간에 가로채어 메소드 호출/ 접근제한등을 한다.프록시 종류원격(Remote Proxy) 프록시가상(Virtual Proxy) 프록시동적(Dynamic Proxy) 프록시보호(Protection Proxy) 프록시원격(Remote Proxy) 프록시다른 jvm에 들어있는 객체의 대변인에 해당하는 로컬 객체.프록시의 메소드를 호출하면, 그호출이 네트워크를 통해 전달되어 원격객체의 메소드가 호출, 결과는 프록시를 통해 클라이언트에게 전달됨. 가상(Virtual Proxy) 프록시생성비용이 많이드는 객체를 대신하는 역할.진짜 객체가 필요하기 전까지 객체의 생성을 미루..
스테이트(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와 같은 표준 기술과 자바빈 스타일의 오브젝트를 사용하는 오픈소스 기술을 통해 계속 이어져왔다. 이제는 자바빈이라고 말하면 비주얼컴포넌트라기 보다는 다음 두 가지 관례를 따라 만들어진 오브젝트를 가리킨다. 간단히 빈이라고 부르기도 한다.디폴트 생성자 : 자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야 한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문에 필요하다.프로퍼티 : 자바빈..
Head First Design Patterns(헤드 퍼스트 디자인 패턴) 한빛 미디어 저자 : 에릭 퍼리먼 여러 디자인 패턴책을 보았지만 객체 설계에 대한 디자인 패턴은 이책이 가장 좋은거 같다. 물론 내가 알지 못하는 더욱 깊이 있는 디자인 패턴을 다루는 책들도 있지만 기본 적인 디자인 패턴책 중에선 가장 좋다고 생각됩니다. 디자인 패턴을 공부하는데 있어서 가장 주요한 것이 디자인 패턴이 무엇이다라는 것이 아니라 이 디자인 패턴을 실무에 어떻게 녹일 수 있는가 입니다. 다른 책들은 단순 디자인 패턴을 설명하는데 그쳤다면 헤드퍼스트 디자인 패턴책은 어떤 문제가 있을 때 이런 디자인 패턴을 써야하는지를 설명해 줌으로써 디자인 패턴을 이해하는데 도움이 됩니다.간혹 쉬운 설명도 어렵게 설명하기는 하지만 이해하는데 있어서 그렇게 문제가 될것은 없습니다.디자인 패턴을 공부하는 분들이라..
스프링의 세 가지 핵심 프로그래밍 모델 스프링의 세가지 핵심 프로그래밍 모델 프레임 워크라 함은 틀(뼈대)라고 생각하면 된다. 어플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공해주고 코드가 어떻게 작성돼야 하는지에 대한 기준을 제시 해주기 때문에 틀을 따라 내용만 구성해주면 된다. 이런 틀을 프로그래밍 모델이라고 한다. 스프링은 세 가지의 핵심 프로그래밍 모델을 지원한다. 첫 번째, IoC/DI라고 불리는 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델이다. 스프링의 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI를 프레임워크의 근간으로 삼고 있다. 제어의 역전(IoC), 의존성 주입(DI)의 자세한 내용은 앞으로 추가 될 예정이다. ..
이터레이터와 컴포지트 패턴(Iterator And Composite Pattern) - 컬렉션 관리를 잘하는 방법 이터레이터 패턴의 정의이터레이터 패턴은 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공한다.이 패턴을 이용하면 집합체 내에서 어떤 식으로 일이 처리되는지에 대해서 전혀 모르는 상태에서 그 안에 들어있는 모든 항목들에 대해서 반복작업을 수행할 수 있다. 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어 있으면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있기 때문이다.쉽게 설명하면 컬렉션들을 공통된 인터페이스를 구현하게 함으로써 공통된 방법으로 모든 항목에 접근할 수 있는 방법이다.이터레이터를 사용하지 않을 경우 문제 예MenuItem이라는 클래스로 하나의 메뉴를 구현한다.PancakeHouseMen..
템플릿 메소드 패턴 (Template Method pattern) - 알고리즘 캡슐화 정의서로 다른 클래스들의 알고리즘이 공통될 때(상세 기능이 아닌 일반적인 관점에서) 공통된 알고리즘을 슈퍼클래스에서 정의하고 일부 다른부분은 추상 메소드로 정의하여 서브클래스에서 구현하는 패턴템플릿 메소드 패턴의 특징코드의 재사용에 크게 도움된다.클래스간의 의존성을 낮춰준다.프레임워크를 만들때 자주 사용되는 패턴이다.변경이 일어나지 않는 부분은 슈퍼 클래스에서 final로 지정하여 오버라이드하지 못하게 막는다템플릿 메소드 디자인 원칙(책에서는 헐리우드 원칙이라 나옴)저수준 구성요소가 고수준의 구성요소를 직접 호출할 수 없다.(고수준의 구성요소에서 호출하기전에 저수준 구성요소는 대기한다.)클래스의 주요 기능은 고수준 구성요소에서 장악하고 구현이 필요한 기능만 저수준 클래스를 호출한다.클래스의 구성요소들의 ..
커맨드 패턴 (Command Pattern) - 한단계 높은 캡슐화 커맨드 패턴의 정의커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능하다.커맨드 패턴의 목적한 차원 높은 단계의 캡슐화. 즉 메소드 호출을 캡슐화하는 것. 메소드 호출을 캡슐화하면 계산 과정의 각 부분들을 결정화시킬 수 있기 때문에, 계산하는 코드를 호출한 객체에서는 어떤 식으로 일을 처리해야 하는지에 대해 전혀 신경쓰지 않아도 된다. 그냥 결정화된 메소드를 호출해서 필요한 일만 잘 할 수 있으면 된다. 그 외에도 캡슐화된 메소드 호출을 로그 기록용으로 저장을 한다거나 취소(undo)기능을 구현하기 위해 재사용하는 것과 같은 작업도 할 ..