개발자 기술면접 꼬리물기 질문
  • Welcome
  • 01 Java
    • 01-01. Generic
    • Garbage Collection
    • 자료형과 객체 비교
    • 힙(Heap)과 메모리(Memory)
    • JDK 버전과 JRE
    • 스레드(Thread)
    • 예외(Throwable)
    • Call By Value와 Call By Reference
    • String, equals, StringBuffer
    • Thread와 비동기
  • 02 Spring
    • 02-01. Spring 동작 방식
    • @Autowired, @RequiredArgsConstructor
    • 인증(Authentication)과 인가(Authorization)
    • 트랜잭션(Transaction)
    • QueryDSL과 SQL Injection
    • SecurityContextHolder
    • @EqualsAndHashCode
  • 알고리즘과 자료구조
    • Set 자료구조
    • 정렬 알고리즘
    • 우선순위 큐 (Priority Queue)
    • DFS와 BFS
    • 힙(Heap) 자료구조
    • 스택(Stack)과 큐(Queue)
    • 암호화 알고리즘
    • LinkedList
    • 자료구조 - 해시 테이블(HashTable)
    • 자료구조 - ConcurrentHashMap
  • 데이터베이스
    • 기본
    • 인덱스 (Index)
    • 정규화 (Normalization)
    • 파티셔닝과 샤딩(Partitioning & Sharding)
    • 트랜잭션(Transaction)과 락(Lock)
    • 덤프(Dump)
    • Redis
    • 격리 수준(MySQL)
  • 네트워크
    • 전송 계층 (Transport Layer)
    • 네트워크 계층 (Network Layer)
    • Http와 Https
    • IP(Internet Protocol)
    • 프록시 서버
    • Http Protocol
    • 소켓(Socket)
    • 로드 밸런싱(Load Balancing)
  • 디자인 패턴
    • 전략 패턴 (Strategy Pattern)
    • 싱글톤 패턴 (Singleton Pattern)
    • 템플릿 메서드 패턴과 전략 패턴
    • 데코레이터 패턴 (Decorator pattern)
  • 웹
    • CORS 정책
    • 동시성 제어
    • N+1 문제
    • 웹 브라우저 동작원리
    • URI, URL, URN
    • 채팅 아키텍처 설계
  • 개발자
    • 개발 방법론 TDD
  • 운영체제
    • JIT & AOT 컴파일
    • 컨텍스트 스위칭(Context Switching)
    • 프로세스와 스레드
    • 싱글 스레드와 멀티 스레드
  • 코딩테스트
    • Stack / Queue (스택 / 큐)
    • Heap(우선 순위 큐)
    • DP(동적 계획법)
    • DFS(깊이 우선 탐색)
    • BFS(너비 우선 탐색)
    • Greedy(그리디 알고리즘)
    • 해시(Hash)
    • 투 포인터 알고리즘
    • Shortest path
    • 수학적 사고
Powered by GitBook
On this page
  • Q. 데코레이터 패턴(Decorator Pattern)에 대해 설명해주세요.
  • Q. 그렇다면 데코레이터 패턴을 사용했을 때 단점은 없나요?
  • Q. 데코레이터 패턴과 프록시 패턴(Proxy Pattern)은 유사해 보이는데, 두 패턴의 차이점은 무엇인가요?
  • Q. 말씀하신 프록시 패턴의 대표적인 사용 사례 중 하나인 지연 로딩에 대해 설명해주시겠어요?
  1. 디자인 패턴

데코레이터 패턴 (Decorator pattern)

Q. 데코레이터 패턴(Decorator Pattern)에 대해 설명해주세요.

데코레이터 패턴은 GoF 디자인 패턴 중 하나로, 객체의 기능을 확장하는 방법입니다. 이 패턴은 상속을 사용하는 대신, 객체를 감싸는 방식으로 추가 기능을 구현합니다. 즉, 기존 코드를 수정하지 않고도 새로운 기능을 동적으로 추가하거나 변경할 수 있게 해줍니다.

예를 들어, 도로의 교통량을 표시하는 클래스가 있고, 여기에 차선 표시 기능을 추가한다고 가정해봅시다. 상속을 사용하면 차선을 표시하는 클래스 외에도 다른 기능들을 추가하는 여러 파생 클래스를 만들어야 할 수 있습니다. 하지만 데코레이터 패턴을 사용하면, 객체를 감싸는 방식으로 쉽게 새로운 기능을 추가할 수 있습니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다.


Q. 그렇다면 데코레이터 패턴을 사용했을 때 단점은 없나요?

물론 데코레이터 패턴에도 단점이 있습니다. 작은 객체들이 많이 생성될 수 있으며, 여러 데코레이터가 겹겹이 쌓이면 시스템이 복잡해질 수 있습니다. 특히 디버깅이나 유지보수가 어려워질 수 있습니다. 데코레이터 패턴을 사용할 때는 객체가 어떻게 감싸졌는지, 어느 데코레이터가 실제로 어떤 기능을 추가하고 있는지를 파악하기가 복잡해질 수 있기 때문입니다. 이는 코드의 가독성 저하와 관리의 어려움을 초래할 수 있습니다.


Q. 데코레이터 패턴과 프록시 패턴(Proxy Pattern)은 유사해 보이는데, 두 패턴의 차이점은 무엇인가요?

데코레이터 패턴과 프록시 패턴은 구조적으로 비슷하지만, 목적과 용도가 다릅니다.

  • 데코레이터 패턴은 객체의 기능을 확장하거나 수정하는 데 중점을 둡니다. 객체의 행동을 동적으로 추가하거나 변경하는 데 사용됩니다. 예를 들어, GUI 컴포넌트에 스크롤바나 테두리를 추가하는 경우 데코레이터 패턴을 사용합니다.

  • 프록시 패턴은 객체에 대한 접근을 제어하거나 대리 역할을 수행합니다. 실제 객체를 대신해 접근을 제어하거나 지연 로딩(Lazy Loading) 등 리소스 최적화를 위해 사용됩니다. 예를 들어, 데이터베이스 접근을 프록시 객체가 중간에서 가로채어 필요할 때만 데이터를 불러오는 방식으로 사용할 수 있습니다.

따라서 데코레이터는 기능 확장, 프록시는 접근 제어에 초점이 있습니다.


Q. 말씀하신 프록시 패턴의 대표적인 사용 사례 중 하나인 지연 로딩에 대해 설명해주시겠어요?

프록시 패턴은 지연 로딩(Lazy Loading)에 자주 사용됩니다. 예를 들어, 데이터베이스에서 대량의 데이터를 불러오는 경우, 모든 데이터를 한 번에 불러오는 대신, 실제로 필요한 시점에서만 데이터를 불러오는 방식이 있습니다. 프록시 객체가 이를 관리해, 불필요한 데이터 로딩을 방지함으로써 시스템의 성능을 최적화할 수 있습니다. 이를 통해 리소스를 절약하고, 애플리케이션의 응답성을 개선할 수 있습니다. 이러한 지연 로딩은 Spring 라이브러리 중 하나인 JPA에서 많이 활용됩니다.

Previous템플릿 메서드 패턴과 전략 패턴NextCORS 정책

Last updated 8 months ago