반응형 Design Pattern11 디자인 패턴 - Template Method pattern Template Method pattern : 객체가 실행해야 하는 알고리즘 기본 골격을 추상(부모)클래스에 구현해 놓은 후 서브클래스에서 메소드를 override하여 객체가 수행해야 할 행위의 다양성을 표현하는 방법. ==> 객체지향 프로그래밍 시에 생활화해야 되는 코딩 스타일 / 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴. / 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 함. - 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화할때 유용함. - 동.. 2022. 4. 12. 디자인 패턴 - Iterator pattern Iterator pattern은 collection 객체의 element들을 traverse하기 위한 기능을 collection 객체와 독립적으로 구현하는 방법. (=객체 지향 프로그래밍에서 iterator를 사용하여 container를 가로지르며 요소들에 접근하는 패턴.) 컬렉션 객체 - 배열, ArrayList, Stack, LinkedList, HashMap등 라이브러리에 있는 Iterator 객체를 구현하는 예제 특징 : Iterator 패턴은 container로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 container에 특화되어 있기 때문에 분리가 불가능하다함. / 유연하고 재사용 가능한 객체지향 소프트웨어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법. Itera.. 2022. 4. 12. 디자인 패턴 - Facade pattern Facade pattern : facade(건물의 정면) / 특정 서브 시스템에 소속된 여러개의 객체를 액세스하기 위한 통합된 접근 경로를 제공하는 방법. adapter pattern과 facade 이 두개의 패턴은 이질적인 시스템을 연결하는 효과를 제공함. Facade pattern은 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체. / facade는 소프트웨어 라이브러리를 쉽게 사용할 수 있게 해줌(공통적인 작업에 대해 간편한 메소드들을 제공해줌). / facade는 라이브러리 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소시켜줌. 대부분의 바깥쪽의 코드가 facade를 이용하기 때문에 시스템을 개발하는데 있어 유연성이 향상됨. .. 2022. 4. 12. 디자인 패턴 - adapter pattern 어댑터 패턴 : 특정 객체의 기능에 어댑터를 wrapping 함으로써 그 객체의 기능을 변경시키는 방법 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 인터페이스로 변환. 어댑터를 사용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. -> 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. + 클라이언트와 구현된 인터페이스를 분리시킬수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화 되기 때문에 클라이언트는 바뀔 필요가 없어짐. 어댑터는 5핀 usb 끝에 달린 c-type 어댑터나 외국 전기 콘센트에 끼우기 위한 220v 플러그에 달린 110v 어댑터 느낌. 기존 시스템 > ) 업체에서 제공한 클래스 └> 기존 시스템 .. 2022. 4. 10. 디자인 패턴 - 커멘드 패턴 커멘드 패턴은 간단하게 말하면 호출 캡슐화 - 함수 호출을(명령, 메시지) 캡슐화 한 후에 대리자(invoker)를 통해서 간접적으로 명령을 실행시키는 방법. 재사용성이 높은 클래스를 설계하는 패턴. -이벤트가 발생했을때 실행될 기능이 다양하면서도 변경이 필요할 수 있을때 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할때 유용함. (갈아끼우기쉬움 if문 없애기) -실행할 함수의 캡슐화로 Invoker 클래스와 Receiver 클래스 사이의 의존성을 제거함. => 실행될 기능의 변경에도 Invoker 클래스의 수정 없이 그대로 사용 가능. command 객체의 본질 : [receiver reference, method reference, argument reference]의 조합. Java의 r.. 2022. 4. 8. 이전 1 2 다음 반응형