분류 전체보기(361)
-
4. Abstract Factory Method
문제 프랜차이즈를 운영하는 피자 가게가 있다. 그동안 본점에서는 분점에 지침을 내려주지 않았다. 그래서 각 분점에서는 마음대로 더 싼 원재료를 사용해서 품질이 떨어지는 피자를 만들어서 팔았다. 이는 브랜드에 타격이 올 수도 있기 때문에 조치를 취해야 한다. 원재료 품질 관리 방법 서울 피자 메뉴 치즈 피자 - 토마토 소스, 모짜렐라 치즈, 파마산 치즈 야채 피자 - 토마토 소스, 모짜렐라 치즈, 파마산 치즈, 시금치, 올리브 조개 피자 - 토마토 소스, 모짜렐라 치즈, 파마산 치즈, 조개 페퍼로니 피자 - 토마토 소스, 모짜렐라 치즈, 파마산 치즈, 시금치, 올리브, 페퍼로니 부산 피자 메뉴 치즈 피자 - 마리나라 소스, 레지아노 치즈, 마늘 야채 피자 - 미라나라 소스, 레지아노 치즈, 버섯, 양파, ..
2021.09.15 -
3. Factory & Factory Method Pattern
문제 우리 동네에는 피자집이 하나 있다. 이 피자집에서는 예전부터 한 가지 피자만 만들어서 팔았다. 그러나 손님들이 다른 메뉴도 만들어달라는 요청이 들어왔고 이에 따라 신메뉴를 만들어서 제공했다. // 기존 방식 public class PizzaStore { Pizza orderPizza() { Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } } // 새로운 방식 public class PizzaStore { Pizza orderPizza(String type) { Pizza pizza; // 피자 타입에 따라 인스턴스 생성 if (type.equals("cheese")) {..
2021.09.15 -
2. Decorator Pattern
문제 커피 주문 시스템에서 각 커피에 대한 첨가물이 추가해달라는 요구사항이 들어왔다. 이를 해결해보자. 상속 위처럼 상속을 이용해서 설계를 하면 첨가물과 커피가 늘어날 때마다 클래스를 만들어서 상속해야 한다. 이는 엄청난 복잡도를 유발하게 될 것이다. 인스턴스 변수와 슈퍼 클래스 상속 이렇게 하면 어떨까? 이 역시 문제가 많다. 첨가물 가격이 바뀔 때마다 기존 코드를 수정해야 한다. 첨가물 종류가 늘어날 경우 그에 따른 메서드를 추가해야 한다(ex.시럽). 첨가물이 들어가지 않는 음료의 경우에도 불필요한 메서드를 상속받는다(ex.아이스티). 중복된 첨가물에 대한 표현이 불가능하다(ex.더블 모카). 해결 방법 객체에 추가적인 조건을 동적으로 추가해야 하는 문제는 데코레이터 패턴을 통해 해결할 수 있다. ..
2021.09.06 -
1. Observer Pattern
문제 인터넷 기반 기상정보스테이션을 구축해달라는 요청이 들어왔다. 현재의 기상 조건(기온, 습도, 기압)을 화면에 표시하는 기능의 프로그램이다. 그래서 우리 팀은 다음과 같이 데이터를 관리하는 클래스를 작성했다. public class WeatherData { public void measurementsChanged() { float temp = getTemperature(); float humidity = getHumidity(); float pressure = getPressure(); currentConditionsDisplay.update(temp, humidity, pressure); statisticsDisplay.update(temp, humidity, pressure); forecastDi..
2021.09.06 -
[Baekjoon] 1339번: 단어 수학
1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 이 문제는 문자의 합이 최대일 경우를 계산하는 그리디 알고리즘 문제였습니다. 저는 이 문제를 다음과 같이 분석했습니다. 각 문자에 해당하는 자릿수(예제 2의 경우 G = 100, C = 10, F = 1)의 값을 int[26]의 알파벳 배열에 저장한다 저장된 배열을 크기순으로 정렬한다 9부터 0까지 내려가며 정렬된 배열의 값과 곱한 값들을 더한 뒤 결과를 출력한다 예제 2를 활용하여 예를 들어보겠습니다. 두 문자열 GCF, ACDEB 가 있습니다. 먼저 G..
2021.07.10 -
[Servlet] 서블릿이란?
1. 서블릿 서블릿(Servlet)은 자바 코드를 통하여 동적인 웹 어플리케이션을 개발할 수 있게 해주는 프로그램입니다. 서블릿 이전의 웹 사이트는 정적인 정보만을 제공하는 경우가 대부분이었습니다. 이를 개선하여 사용자에게 인터렉티브한 정보를 제공해주기 위해 서블릿이 개발되었습니다. 서블릿은 자바로 작성되었기 때문에 자바와 같은 특징을 가집니다. 서블릿은 다른 자바 프로그램과 다르게 독자적으로 실행할 수 없습니다. 서블릿을 실행하기 위해서는 컨테이너(Container)를 함께 사용해야 합니다. 여기서 말하는 컨테이너란 서블릿을 구동시키기 위한 프로그램을 말합니다. 대표적으로 Apache 재단에서 만든 오픈소스 프로그램인 톰캣(Tomcat)이 있습니다. 사용자의 요청에 따른 흐름은 다음과 같습니다. 사용자..
2021.07.10