It is design pattern for java.
- chap1. Iterator pattern
예시로 Arts, Science과목을 사용한다. Arts는 LinkedList를 사용하나, Science는 Array를 사용한다.
다른 집합체를 사용하지만 모든 항목에 접근하는 방식이 통일되어 있으며 어떤 종류의 집합체에 대해서도 사용할 수 있게 된다.
이 패턴의 장점은 하나를 수정할 때 수정해야 할 부분이 적다. 즉, 변경의 최소화이다.
- chap2. Adapter pattern
예시로 사각형의 넓이를 구해주는 메소드가 있다. 하지만 삼각형의 넓이를 구하길 원하여 이 패턴을 사용했다.
이와 같이 기존의 있던 것이 내가 원하는 것과 맞지 않을 경우 내가 원하는 기능으로 바꿔주는 역할을 한다.
이 패턴의 장점은 관계가 없는 인터페이스 간 같이 사용이 가능하며, 프로그램 검사에 용이하고 클래스의 재활용성이 증가한다.
- chap3. Template Method pattern
예시로 모든 학과의 학생들이 동일한 수업을 들어야하는것도 있지만 각 학과별로 다른 과목도 존재한다. 이 때 같은 과목들은 하나의 클래스로 구현하고 다른 과목은 이 클래스의 추상메소드를 구체화하면서 구현하도록 한다.
전체적으로 동일하면서 부분적으로는 다른 구문으로 구성된 메소드의 코드 중복을 최소화할 때 유용.
또한 공통으로 사용되는 코드를 한곳에 집중함으로써 로직을 공통화 할 수 있다.
- chap4. Factory pattern
예시로 동물의 울음소리를 출력하려고 한다. 그 중 Duck, Tiger는 등록이 되어있으나 Lion은 등록이 되어있지 않다. 그때 새로운 동물을 출력하고자 할때, 이 패턴을 사용한다.
이 패턴은 new키워드를 호출하는 부분을 서브 클래스에게 위임하여 사용한다. 이를 사용함으로써 객체 생성을 캡슐화 할 수 있다..
바뀔수 있는 부분과 바뀌지 않는 부분을 분리시킴으로써 수정이 용이하다.
- chap5. Singleton pattern
팀의 주장은 한명이고 주장이 꼭 있어야한다는 것을 예시로 들었다. 팀장을 뽑는 과정을 Singleton패턴을 사용했다.
인스턴스는 하나만 생성이 가능하므로, 두개의 인스턴스를 생성해서 같은 주소값을 갖는지 확인한다.
이는 제한된 자원에서 하나의 자우너으로 모두가 공유해서 사용해야하는 경우에 유용하다.
하지만 너무 많이 사용할 경우 결합도가 높아지게 되고, 이를 통해 '개방-폐쇄'원칙을 위배하게 된다. 이 때문에 수정과 테스트가 어려워지게될 수 있다.
- chap6. Prototype pattern
자동차에 맞는 가격을 측정하고, 그 가격과 차의 이름을 추쳘해주는 것을 예시로 들었다. 차가 들어오면 차에 대한 객체를 복제하는데 Protortype패턴을 사용했다.
이 패턴은 새로 만들 인스턴스가 기존의 인스턴스와 같은 형태를 보일 때 사용한다. 만약 이 패턴을 사용하지 않고 복제하려면 인스턴스 생성후, 모든 필드 값을 복제해야하는 번거로움이 존재한다. 생성될 인스턴스들의 자료형인 클래스들이 모두 clone 메서드를 구현해야 한다는 단점이 존재한다.
- chap7. Builder pattern
car, motorcycle을 만들어서 그에 해당하는 부품을 추가하는 것을 예시로 들었다.. car와 motorcyle을 생성하는데 Builder 패턴을 사용했다.
이 패턴은 객체를 표현하는 방법과 생성하는 방법을 분리하며, 인스턴스를 생성할 때 생성자만을 통해서 생성하기 어려울 때 이 패턴을 사용한다. 또한 이 패턴을 사용하면 가독성이 뛰어나며 표현과 구성 부분을 분리함으로써 서로간의 독립성이 생긴다. 하지만 객체 생성을 추가하는 것은 쉬우나 객체를 구성하는 각 부분들을 새롭게 추가하는 것은 어렵다.