Java 109

고급객체지향 프로그래밍 - 커맨드 패턴(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문이 달라질 수 있는 등의 문제) 👉 데이터를 저장하..

[객체지향][자바의 정석] - 7.7 인터페이스(Interface)

7.7 인터페이스(Interface) 1. 인터페이스(Interface)란? 일종의 추상클래스이며 추상클래스(미완성 설계도)보다 추상화 정도가 높다. 실제 구현된 것이 전혀 없는 기본 설계도를 생각하면 된다. 추상메서드와 상수만을 멤버로 가질 수 있다. 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용된다. 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용된다. 결론: 인터페이스는 추상 메서드의 집합이다.(프로그래밍의 관점) 1-(2) 추상클래스와 인터페이스의 차이 추상클래스: 일반 클래스 + 추상 메서드 인터페이스: 구현된 것이 아무것도 없는 것(추상메서드와 상수만 쭈욱 늘여놓은 것) 2. 인터페이스의 작성 class대신 interface를 사용한다는 것 외에는 클래스 작성..

Java/객체지향 2021.12.03

[객체지향][자바의 정석] - 7.6 추상클래스(Abstract class)

추상클래스(Abstract class) 1. 추상클래스란? - 클래스가 설계도라면 추상클래스는 '미완성 설계도' - 추상 메서드(미완성 메서드)를 포함하고 있는 클래스 - 추상메서드란? 선언부만 있고 구현부(몸통, body)가 없는 메서드 - 일반 메서드가 추상 메서드를 호출할 수 있다.(호출할 때 필요한 건 선언부) - 완성된 설계도가 아니므로 인스턴스를 생성할 수 없다. - 다른 클래스를 작성하는 데 도움을 줄 목적으로 작성된다. 추상메서드란 무엇인지 아래 코드를 통해 살펴보자 package javajungsuk; abstract class Player{ abstract void play(int pos); //추상 메서드 몸통이 없는 미완성 메서드 abstract void stop(); //추상 메서..

Java/객체지향 2021.11.28

[객체지향][자바의 정석] - 7.5 다형성

7.5 다형성 1. 다형성(Polymorphism)이란? (1) - 여러 가지 형태를 가질 수 있는 능력을 의미한다. - 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것을 의미한다. 즉, 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성이다. package javaStandard; class Tv{ boolean power; //전원상태(on/off) int channel; //채널 void power() { power = !power; } void channelUp() { ++channel; } void channelUDown() { --channel; } } class CaptionTv extends Tv{ String text; //캡션내용 void caption() { /..

Java/객체지향 2021.11.15

[객체지향][자바의 정석] - 7.4 제어자

※ 7.3 패키지와 import는 굳이 포스팅하지 않아도 될것 같아서 7.4로 넘어감 7.4 제어자 1. 제어자란? - 클래스 ,변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다. - 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다. - 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다. 접근 제어자 - public, protected, default, private 그 외 - static, final, abstract, native, transient, synchronized, volatile, strictfp 2. static - static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭 제어자 대상 의미 static 멤버변..

Java/객체지향 2021.11.11

[객체지향][자바의 정석] - 7.2 오버라이딩(Overriding)

7.2 오버라이딩(Overriding) 1. 오버라이딩(overriding)이란? - 조상 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 의미한다. - 상속받은 조상 메서드를 자신에 맞게 변경하는 것 class Point{ int x; int y; // 받은 좌표를 문자열로 얻는 메소드 String getLocation(){ return "x: " + x + ", y : "+ y; } } class Point3D extends Point{ int z; //선언부는 변경 불가, 구현부{ }는 변경 가능 String getLoString(){ //오버라이딩 z를 포함시켜 고치는 것 return "x: " + x + ", y : "+ y+", z : " + z; } } class ..

Java/객체지향 2021.11.08

[객체지향][자바의 정석] - 7.1 상속(inheritance)

7.1 상속(inheritance) 1. 상속의 정의와 장점 ▶ 상속이란? - 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것 - 두 클래스를 조상과 자손으로 관계를 맺어주는 것 - 자손은 조상의 모든 멤버를 상속 받는다. (생성자와 초기화 블럭은 제외한다.) - 자손의 멤버개수는 조상보다 적을 수 없다. (같거나 많아야 한다.) class 자손클래스 extends 조상클래스{ // ... } 2. 클래스간의 관계 - 상속관계(inheritance) - 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다. - 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다. 2. 클래스간의 관계 - 포함관계(composite) ▶ 포함(composite)이란? - 한..

Java/객체지향 2021.11.04