분류 전체보기

OOP/Design Pattern

08. 컴포지트(Composite) 패턴

컴포지트(Composite) 패턴: 구조패턴 객체들의 관계를 트리 구조로 구성하여 사용자로 하여금 복합 객체와 단일 객체를 구분없이 다룰 수 있도록 하는 패턴 Component - Leaf 클래스와 전체에 해당하는 Composite 클래스에 공통 인터페이스를 정의 Leaf - 부분 클래스 - Composite 객체의 부품으로 설정 Composite - 전체 클래스 - 복수 개의 Leaf, 심지어 복수 개의 Composite 객체를 부분으로 가질 수 있음 정의에 나와있는 대로 객체들의 관계를 위의 내용을 토대로 하여 트리 구조로 만드는 것이 컴포지트 패턴! 대표적으로 폴더구조를 생각하면 이해하기 쉬울 것이다. 장점: 객체들이 모두 같은 타입으로 취급되기 때문에 새로운 클래스 추가가 용이하다. 단일객체, 집..

OOP/Design Pattern

07. 어댑터(Adapter) 패턴

어댑터(Adapter)패턴: 구조패턴 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 특정 인터페이스를 지원하지 않는 대상 객체를 인터페이스를 지원하는 Adapter에 집어넣어서 사용하는 방법이라 할 수 있다. 기존 앱에 호환되지 않는 구현 인터페이스를 어댑터처럼 연결해주는 것! Clinet가 Target의 인터페이스를 토대로 사용할 때, Adaptee 구현체를 Target의 작동방식과 동일하게 만들어야 할 것이다. 이때 Adapter을 통해서 동일하게 동작하도록 연결해준다. 이럴 경우 어댑터 패턴을 적용시킬 수 있다! 두 클래스가 동일하거나 유사한 작업을 수행하지만 인..

OOP/Design Pattern

06. 싱글톤(Singleton)패턴

싱글톤(Singleton)패턴: 생성패턴 인스턴스가 오직 하나만 생성되는 것을 보장하고 어디서든 동일한 인스턴스에 접근할 수 있도록 하는 디자인 패턴 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있다. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다. 여러 문제가 있기 때문에 주로 공유하는 경우에 사용한다. 그냥 static 키워드를 붙여 전역상태로 만들어 사용하면 되지 않나요?? 싱글톤 패턴은 클래스 자신이 자기의 인스턴스에 접근하는 방법을 따로 관리하므로 static 키워드를 붙여 따로 전역변수를 생성하는 것보다 좋은 방법이다. 자기 자신의 생성자를 pri..

OOP/Design Pattern

05. 프로토타입(Prototype) 패턴

프로토타입(Prototype) 패턴: 생성패턴 원본 객체를 새로운 객체에 복사하여 필요에 따라 수정하는 메커니즘을 제공한다. 프로토타입패턴은 객체를 생성하는데 비용(시간, 자원)이 많이 들고, 비슷한 객체가 이미 있는 경우에 사용되는 생성 패턴 중 하나이다. 보통 DB에서 데이터를 읽어와 인스턴스를 생성할 때나 요청을 보내서 가져온 데이터로 인스턴스를 만들어야 하는 경우 오래시간과 큰 리소스가 필요하다. 때문에 데이터를 복제해서 새로운 인스턴스를 만들고 원하는 값만 일부 변경하여 사용한다. 프로토타입패턴은 복사를 위해 자바에서 제공하는 clone메소드를 사용할 수 있다. 자바에서 제공하는 clone메소드를 사용하기 때문에 생성하고자 하는 객체에 clone에 대한 Override를 요구한다. 이때, 주의할..

OOP/Design Pattern

04. 빌더(Builder) 패턴

빌더(Builder) 패턴: 생성패턴 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다. Builder: 객체를 생성하는 데 사용되는 인터페이스 ConcreateBuilder: Builder를 실제로 구현하여 객체를 생성까지 하는 구현 클래스 Director: Builder를 인자로 받아 디테일한 객체를 생성하고 반환해주는 클래스 이 패턴을 사용하면, 동일한 구성코드를 사용하여 다양한 타입과 표현을 제공한다. 결과적으로 생성자를 가독성 좋게 만들어 주는 도구라고 할 수 있다. 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 것이 더 낫다. 왜 빌더패턴이 필요한가요? 학생이라는 객체가 있다고 해보자. 학생 객..

OOP/Design Pattern

03. 추상 팩토리(Abstract Method) 패턴

추상 팩토리(Abstract Method) 패턴 : 생성패턴 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 팩토리 메서드와 유사하지만, 큰 차이점은 추상 팩토리는 연관된 객체들을 모은다는 것에 있다. 팩토리 패턴은 하나의 객체를 생성하는 데 사용되지만, 추상 팩토리 패턴은 팩토리 객체가 아닌 다른 객체 내부에 구현되어 해당 객체에서 여러 타입의 객체를 생성한다. AbstractFactory: 실제 팩토리 클래스의 공통 인터페이스 ConcreteFactory: 구체적인 팩토리 클래스로 AbstractFactory 클래스의 추상 메서드를 오버라이드함으로써 구체적인 제품을 생성한다. AbstractProduc..

OOP/Design Pattern

02. 팩토리 메서드(Factory Method) 패턴

팩토리 메서드(Factory Method) 패턴 : 생성패턴 객체를 생성할 때 어떤 클래스의 인스턴스를 만들 지 서브 클래스에서 결정하게 한다. 상속을 통해 기능을 확장하게 하는 패턴이다. 슈퍼 클래스 코드에서는 서브클래스에서 구현할 메소드를 호출해서 필요한 타입의 오브젝트를 가져와 사용한다. 이 메소드는 주로 인터페이스 타입으로 오브젝트를 리턴하므로 서브 클래스에서 정확히 어떤 클래스의 오브젝트를 만들어 리턴할지는 슈퍼클래스에서는 알지 못한다. 이렇게 서브 클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 하고, 이 방식을 통해 오브젝트 생성 방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라고 한다. Creat..

OOP/Design Pattern

00. GoF 디자인 패턴

* 주관적인 생각이 포함된 포스팅입니다. 디자인 패턴 객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴. 유지보수와 확장이 쉬운 설계를 할 때 주로 SOLID 법칙을 적용해야 한다고 들한다. 내가 알기론 디자인 패턴은 이 SOLID 원칙은 준수하여 제시된 설계 패턴인 것으로 알고 있다. SOLID 원칙이 도구라면 디자인 패턴은 결과물인 셈? SOLID 원칙을 되새기며 설계할 필요 없이 디자인 패턴을 적용하면 된다는 것! 디자인 패턴은 패턴 카탈로그에서 제시한 생성, 행동, 구조라는 3가지로 용도에 따라 분류가 가능하다. 생성패턴: 객체 인스턴스를 생성하는 패턴으로, 클라이언트와 그 클라이언트가 생성해야 하는 객체 인스턴스 사이의 연결을 끊어주는 패턴 행동패턴: 클래스와..

Algorithm/PTUStudy

5주차. 괄호

9012. 괄호 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 📌문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 ..

Algorithm/PTUStudy

5주차. 단어 뒤집기

9093. 단어 뒤집기 https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 📌문제 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다. - 예제1 📝입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 ..

지구우중
'분류 전체보기' 카테고리의 글 목록 (12 Page)