Computer Sciences(236)
-
8. Facade Pattern
문제 요즘 혼자 사는 사람들이 참 많아졌다. 사회적으로 불안한 요소가 많아져서 그런 듯 싶다. 나는 나중에 자취를 하게 되면 소원이 하나 있다. 바로 빔 프로젝터를 사서 집을 영화관처럼 만드는 것이다. 이를 외국에서는 홈 씨어터(Home Theater)라고 부른다. 이를 위해 여러 장비를 알아본 결과 다음과 같았다. 앰프 튜너 CD 플레이어 DVD 플레이어 프로젝터 스크린 팝콘기계 영화조명 이것들을 조합하여 세팅하는 것도 복잡하다. 아래는 이 장비들을 연결시킨 클래스 다이어그램이다. 보기만 해도 어지럽다. 이대로 영화를 보기 위해 순서대로 알고리즘을 짠다면 다음과 같을 것이다. 팝콘 기계를 켠다. 팝콘을 튀기기 시작한다. 전등을 어둡게 조절한다. 스크린을 내린다. 프로젝터를 켠다. 프로젝터로 DVD 신호..
2021.10.14 -
7. Adapter Pattern
문제 어댑터는 우리 주위에서 흔하게 볼수 있는 것이다. 110V를 220V로 변환해야 하는 경우가 대표적이다. 우리나라는 220V를 쓰는데 유럽 같은 경우 110V를 쓴다. 그래서 우리가 만약 외국 여행을 가는데 충전기를 사용하려면 어댑터를 갖고 가서 110V를 220V로 바꿔줘야 한다. 프로그래밍에서도 이런 경우가 발생한다. 우리가 운영하던 시스템이 있는데 외부 업체에서 인터페이스를 제공해주었다. 그런데 우리 시스템과 연결이 되지 않는 경우 어떻게 해야 할까? 여기서 어댑터를 사용할 수 있다. 오리와 칠면조 우리는 오리와 칠면조 객체를 가지고 있다. public class MallardDuck implements Duck { @Override public void quack() { System.out...
2021.10.14 -
6. Command Pattern
문제 지수는 친구로부터 특별한 선물을 받았다. 그건 리모컨인데 내가 명령을 입력하면 이를 동작 시켜주는 특별한 리모컨이다. 그래서 집에서 사용하는 여러 가전제품을 사용하려고 명령을 등록하려고 하는데 문제가 생겼다. 각각의 가전제품에서 명령을 실행하는 방법이 달랐던 것이다. 전등은 켜고 끌 때 on(), off()로 수행되고 선풍기는 high(), medium(), low(), off()와 같이 단계 별로 바람 세기를 조절할 수 있게 되어있다. 그 외에 TV, 냉장고 등 많은 가전제품이 서로 다르게 구현되어 있다. 이 문제를 어떻게 해결해야 할까? 해결 방안 여러 객체의 행위를 통일하고 싶을 때 우리는 인터페이스를 사용했다. 이번에도 인터페이스를 만들어야 겠다. 그렇다면 어떻게 만들까? 일단 리모컨에서는 ..
2021.10.14 -
5. Singleton Pattern
싱글톤 패턴 해당 클래스의 인스턴스를 단 하나만 만들고 해당 인스턴스를 필요로 하는 객체들이 공유하여 사용하도록 하는 패턴이다. public class SingletonObj { // static 멤버로 해당 클래스를 만들어놓았다. private static SingletonObj singletonObj; // other fields... // 생성자를 private으로 만들어 인스턴스를 생성하지 못하게 막았다. private SingletonObj() {} // 이 메서드를 통해 이 클래스의 인스턴스에 접근하도록 한다. public static SingletonObj getInstance() { if (singletonObj == null) { singletonObj = new SingletonObj(..
2021.09.15 -
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