본문 바로가기

OOP/<헤드 퍼스트 디자인 패턴>, 에릭 프리먼 외16

헤드 퍼스트 디자인 패턴 서평 놀러와요 깃헙 https://github.com/Mingadinga/2023-Design-Pattern GitHub - Mingadinga/2023-Design-Pattern: . Contribute to Mingadinga/2023-Design-Pattern development by creating an account on GitHub. github.com 드디어 헤드 퍼스트 디자인 패턴을 다 읽었다~! 원래 여행 출발 전까지(1월 중순) 다 읽는게 목표였는데 계절학기에 여행 준비가 겹쳐 2월 중순에 끝냈다😅 대신 신나게 놀고 돈 쓰고 면허도 땄다. 번아웃을 완전 극복한 갓생걸이다. 생각보다 별거인 헤드 퍼스트 책을 읽기 전에는 헤드 퍼스트니까 가벼운 마음으로 읽어야겠다는 마음으로 시작했다. 표현 방.. 2023. 2. 28.
MVC (아키텍처 패턴) 핵심 의도 모델-뷰-컨트롤러는 사용자에게 화면을 통해 입력을 받아 애플리케이션의 기능을 실행하는 프로그램에 적용할 수 있는 패턴이다. MVC는 옵저버, 전략, 컴포지트 패턴으로 이루어진 복합 패턴이다. 복합 패턴을 통해 서로 느슨하게 결합되므로 깔끔하면서 유연하고 재사용 가능한 구현이 가능하다. 적용 상황 클라이언트에게 화면을 보여주고 뒷단에서 처리하는 대부분의 프로그램에 적용 가능하다. 웹, 특히 클라이언트-서버 애플리케이션 구조에 MVC를 적응시켜주는 다양한 웹 MVC 프레임워크가 있다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 사용자에게 화면을 보여주고 명령을 받아 실행하는 애플리케이션의 책임을 나열해보자. 우선 사용자에게 화면을 만들어 보여주는 책임(뷰), 애플리케이션 기능을 구현.. 2023. 2. 24.
Proxy 핵심 의도 특정 객체로의 접근을 제어하는 대리인을 제공한다. 클라이언트가 실제 객체의 메소드를 호출하면 그 호출을 중간에 가로챈다. 적용 상황 사용되는 상황이 많은데, 공통점은 클라이언트가 진짜 객체에 직접 메시지 요청을 보내지 않도록 한다는 점이다. 진짜 객체에 바로 메시지가 가기 전에 접근을 제어해야 할 때 사용한다. 원격 프록시 - 원격 객체로의 접근을 제어한다. 서로 다른 JVM에 존재하는 객체는 직접 데이터를 주고받을 수 없으므로 프록시 객체를 통해 접근을 제어한다. 원격 프록시는 접근을 제어해 네트워크 관련 사항을 처리한다. 가상 프록시 - 생성하는데 많은 비용이 드는 객체를 대신한다. 진짜 객체가 필요한 상황이 오기 전까지 객체의 생성을 미루거나 객체를 대신한다. 객체 생성이 끝나면 진짜 객.. 2023. 2. 24.
State 핵심 의도 상태 패턴을 사용하면 내부 상태가 바뀜에 따라 객체의 행동을 바꿀 수 있다. 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 적용 상황 상태 다이어그램을 구현할 때 사용할 수 있다. 특히 상태에 따라 행동이 바뀌는 경우에 적합하다. 상태를 캡슐화하지 않고 그대로 조건문으로 행동을 처리하면 수많은 조건문으로 인해 가독성이 떨어지고 관리가 어려워진다. 상태 패턴은 상태와 함께 관련된 행동을 캡슐화하므로, 상태 변경을 통해 행동을 변경할 수 있다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 상태 다이어그램을 생각해보면, 각각의 상태를 나타내는 책임과 상태를 가지고 관리하고 변경하는 책임이 필요하다. 상태는 여러개 존재하므로 State라는 공통 인터페이스를 따르게 하고, 상태를.. 2023. 2. 24.
Composite 핵심 의도 클라이언트에서 개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있다. 개별 객체와 복합 객체는 서로 포함 관계인데, 객체를 트리구조로 구성해서 부분-전체 계층 구조를 구현한다. 적용 상황 계층 구조가 있는 자료구조의 아이템에 대해 공통된 인터페이스로 접근할 때 사용한다. 컴포지트 패턴을 사용하면 클라이언트에게는 계층 구조가 보이지 않기 때문에 클라이언트의 사용 코드가 매우 단순해진다는 장점이 있다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 개별 객체(leaf)와 복합 객체(composite)가 존재하는 상황. 클라이언트는 개별 객체와 복합 객체를 동일한 방법으로 사용하고자 하므로 개별 객체와 복합 객체를 공통으로 묶는 인터페이스인 Component를 둔다. Component는.. 2023. 2. 24.
Iterator 핵심 의도 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 집합체를 사용하는 클라이언트는 집합체의 저장 방식을 몰라도 반복 작업을 할 수 있고, 집합체 역시 구체적인 저장방식을 공개하지 않아도 되므로 더 유연하고 다형적인 코드를 작성할 수 있다. 적용 상황 서로 다른 타입의 컬렉션에 대해 동일한 인터페이스로 모든 항목에 접근하고 싶을 때 사용한다. 예를 들어 배열이나 ArrayList를 가진 객체를 인터페이스로 한번 감싸서 동일한 인터페이스로 모든 항목에 접근할 수 있다. 자바에서 제공하는 Iterator 인터페이스를 사용하면 편리하다. 클라이언트 사용 객체가 자신이 가진 컬렉션에 해당하는 Iterator 구현체를 반환하는 메소드를 두면 된다. 배열은 Itera.. 2023. 2. 24.