2. 구조(Structural) 패턴
1) 어댑터 패턴

한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 즉, 호환성 문제를 해결하기 인터페이스를 사용하여 같이 쓸 수 없는 클래스들을 연결해서 사용하는 것이다.
Dog(interface) - Poodle(class)
public interface Dog{
public void walk();
public void bark();
}
public class Pooddle implements Dog{
@Override
public void bark() {
System.out.println("멍멍멍");
}
@Override
public void walk() {
System.out.println("산책가자 멍!");
}
}
Cat(interface) - RussianBlue(class) - CatAdapter
public interface Cat{
public void walk();
public void meow();
}
public class RussianBlue implements Cat{
@Override
public void meow() {
System.out.println("야옹");
}
@Override
public void walk() {
System.out.println("집에서만 걷겠다 냥");
}
}
public class CatAdapter implements Dog{
private Cat cat;
public CatAdapter(Cat cat){
this.cat = cat;
}
@Override
public void bark() {
cat.meow();
}
@Override
public void walk() {
cat.walk();
}
}
Main
public class Main{
public static void main(String[] args) {
Cat cat = new RussianBlue();
Dog dog = new Pooddle();
CatAdapter catAdapter = new CatAdapter(cat);
behaivorDog(dog);
behaivorDog(catAdapter);
//behaivorDog(cat); -> 에러
}
static void behaivorDog(Dog dog){
dog.walk();
dog.bark();
}
}

CatAdapter가 Dog의 구현체로써 Cat을 받아 Dog의 역할에 매칭해주는 어댑터 역할을 하고 있다.
2) 프록시 패턴
- 실제 기능을 수행하는 객체 대신 가상의 객체를 이용해 로직의 흐름을 제어하는 디자인 패턴으로 일을 대신하는 객체를 만드는 패턴이다.
- 흐름을 제어하기 위해 사용되고 결과값을 조작하거나 변경시키면 안된다.
- 클라이언트가 어떤 객체를 통해 메서드를 호출하고 반환 값을 받는지 모르게 처리하기 위해사용됨
- 프록시 패턴을 이용하여 Cache기능으로 활용할 수 있다.
- Spring에서 Proxy 패턴을 이용해 AOP를 구현했다.

사용하려는 클래스와 프록시의 코드와 프록시를 사용하는 방법은 다음과 같다.
public class SomeService implements SomeInterface{
public void someMethod(){
// Some Codes
}
}
public class Proxy implements SomeInterface{
private SomeInterface si;
public void someMethod(){
si = new SomeService();
si.someMethod();
}
}
public class Main {
public static void main(String[] args) {
SomeInterface si = new Proxy();
si.someMethod();
}
}
- 실제 서비스에 대한 참조변수를 가진다. -> 프록시 클래스의 si
- 실제 서비스(SomeService)와 같은 메서드를 갖고 사용된다.
- 실제 서비스 전후에 별도 로직을 실행할 수 있다. (값 제어는 하지 않는다)
3) 데코레이터 패턴
4) 퍼사드 패턴
5) 브릿지 패턴
- 계속...
'ComputerScience > SoftwareEngineering' 카테고리의 다른 글
[SoftwareEngineering] 3. 디자인 패턴 - 행위 (0) | 2021.06.06 |
---|---|
[SoftwareEngineering] 1. 디자인 패턴 - 생성 (0) | 2021.06.05 |
댓글