커맨드 패턴
·
디자인패턴
🎯 커맨드 패턴이란 무엇일까??요청을 객체의 형태로 캡슐화하여 매개변수화하는 행동 디자인 패턴수행할 동작을 객체 안에 캡슐화해 요청자(호출자)와 수신자(실행자) 사이를 분리합니다.어떤 작업 => 객체가 되는거고 필요에 따라 객체에게 전달.📺 리모콘 예시로 이해하기버튼 → 누르기 → 명령 → TV (On/Off)버튼은 TV에 대해 아무것도 모름 (삼성TV인지, LG TV인지)연결된 명령을 통해 TV를 제어요청자와 수신자가 완전히 분리🔧 해결하는 문제들1. 코드 결합도 감소요청자와 수신자 간의 직접 연결 제거2. 작업의 지연 및 예약 실행명령을 즉시 실행하지 않고 저장했다가 나중에 실행3. 작업 취소 기능이전 상태를 저장하여 실행 취소 기능을 쉽게 구현4. 작업 로깅모든 변경사항을 추적하고 필요시 재실..
데코레이터패턴
·
디자인패턴
데코레이터 패턴이 뭔가요?간단히 말하면 기존 객체를 수정하지 않고 새로운 기능을 추가하는 방법입니다.스타벅스에서 커피를 주문한다고 생각해보세요. 기본 아메리카노에 샷 추가, 휘핑크림 추가, 시럽 추가... 이런 식으로 원하는 옵션을 계속 덧붙일 수 있죠. 데코레이터 패턴이 바로 이런 개념입니다.왜 좋은가요?상속의 한계를 극복할 수 있어요. 상속으로 모든 조합을 만들려면 클래스가 엄청 많아집니다:라떼 클래스휘핑라떼 클래스바닐라휘핑라떼 클래스샷추가바닐라휘핑라떄 클래스...이건 너무 비효율적이죠. 데코레이터 패턴을 쓰면 런타임에 필요한 기능만 조합할 수 있습니다핵심 특징:기존 객체를 수정하지 않고 새로운 기능 추가런타임에 동적으로 데코레이션 적용/제거여러 데코레이터를 체인 형태로 연결 가능단일 책임 원칙(SR..
파사드 패턴(Facade Pattern)
·
디자인패턴
: 구조적 디자인 패턴 중 하나로, 복잡한 라이브러리, 프레임워크 또는 서브시스템을 간단한 인터페이스로 감싸주는 역할을 한다.이로써 클라이언트가 시스템의 복잡성을 이해하지 않고도 필요한 기능을 쉽게 사용할 수 있게 해준다.파사드? 프랑스어로 건물의 정면이라는 듯. 실제 건물에서 정면은 내부의 복잡한 구조를 가리고 단순한 외관만을 보여주는것처럼 소프트웨어에서도 복잡한 내부 구조를숨기고 단순한 인터페이스만 외부에 노출시키겟다~ ex) 무신사 옷 CS주문 넣는다고 하자. 상담원이 파사드 역할이다. 상담원이 매장의 시스템에 맞춰 해당하는 대응을 해주고 우리는 그냥 전화하는것만으로도 충분하다. 핵심 목적:클라이언트가 서브시스템의 복잡한 내부 구조를 알 필요 없이 필요한 기능을 간편하게 사용.서브시스템과 클라이언트..
팩토리 패턴
·
디자인패턴
객체 생성을 캡슐화하는 생성 패턴중 하나이다. 객체를 직접 생성하는 대신, 팩토리라는 중간 객체를 통해 생성한다. 이렇게 되면 코드의 유연성이 높아지고, 객체 생성 로직을 한 곳에서 관리할 수 있어 유지보수가 쉬워진다. 팩토리 메서드 패턴언제쓰지?1. 단일 제품의 다양한 변형을 생성할 때2 어떻게 하나의 객체를 생성할 것인가에 초점을 맞춘다.ex) iOS 앱에서 배송 관리 앱을 만든다고 가정해봅시다. 처음에는 트럭(Truck)만 지원했기 때문에 모든 코드가 Truck클래스에 의존적입니다. 그런데 갑자기 배송 업체에서 "배(Ship)"도 지원해달라는 요청이 들어왔습니다.기존 코드: let transport = Truck()처럼 직접 생성.문제: Ship을 추가하려면 클라이언트 코드 전체를 수정해야 하고, ..
Adaptor Pattern (구조적 디자인패턴)
·
디자인패턴
요즘 디자인 패턴에 관한 개발 책을 읽고 있다. 취준 하며.. 그래서 이제 차차 인상 깊고 적용할만한 패턴을 정리할 계획이다. 우선 오늘은 어댑터 패턴이다.Adaptor Pattern이란?서로 다른 인터페이스를 가진 두 시스템을 연결하는 구조적 디자인 패턴입니다.기존 클래스의 코드를 수정하지 않고도 새로운 인터페이스 맞춰 사용할 수 있도록 중간에서 "어댑터"역할을 하는 객체를 제공하는 것!왜 어뎁터냐면 일본에 가면 한국에서 사용하는 콘센트와 달라서 꽂을 수 없다. 이때 사용하는게 어댑터이다. 비슷한 개념입니당ㅎ등장배경- 호환성 문제: 서로 다른 인터페이스를 가진 모듈이 협력해야 하는 상황이 많다. 기존 레거시 코드와 새로운 시스템 통합하거나 서로 다른 라이브러리 함께 사용할때 인터페이스가 맞지 않는 경우..