Java/고급객체지향 15

고급객체지향 프로그래밍 - MVC 패턴(Model-view-Controller Pattern)

MVC 패턴(Model-View-Controller Pattern) 1. 목적 업무 로직 및 데이터와 보이는 부분을 분리한다 사용자 인터페이스 로직이 비지니스 로직보다 더 자주 바뀐다면 MVC를 사용하는 것이 바람직하다. 화면을 포함하는 사용자 인터페이스와 업무 처리 부분을 분리해서 동작할 수 있도록 한다. MVC는 원래 Smalltalk 언어에서부터 시작되었으나 현재 GUI를 지원하는 프로그램과 웹프레임워크에서 많이 사용 된다. 요소 설명 이름 MVC 혹은 Model-view-Controller 문제 데이터와 해당 데이터를 보여주는 부분의 코드가 섞여 있다. 해결방안 데이터와 뷰를 분리하고 이들을 연동시키는 컨트롤러를 추가한다. 결과 Loose coupling(낮은 결합도), 재사용성이 높아진다. 모델..

고급객체지향 프로그래밍 - 템플릿 메소드 패턴(Template Method pattern)

1. template method pattern이란? 간단하게 구현된 알고리즘의 직접적인 변경 없이(알고리즘의 구조 변경 없이) 서브클래스를 사용하여 일부를 재정의하여 사용할 수 있는 것을 의미한다. package smu_2; public abstract class CaffeineBeverage{ public final void prepareRecipe() {//final로 레시피(알고리즘)를 고정시켜 놓는다. 오버라이딩을 금지시키기 위함 boilWater(); brew(); pourInCup(); addCondiments(); } /*추상메소드를 사용해서 자식클래스내에서 필요한대로 구현하게 하기 위함 왜냐면 커피, 홍차 등 음료마다 커피를 끓이거나 홍차를 끓이거나 넣는 여러가지들이 다르기 때문에 추상클..

스테이트 패턴(State Pattern)

스테이트 패턴(State Pattern) 1. 목적 객체의 내부 상태가 바뀔 때 객체의 동작을 변경할 수 있도록 한다. 객체는 자신의 클래스를 바꾸는 것처럼 보인다. 구분 설명 State(상태) 시점에 따라 특정 상태에 있어야 한다. 처음에 가지게 되는 초기상태(state) 또는 상황에 따라 여러 상태 가운데 한 상태를 가질 수 있다 Transition(전이) 외부 입력에 따라 가능한 상태로 전환 예 게임 캐릭터: 걷는 상태, 뛰는 상태, 멈춘 상태 가전 제품: on, off, sleep 지하철 개찰구: 열림, 잠금 2. 요소 요소 설명 이름 스테이트(State) 문제 상태(state)가 여러 개 있고, if문으로 상태를 통제 해결방안 상태를 한 곳에서 관리 결과 변경 최소화 public class Ma..

고급객체지향 프로그래밍 - 커맨드 패턴(Command Pattern)

커맨드 패턴(Command Pattern) 1. 목적 요구사항(요청, 명령)을 객체로 캡슐화시킨다. 이를 이용해서 다른 요구사항을 지닌 클라이언트를 매개변수화 시킬 수 있다. 요구사항을 큐에 넣거나 로그로 남길 수 있으며 작업 취소 기능을 지원할 수도 있다. 2. 문제 홈오토메이션용 리모콘 사용하려는 객체가 많고, API가 서로 다른 경우(퍼사드 패턴을 사용해도 될거 같지만 다른 경우로 커맨트 패턴을 사용) 차고문 up() 전등 on() Tv pressOn() 예: 홈오토메이션용 리모컨 개발하는데, 차고문, 전등, Tv, Stereo, 에어컨 등 사용해야 하는 객체가 너무 많고 서로 다른 명령들로 구성되어 있다. 3. 커맨드 패턴의 분리란? 커맨드 패턴의 경우엔 요구하는 객체와 그 요구를 받아들이고 처리..

고급객체지향 프로그래밍 - 퍼사드 패턴(Facade Pattern)

퍼사드 패턴(Facade Pattern) 1. 목적 서브시스템에 있는 여러 개의 인터페이스를 통합하는 한개의 인터페이스를 제공한다. 퍼사드는 서브 시스템을 쉽게 사용할 수 있도록 해주는 고급 수준의 인터페이스를 정의한다. 2. 패턴 요소 요소 설명 이름 퍼사드(Facade) 문제 서브시스템이 너무 많고 사용하기가 복잡한 문제 해결방안 단순한 인터페이스를 제공하는 객체를 중간에 넣는다 결과 최소 지식 원칙에 입각해서 의존성을 최소화 시킨다. 3. 사례 package smu_2; public class HomeTheaterFacade { private Amplifier amp; private Tuner tuner; private DvdPlayer dvd; private CdPlayer cd; private ..

고급객체지향 프로그래밍 - 어댑터 패턴(Adapter Pattern)

어댑터 패턴(Adapter Pattern) 1. 목적 클래스의 인터페이스를 클라이언트가 원하는 형태의 또다른 인터페이스로 변환시켜준다. 어댑터는 호환되지 않는 인터페이스 때문에 동작하지 않는 클래스들을 함께 동작할 수 있도록 만들어준다. 2. 역할 객체를 감싸는 역할을 한다(Object wrapping) 서로호환되지 않는 두 개의 인터페이스를 연결하는 작업 서로 다른 인터페이스를 동일하게 변환해준다. Ex ) 전기 플러그 서로 다른 플러그(유럽, 미국)의 경우 어댑터를 사용해서 변환시킬 수 있다. 요소 설명 이름 어댑터(Adapter) 문제 사용 객체의 API가 서로 다른 문제 해결방안 함수를 변환하는 객체를 중간에 넣어준다. 결과 변경의 최소화 3. 문제상황 어댑터 패턴을 사용한 문제 상황 해결 방안...

고급객체지향 프로그래밍 - 다오 패턴(DAO Pattern)

다오 패턴(DAO Pattern) 1. 목적 업무와 DBMS를 분리하기 위해 사용 업무와 데이터 2계층을 분리, 서로 그 상태를 동일하게 유지(Persistence) 업무: 고객, 주문, 유통 같은 업무 절차 및 규칙 데이터: 정보를 어떻게 저장할지 예를 들어 고객 ID는 몇 자리로 할 것인지, 숫자 또는 문자인지 등 물리적인 문제 요소 설명 이름 다오(DAO) 문제 DB를 사용하는 방법이 변경되면 클라이언트의 수정이 많아진다 해결방안 사용 방법의 분리 결과 loose coupling, 확장성 2. 문제 데이터를 저장하는 방식이 다양함(데이터베이스, 파일, XML, CSV 파일 등) 사용하는 방법이 다르면 변경 부분이 많아진다.(DBMS에 따라서 SQL문이 달라질 수 있는 등의 문제) 👉 데이터를 저장하..

고급객체지향 프로그래밍 - 싱글턴 패턴(Singleton Pattern), 반복자 패턴(Iterator Pattern)

싱글턴 패턴(Singleton Pattern) 싱글턴 패턴이란? 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. 싱글턴 패턴의 목적 - 클래스가 한 개의 인스턴스(객체)만을 만들 수 있도록하고, 어디서나 생성된 인스턴스에 접근할 수 있도록 하기 위함이다. 싱글턴 패턴의 요소 요소 설명 이름 싱글턴(Singleton) 문제 여러 객체가 생성되면 상태 관리가 어려움 해결 방..

고급객체지향 프로그래밍 - 팩토리 메소드 패턴(Factory Method Pattern)

팩토리 메소드 패턴(Factory Method Pattern) 팩토리메소드란? Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. 팩토리메소드의 목적 - 바뀌는 부분/ 바뀌지 않는 부분을 나누어서 바뀌는 부분을 추상 클래스로 만들어준다. - 관련된 팩토리 메소드 함수들이 여러개를 한 꺼번에 묶어 놓은 그런 클래스를 만들어 제공하는 것이 핵심이다. - 구체적인 클래스 명시 없이 관련된 혹은 의존적인 객체를 생성할 수 있는 인터페이스를 제공한다. 문제점 - 객체를 생성하는 new의 문제로 new는 인터페이..

고급객체지향 프로그래밍 - 데코레이터 패턴 (Decorator Pattern)

데코레이터 패턴 (Decorator Pattern) 데코레이터 패턴 (Decorator Pattern)이란? 기능을 조금씩 추가하기 위해서 새로운 클래스를 생성하는 경우에 너무 많은 상속 관계가 발생할 수 있기에 데코레이터 패턴은 상속을 하지 않고 새로운 기능을 추가할 수 있도록 해주는 패턴이다. 데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 추가해준다. (서브 클래스를 만들지 않고 기능을 유연하게 확장할 수 있는 방법을 제공한다.) 데코레이터 패턴의 구성요소 요소 설명 이름 데코레이터(Decorator) 문제 조금씩 다른 다양한 종류, 늘어날수록 확장이 어렵다 해결 방안 상속을 남용하지 않고 연관으로 필요한 기능을 추가해준다. 실행시점 확장 Extension at runtime (not comp..