1. 생성 패턴
객체를 생성하는 것과 관련 있는 패턴이다. 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하여 시스템 안정성을 높이고 코드 유지보수성을 높이는 목적이 있다.
1) 싱글톤 패턴
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
주로 데이터베이스 연결 모듈처럼 공통된 객체를 여러 개 생성해서 사용해야하는 상황에서 많이 사용한다.
하나의 인스턴스를 만들어 놓고 이 인스턴스를 다른 모듈들과 공유하며 사용하기 때문에 인스턴스를 생성하는 비용이 줄어들고, 메모리를 효율적으로 활용할 수 있는 장점이 있다.
단, 이 인스턴스에 대한 의존성이 높아져 유지보수가 힘들고 테스트하기 어렵다는 단점도 있다.
class Singleton {
private static class singlelnstanceHolder {
//1. 유일한 싱글톤 객체 생성
private static final Singleton INSTANCE = new Singleton()
}
// 2. 외부 클래스에서 해당 클래스 객체화가 불가능하도록 기본 생성자를 private으로 선언
private Singleton singleton() {}
// 3. getter 선언
public static synchronized Singleton getlnstance() {
return singlelnstanceHolder.INSTANCE
}
}
public class HelioWorld {
public static void m ain(String [] args) {
Singleton a = Singleton.getlnstance()
Singleton b = Singleton.getlnstance()
System.out.println(a.hashCode())
System.out.println(b.hashCode())
if (a == b) {
System.out.printin(true)
}
}
}
/*
705927765
705927765
true
*/
2. 구조 패턴
1) 어댑터 패턴
다른 곳에서 개발한 클래스를 가져다가 쓸 때나, 특정 클래스를 사용해야하지만 수정할 수 없는 경우가 있는데, 이때 중간에서 변환 역할을 해주는 클래스를 사용하는 것을 어댑터 패턴이라고 한다.
아래처럼 해당 객체와 타입이 다른 인터페이스를 구현한 어댑터 객체를 통해 자기 자신의 형태는 유지한 상태로 다른 인터페이스의 속성을 활용할 수 있다.
public interface Duck {
public void quack();
public void fly();
}
public interface Turkey {
public void gobble();
public void fly();
}
public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("Gobble gobble");
}
@Override
public void fly() {
System.out.println("I'm flying a short distance");
}
}
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
2) 프록시 패턴
프록시는 대리인이라는 뜻이며 어떠한 일을 대신해서 처리하는 것을 의미
프록시 패턴은 대상 객체에 접근하기 전, 그 접근을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다.
실제로 클라이언트도 프록시로부터 결과를 전달받는다.
DB - Cache 기능으로도 활용이 가능한 패턴이다.
서버에서 자주 변경되지 않는 데이터의 경우, 메모리에 캐싱해놨다가 같은 요청이 들어왔을 때 굳이 DB에 접근하지 않고 캐시에 저장된 결과를 바로 내려주는 패턴으로 사용할 수 있다.
3. 행위 패턴
'CS지식 > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 디자인 패턴이란?? (2) | 2024.02.19 |
---|