[컴포넌트 패턴] 회사 조직도
·
문제모음/ChatGPT
문제회사 조직도를 출력하는 프로그램을 만듭니다. 직원을 일반직원(Leaf)과 팀(Composite)으로 나눌 수 있습니다.요구사항Employee 인터페이스를 만들고, Staff(직원)과 Team(팀)을 구현하세요. Team은 여러 직원(또는 하위 팀)을 가질 수 있어야 합니다.showHierarchy() 호출 시 계층 구조로 조직도가 출력되게 하세요.개발팀 김철수 (개발자) 이영희 (개발자) 프론트엔드팀 박민수 (프론트엔드 개발자) 최지현 (프론트엔드 개발자) 접근방법✔ 계층 구조를 표시하기 위한 메서드가 필요 코드public class Main { public static void main(String[] args) { Employee development = new Team("개..
[브리지 패턴] 상품 알림 시스템
·
문제모음/ChatGPT
문제전자상거래 플랫폼에서 상품 알림 시스템을 설계합니다.알림 종류는 이메일, SMS가 있고, 알림 내용은 주문확인, 배송 완료가 있습니다.요구사항브리지 패턴을 활용하여 알림 방식과 알림 내용을 독립적으로 확장합니다.신규 알림 수단과 알림 내용을 쉽게 추가할 수 있도록 구조 설계합니다.클라이언트에서 다양한 알림 방식과 내용을 조합하여 테스트합니다.알림 발송 시 로그 메시지로 확인합니다.이메일로 사용자 A에게 주문 확인 알림을 보냅니다.SMS로 사용자 B에게 배송 완료 알림을 보냅니다. 접근방법✔ 구현 계층은 메일은 전송하는 기능을 가진 알림 종류로 결정 코드public class Main { public static void main(String[] args) { Notification orderEm..
[브리지 패턴] 음악 스트리밍
·
문제모음/ChatGPT
문제음악 스트리밍 앱에서 음악 재생 시스템을 개발합니다.음악 형식은 MP3, FLAC가 있고, 재생 장치는 스피커, 헤드폰이 있습니다.요구사항브리지 패턴을 사용하여 음악 형식과 재생 장치를 독립적으로 확장 가능하게 합니다.각각 조합하여 재생 시 어떤 장치로 어떤 형식의 음악이 재생되는지 출력 확인합니다.헤드폰으로 MP3 음악을 재생합니다. 접근방법✔ 각각 독립적으로 확장이 가능하기 위해서 음악형식과 재상 장치의 조상은 따로 구현✔ 스피커가 실질적으로 동작을 진행하니 구현체로, 음악 형식을 추상적으로 진행 코드public class Main { public static void main(String[] args) { Music mp3 = new MP3(new Headphone()); mp3.play..
[브리지 패턴] 모바일 게임의 무기 공격
·
문제모음/ChatGPT
문제모바일 게임에서 무기 공격 방식을 구현하려고 합니다.무기 종류는 활, 검이 있고, 공격 방식은 일반 공격, 강화 공격이 있습니다.요구사항무기와 공격 방식을 독립적으로 확장 가능하게 구현합니다.Bridge 패턴을 사용하여 Weapon(무기)과 Attack(공격 방식)을 분리합니다.예시 코드에서 각각의 무기와 공격 방식을 조합하여 출력 확인합니다.활로 강력하게 공격합니다.검으로 기본 공격합니다. 접근방법✔ 무기와 공격방식이 독립적이니 각자 상위 클래스는 다르게 해야겠다. 코드public class Main { public static void main(String[] args) { Weapon bow = new Bow(new PowerAttack()); bow.attack(); Weapon sw..
[프록시 패턴] API 호출 시 로깅
·
문제모음/ChatGPT
문제실제 PaymentService는 결제를 처리합니다.실무에서는 누가, 언제, 어떤 금액을 결제했는지 로깅해야 합니다. 이를 PaymentProxy로 구현하세요.요구사항PaymentService는 pay(String user, int amount) 메서드 실행 시 "결제 완료: user - amount원" 출력합니다.PaymentProxy는 실행 전에 "로그: user가 amount원 결제를 요청했습니다."를 출력한 뒤 실제 결제를 호출합니다.로그: Alice가 10000원 결제를 요청했습니다.결제 완료: Alice - 10000원 접근방법접근방법에 대한 내 생각 작성 코드public class Main { public static void main(String[] args) { Payment p..
[데코레이터 패턴] 쇼핑몰 결제 시스템
·
문제모음/ChatGPT
문제온라인 쇼핑몰의 결제 시스템을 설계하려고 합니다.기본 결제는 CreditCardPayment이고, 여기에 다음 기능을 추가하려고 합니다.1. 환율 변환(다른 통화로 결제 금액 반환)2. 할인 쿠폰 적용3. 포인트 적립4. 보안 검증 이때, 상황에 따라 다르게 조합될 수 있어야 합니다.해외 결제 시 : 환율 반환 + 보안 검증 + 카드 결제프로모션 결제 시: 할인 쿠폰 + 포인트 적립 + 카드 결제요구사항Payment 인터페이스 (pay(double amount) 메서드 포함).CreditCardPayment 클래스는 기본 결제 처리.CurrencyDecorator, DiscountDecorator, PointDecorator, SecurityDecorator 클래스를 데코레이터로 구현다양한 결제 흐름..
[데코레이터 패턴] 웹 페이지 렌더링
·
문제모음/ChatGPT
문제웹 페이지에 기본 HTML 콘텐츠를 출력하는 클래스를 만들고, 여기에 광고 배너, 스크롤바, 다크모드 기능을 데코레이터 패턴으로 추가할 수 있게 설계해야 합니다.요구사항Page 인터페이스를 만든다 (render() 메서드 포함).BasicPage 클래스는 "기본 페이지 내용 출력"을 한다.AdBanner, ScrollBar, DarkMode 를 데코레이터로 만든다.여러 데코레이터를 조합해 결과가 출력되도록 하라.렌더링: 기본 페이지 내용 + 광고 배너 + 스크롤바 코드public class Main { public static void main(String[] args) { Page page = new BasicPage(); page = new AdBanner(page); page = new ..
[어댑터 패턴] 로그 시스템 통합
·
문제모음/ChatGPT
문제현재 서비스에는 서로 다른 세 가지 로그 시스템이 존재한다.ConsoleLogger : logMessage(String)FileLogger : writeLog(String fileName, String msg)JsonLogger : logJson(Map data)운영팀은 모든 로그 시스템을 통합해 Logger 인터페이스(log(String message)) 만 사용하도록 요구했다.요구사항Logger 인터페이스 정의 (log(String message))세 가지 Logger 각각을 어댑터로 감싸 통합한다 - ConsoleLoggerAdapter : 바로 메시지 출력 - FileLoggerAdapter : 고정된 파일 "app.log"에 로그 출력 - JsonLoggerAdapter : {"log": m..
[어댑터 패턴] 결제 시스템 통합
·
문제모음/ChatGPT
문제프로젝트에서 여러 결제 모듈을 지원해야 합니다.현재 시스템은 PaymentGateway 인터페이스를 사용하며, pay(int amountInWon)만 호출하도록 설계돼 있습니다.KakaoPayAPI : sendPayment(int amount) 사용PayPalAPI : makePayment(double amount, String currency) 사용요구사항PaymentGateway 인터페이스 정의 (pay(int amountInWon))KakaoPayAdapter 작성 (KakaoPayAPI → PaymentGateway)PayPalAdapter 작성 (PayPalAPI → PaymentGateway)원화(WON)을 달러(USD)로 변환해야 합니다. (예: 1 USD = 1300 WON) main에..
[어댑터 패턴] 서로 다른 API 통합
·
문제모음/ChatGPT
문제외부에서 제공받은 API에서 온도 데이터를 가져오는 두 가지 방식이 있습니다.현재 프로젝트는 섭씨 단위만 쓰도록 통일되어 있습니다.CelsiusSensor: getCelsius() 메서드로 섭씨 반환FahrenheitSensor: getFahrenheit() 메서드로 화씨 반환요구사항Temperature 인터페이스를 정의 (getCelsiusTemperature() 메서드)CelsiusSensor는 바로 호환되지만, FahrenheitSensor는 Adapter를 구현해야 합니다.어댑터를 통해 FahrenheitSensor의 값을 섭씨로 변환합니다.main에서 두 센서를 모두 호출하고 출력합니다. CelsiusSensor: 25.0 °CFahrenheitSensor: 26.67 °C 접근방법✔ Ce..