[개발 일기] 2025.06.10 - 파사드 패턴

2025. 6. 10. 13:34·개발 일기

💡 개요

 

오늘은 자바의 파사드 패턴에 대해 정리해 보자.

 

 

 

🛠️ 파사드 패턴

 

파사드 패턴은 복잡한 하위 객체(주로 구현체)를 하나의 인터페이스로 감싸서 개발자가 더 쉽게 기능을 사용할 수 있게 해주는 디자인 패턴이다.

 

 

말만 들으면 어려우니까 아래 예시 코드를 보자.

 

 

 

⚙️ Computer 클래스에서 사용해야 할 서브 클래스

 

class CPU {
    public void freeze() {
        System.out.println("CPU freezing...");
    }

    public void jump(long position) {
        System.out.println("CPU jumping to: " + position);
    }

    public void execute() {
        System.out.println("CPU executing...");
    }
}

class Memory {
    public void load(long position, String data) {
        System.out.println("Loading data to memory at " + position + ": " + data);
    }
}

class HardDrive {
    public String read(long lba, int size) {
        return "OS Boot Sector";
    }
}

 

 

 

⚙️ 파사드 클래스

 

class Computer {
    private CPU cpu;
    private Memory memory;
    private HardDrive hardDrive;

    public Computer() {
        this.cpu = new CPU();
        this.memory = new Memory();
        this.hardDrive = new HardDrive();
    }

    public void startComputer() {
        System.out.println("Starting computer using Facade...");
        cpu.freeze();
        String bootData = hardDrive.read(0, 1024);
        memory.load(0, bootData);
        cpu.jump(0);
        cpu.execute();
    }
}

 

 

 

⚙️ 클라이언트 코드

 

public class FacadePatternDemo {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.startComputer();  // 단순화된 메서드 하나로 컴퓨터를 부팅
    }
}

 

보다시피 Computer 클래스를 사용하는 클라이언트 입장에선 클래스 내부에서 어떤 작업이 일어나는지 알 필요 없이 startComputer() 메서드만 실행하면 전체 시스템을 시작할 수 있게 된다.

 

 

 

🔥 파사스 패턴 단점

 

파사드 패턴은 복잡한 서브 시스템의 인터페이스를 단순화해주지만, 모든 서브 클래스를 파사드 클래스에 몰아넣게 되면 파사드 클래스 자체가 비대해질 수 있다.

 

 

이는 단일 책임 원칙(SRP)을 위반할 수 있고, 파사드 클래스는 외부에 단순한 인터페이스를 제공하는 하나의 책임만을 가져야 하지만, 여러 서브 시스템의 세부 로직까지 처리하게 되면 본래 목적을 벗어나는 것이다.

 

 

결국 이러한 구조는 유지보수를 어렵게 만들 수 있으며, 파사드 클래스의 수정이 다양한 서브 시스템에 영향을 줄 가능성을 높인다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.06.12 - IPv4 vs IPv6  (0) 2025.06.12
[개발 일기] 2025.06.11 - CSMA/CA vs CSMA/CD  (0) 2025.06.11
[개발 일기] 2025.06.09 - 격리 수준  (0) 2025.06.09
[개발 일기] 2025.06.08 - 갑자기 ID가 커진다  (0) 2025.06.08
[개발 일기] 2025.06.07 - 수동으로 만든 객체는 DI을 하지 않아요!  (0) 2025.06.07
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.06.12 - IPv4 vs IPv6
  • [개발 일기] 2025.06.11 - CSMA/CA vs CSMA/CD
  • [개발 일기] 2025.06.09 - 격리 수준
  • [개발 일기] 2025.06.08 - 갑자기 ID가 커진다
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.06.10 - 파사드 패턴
상단으로

티스토리툴바