head first design patterns(3)
-
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