퍼사드(Facade) 패턴: 구조패턴 하위 시스템을 보다 쉽게 사용할 수 있게 해주는 고급 인터페이스, 클라스나 객체를 조합하여 더 큰 구조를 만드는 패턴 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할수 있다. 쉽게 생각하면 흩어져 있는 서브 시스템을 통합하여 퍼사드 패턴을 사용해 통합하여 보다 더 쉽게 사용할 수 있음을 의미한다. 간단한 패턴이라 실무에서 은연중에 사용해본 적이 있겠다는 생각이 들었다. 장점: 사용이 간편하고, 유연성이 좋다. 다음 예제는 넷플릭스를 보는 과정을 담았습니다. TV를 전원을 키고, 넷플릭스에 들어가 더글로리 나 피지컬100을 선택하는 과정이죠. 이거 하나하나 메서드를 호출..
이전과 같이 노션으로 공유합니다. [스프링 입문을 위한 자바 객체 지향의 원리와 이해]라 쓰고 자바라 부른다... 자바를 배우는 느낌이 강해서 내가 쓴 정리본은 중요한 부분을 복붙했다고 보면 된다. 다시한번 자바와 객체지향에 대해 리마인드 하는 기분이라 불필요한 시간은 아니었다. Chapter1. 사람을 사랑한 기술 https://www.notion.so/Chapter1-842f30e8e3c446fd8258cd8c9dcc681e?pvs=4 Chapter1. 사람을 사랑한 기술 기계어에서 객체 지향 프로그래밍 언어로 www.notion.so Chapter2. 자바와 절차적/ 구조적 프로그래밍 https://www.notion.so/Chapter2-ed3b6a5a903346249cf70c2b23bf2070?..
데코레이터(Decorator): 구조패턴 어떤 객체에 책임(기능)을 동적으로 추가하는 패턴, 기본 기능을 가지고 있는 클래스를 하나 만들고, 상속과 합성을 이용하여 추가할 수 있는 기능들을 추가하기 편하도록 하는 설계 💡 프록시 란? 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것, 대리자와 대리인 같은 역할을 한다. 타깃과 같은 인터페이스를 구현하며, 프록시가 타깃을 제어할 수 있다. 접근을 제어하거나 부가기능을 추가할 수 있다. 패턴의 이름처럼 객체에 장식을 얹듯 다른 기능까지 추가하는 패턴을 말한다. 여기서 동적으로 추가할 때는 보통 특정 객체를 결합하는 방식을 사용한다. 데코레이터 패턴은 타깃에 부가적인 기능을 런타임 시 다이나믹하게 부여해주기 위해 프록시..
컴포지트(Composite) 패턴: 구조패턴 객체들의 관계를 트리 구조로 구성하여 사용자로 하여금 복합 객체와 단일 객체를 구분없이 다룰 수 있도록 하는 패턴 Component - Leaf 클래스와 전체에 해당하는 Composite 클래스에 공통 인터페이스를 정의 Leaf - 부분 클래스 - Composite 객체의 부품으로 설정 Composite - 전체 클래스 - 복수 개의 Leaf, 심지어 복수 개의 Composite 객체를 부분으로 가질 수 있음 정의에 나와있는 대로 객체들의 관계를 위의 내용을 토대로 하여 트리 구조로 만드는 것이 컴포지트 패턴! 대표적으로 폴더구조를 생각하면 이해하기 쉬울 것이다. 장점: 객체들이 모두 같은 타입으로 취급되기 때문에 새로운 클래스 추가가 용이하다. 단일객체, 집..
어댑터(Adapter)패턴: 구조패턴 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 특정 인터페이스를 지원하지 않는 대상 객체를 인터페이스를 지원하는 Adapter에 집어넣어서 사용하는 방법이라 할 수 있다. 기존 앱에 호환되지 않는 구현 인터페이스를 어댑터처럼 연결해주는 것! Clinet가 Target의 인터페이스를 토대로 사용할 때, Adaptee 구현체를 Target의 작동방식과 동일하게 만들어야 할 것이다. 이때 Adapter을 통해서 동일하게 동작하도록 연결해준다. 이럴 경우 어댑터 패턴을 적용시킬 수 있다! 두 클래스가 동일하거나 유사한 작업을 수행하지만 인..
싱글톤(Singleton)패턴: 생성패턴 인스턴스가 오직 하나만 생성되는 것을 보장하고 어디서든 동일한 인스턴스에 접근할 수 있도록 하는 디자인 패턴 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있다. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다. 여러 문제가 있기 때문에 주로 공유하는 경우에 사용한다. 그냥 static 키워드를 붙여 전역상태로 만들어 사용하면 되지 않나요?? 싱글톤 패턴은 클래스 자신이 자기의 인스턴스에 접근하는 방법을 따로 관리하므로 static 키워드를 붙여 따로 전역변수를 생성하는 것보다 좋은 방법이다. 자기 자신의 생성자를 pri..
프로토타입(Prototype) 패턴: 생성패턴 원본 객체를 새로운 객체에 복사하여 필요에 따라 수정하는 메커니즘을 제공한다. 프로토타입패턴은 객체를 생성하는데 비용(시간, 자원)이 많이 들고, 비슷한 객체가 이미 있는 경우에 사용되는 생성 패턴 중 하나이다. 보통 DB에서 데이터를 읽어와 인스턴스를 생성할 때나 요청을 보내서 가져온 데이터로 인스턴스를 만들어야 하는 경우 오래시간과 큰 리소스가 필요하다. 때문에 데이터를 복제해서 새로운 인스턴스를 만들고 원하는 값만 일부 변경하여 사용한다. 프로토타입패턴은 복사를 위해 자바에서 제공하는 clone메소드를 사용할 수 있다. 자바에서 제공하는 clone메소드를 사용하기 때문에 생성하고자 하는 객체에 clone에 대한 Override를 요구한다. 이때, 주의할..
빌더(Builder) 패턴: 생성패턴 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다. Builder: 객체를 생성하는 데 사용되는 인터페이스 ConcreateBuilder: Builder를 실제로 구현하여 객체를 생성까지 하는 구현 클래스 Director: Builder를 인자로 받아 디테일한 객체를 생성하고 반환해주는 클래스 이 패턴을 사용하면, 동일한 구성코드를 사용하여 다양한 타입과 표현을 제공한다. 결과적으로 생성자를 가독성 좋게 만들어 주는 도구라고 할 수 있다. 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 것이 더 낫다. 왜 빌더패턴이 필요한가요? 학생이라는 객체가 있다고 해보자. 학생 객..
추상 팩토리(Abstract Method) 패턴 : 생성패턴 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 팩토리 메서드와 유사하지만, 큰 차이점은 추상 팩토리는 연관된 객체들을 모은다는 것에 있다. 팩토리 패턴은 하나의 객체를 생성하는 데 사용되지만, 추상 팩토리 패턴은 팩토리 객체가 아닌 다른 객체 내부에 구현되어 해당 객체에서 여러 타입의 객체를 생성한다. AbstractFactory: 실제 팩토리 클래스의 공통 인터페이스 ConcreteFactory: 구체적인 팩토리 클래스로 AbstractFactory 클래스의 추상 메서드를 오버라이드함으로써 구체적인 제품을 생성한다. AbstractProduc..
팩토리 메서드(Factory Method) 패턴 : 생성패턴 객체를 생성할 때 어떤 클래스의 인스턴스를 만들 지 서브 클래스에서 결정하게 한다. 상속을 통해 기능을 확장하게 하는 패턴이다. 슈퍼 클래스 코드에서는 서브클래스에서 구현할 메소드를 호출해서 필요한 타입의 오브젝트를 가져와 사용한다. 이 메소드는 주로 인터페이스 타입으로 오브젝트를 리턴하므로 서브 클래스에서 정확히 어떤 클래스의 오브젝트를 만들어 리턴할지는 슈퍼클래스에서는 알지 못한다. 이렇게 서브 클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 하고, 이 방식을 통해 오브젝트 생성 방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라고 한다. Creat..