공부
-
[Design Pattern] 플라이웨이트 패턴 (Flyweight Pattern)공부/디자인 패턴 2020. 7. 26. 18:14
Flyweight 패턴은 비용이 큰 자원을 공통으로 사용할 수 있도록 만드는 패턴입니다. 여기서 자원에 대한 비용은 크게 두가지로 나눠 볼 수 있습니다.중복 생성될 가능성이 높음중복 생성될 가능성이 높다는 의미는 동일한 자원이 자주 사용될 가능성이 높은 것입니다. 이러한 자원은 공통 자원으로 관리하고 있다가 요청이 있을 때 제공해 주는 것이 좋습니다.자원 생성 비용은 큰데 사용 빈도는 낮음생성 비용이 크지만 사용 빈도가 낮은 자원을 미리 생성해 두는 것은 좋지 않습니다. 따라서 요청이 있을 때, 생성해서 제공해 주는 편이 좋습니다. 일반적으로 Factory와 관리 역할을 분리하는 것이 좋아 보이지만 굳이 나누고자 할 정도로 크기가 크지 않아서 하나의 클래스가 담당하도록 구현을 합니다. 이러한 패턴을 적용..
-
[Design Pattern] 퍼사드 패턴 (Facade Pattern)공부/디자인 패턴 2020. 7. 25. 23:34
퍼사드 패턴은 복잡한 호출 과정을 한 번 더 감싸서 단순한 형태로 제공하는 패턴입니다. 예를 들어, 특정 쇼핑몰에서 A라는 상품을 사기 위해서는 A 상품의 물건이 존재하는지, 주문자의 지역에 배송이 가능한지, 배송업체가 존재하는지 등 특정 절차를 밟아야 합니다. 퍼사드 패턴을 적용하지 않는다면 사용자가 복잡한 절차를 순서있게 호출해야 하지만 퍼사드 패턴을 적용하면 주문하기 와 같은 버튼 1개로 노출하고 복잡한 절차를 숨길 수 있습니다.class Qty: def check(self): pass class Delivery: def valid(self): pass class Amount: def check(self): pass # 퍼사드 클래스 class Order: def __init__(self): sel..
-
[Design Pattern] 컴포지트 패턴 (Composite Pattern)공부/디자인 패턴 2020. 3. 8. 17:59
컴포지트 패턴이란?객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴입니다. 객체와 객체들의 집합 간의 처리 방법의 차이가 없을 경우 사용하면 됩니다. 여기서 컴포지트는 객체 또는 객체 집합을 트리 구조로 구성하는 의미입니다. 단일 객체와 복합 객체의 처리 방법이 다르지 않은 경우, 전체 - 부분 관계로 정의할 수 있는데 여기의 대표적인 예는 폴더-파일 구조입니다. 위 클래스 다이어그램을 폴더 - 파일 구조로 표현하면 아래와 같습니다.예시위 파일 구조를 아래와 같이 표현할 수 있습니다.// component interface Node { public String getName(); } // leaf class Fil..
-
[Design Pattern] 브리지 패턴 (Bridge Pattern)공부/디자인 패턴 2020. 3. 8. 17:03
브리지 패턴이란?브리지 패턴은 구현부에서 추상층을 분리하여 각자 독립적으로 변형 및 확장이 가능하도록 만드는 패턴입니다. 즉, 기능과 구현에 대해 두 개의 별도의 클래스로 구현합니다. Abstraction : 기능 계층의 최상위 클래스이며 추상 인터페이스RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의ConcreteImplementor : 실제 기능을 구현하는 클래스예시헬스장에서 운동을 하는 것으로 예시로 들어보겠습니다.먼저 기능 부에 운동하는 사람에 해당하는 exerciser가 존재하고 그 하위에 오직 하체만 하는 사람, 오직 상체만 하는 사람 (예시를 위해 극단적으로..)의 클래스가 있다고..
-
[Design Pattern] 어댑터 패턴 (Adapter Pattern)공부/디자인 패턴 2020. 2. 29. 22:38
어댑터 패턴이란?한 클래스의 인터페이스를 다른 클래스에서 사용하고자 할 때, 다른 클래스에서 사용할 수 있도록 호환성을 제공해주는 패턴입니다. 예를 들어, 한국에서는 220v가 표준이지만 일본은 110v가 표준입니다. 한국에서 사용하는 충전기를 일본에 가져가면 콘센트의 모양이 맞지 않아 충전을 할 수 없습니다. 이 때, 돼지코와 같은 변환기(어댑터)를 사용해 한국에서 가져온 충전기를 일본에서 충전할 수 있도록 하는 기능이 여기서 말하는 어댑터 패턴이라 볼 수 있습니다.예시아래와 같이 한국전자제품 인터페이스와 삼성 클래스가 있다고 구현합니다.public interface KoreaElectronicProduct { public void 220v(); public void electricPressure();..
-
[Design Pattern] 팩토리 패턴 (Factory Pattern)공부/디자인 패턴 2020. 2. 29. 20:15
팩토리 패턴이란?객체를 만들어 반환하는 함수를 생성자 대신 팩토리 형태로 제공하여 초기화 과정을 외부에서 보지 못하게 숨기고 반환 타입을 제어하는 방법입니다.일반적으로 자바에서는 객체를 아래와 같이 생성합니다. SomeClass someClassObject = new SomeClass (); 위 선언의 문제는 SomeClass의 객체를 사용하는 부분에서 SomeClass의 구현에 의존성이 생기는 것입니다. new를 사용하여 객체를 생성하는 부분은 문제가 없지만 코드를 구체적인 구현 클래스에 결합하여 제공을 하게 됩니다. 이러한 경우는 구현 문제가 아닌 인터페이스에 대한 코드 위반입니다. 더 자세하게 나무위키에 나온 예시를 봅니다. (https://namu.wiki/w/%EB%94%94%EC%9E%90%E..
-
코루틴이란?공부 2020. 2. 23. 21:24
코루틴이란?코루틴은 동시성 프로그래밍을 가능케 하도록 만든 개념입니다. 코루틴은 보통 스레드와 비교가 많이 됩니다. 코루틴은 나온지 꽤나 오래된 기술이나스레드가 나타나면서 방치가 되었었습니다. 이후 스레드의 자원 경쟁, 데드락 등의 문제로 인해 다시 주목받고 있습니다. 코루틴은 별도의 스레드 없이 메인 스레드 상에서 번갈아가며 병렬처리와 유사한 동작을 수행할 수 있기 때문입니다.스레드와 차이점스레드는 비동기로, 여러 스레드가 있다면 한꺼번에 동시에 실행되는 반면, 코루틴은 프로그램이 실행 중일 때 특정 시점에 코루틴으로 이동하고 그 전에 진행 중이던 루틴은 정지합니다. 즉, 한번에 하나의 코드만 실행됩니다. 이는 기존의 프로그래밍과 유사한 성격으로 보일 수 있습니다. 하지만 기존의 프로그래밍은 에러가 나..
-
[Design Pattern] 프로토타입 패턴 (Prototype Pattern)공부/디자인 패턴 2020. 2. 23. 19:28
프로토타입 패턴이란?프로토타입 패턴은 원래 객체를 복제한 새로운 객체를 만들고, 그 복제본을 변경해 사용하는 패턴이프로토 타입 패턴은 기존의 객체를 복사하여 새로운 객체를 만들고 복사한 객체를 변경하여 사용하는 패턴입니다. 여기서 복사된 객체를 프로토타입이라고 합니다. 이러한 행동을 하는 이유는 때때로 새로운 객체를 만드는 것이 기존 객체를 복사하는 것 보다 비용이 더 많이 들 수 있습니다. 예를 들어, DB에서 데이터를 가져오는 클래스가 있는데 프로그램 내에서 데이터 수정을 여러번 이뤄지면 똑같은 데이터를 매번 DB에서 가져오는 것은 좋지 않습니다. 이러한 문제로 인해서 인스턴스를 깊은 복사 또는 얕은 복사를 통해 1번만 DB에 접근하여 데이터를 수정할 수 있도록 합니다.파이썬에서..파이썬에서는 cop..
-
[Design Pattern] 싱글톤 패턴 (Singleton Pattern)공부/디자인 패턴 2020. 2. 23. 18:41
싱글톤 패턴이란?개발을 진행하다 보면 클래스 내에서 인스턴스를 1개만 생성해야 하는 경우가 있습니다. 이럴 때, 해당 클래스를 사용하는 여러 곳에서 인스턴스를 계속 생성하다 보면 불필요하게 메모리 낭비를 야기 시킵니다. 이럴 때 싱글톤 패턴을 사용하면 불필요한 메모리 낭비를 방지하고 해당 클래스의 인스턴스를 바로 호출할 수 있습니다.싱글톤 패턴에서는 생성자를 클래스 자체에서만 접근할 수 있도록 private와 같이 접근 제어자를 통해 제어해야 합니다. 만약 생성자를 열어두면 해당 클래스를 다른 부분에서 인스턴스화 시킬 수 있기 때문입니다. 접근 제어자로 막는 것과 더불어 수정이 되지 않도록 막아야 합니다. 만약 인스턴스 생성 이후, 수정이 가능하다면 해당 클래스의 인스턴스를 Null로 초기화 시켜버릴 수..
-
[Design Pattern] 빌더 패턴 (Builder Pattern)공부/디자인 패턴 2020. 2. 22. 23:25
Builder 패턴이란?빌더 패턴은 객체를 빌드하는데 사용됩니다. 생성하는 객체가 하위 객체들을 포함하고 있어 복잡하거나 구성을 정교하게 할 필요성이 있을 때, 빌더 패턴을 사용해 복잡한 유형을 단순화할 수 있습니다. 빌더 패턴은 복잡한 객체를 빌드하는 프로세스를 캡슐화 또는 숨기는 작업을 하고 객체와 해당 구조의 표현을 분리합니다. 그냥 간단하게 말해서 생성자를 통해 어떠한 값도 생성하지 않고 내부 클래스 (보통 빌더라고 이름을 지음)를 통하여 생성하도록 하는 패턴입니다.예시class Student { private Student(int number, String name) { } public static class Builder { int number=0; String name=null; public..