전체 글 262

[디자인 패턴] 구조 패턴 (4) 장식자 Decorator

장식자 (Decorator) 1. 의도 객체에 새로운 기능을 동적으로 추가하는 방법 2. 활용 기존에 있던 인터페이스에 기능을 추가하고 싶을 때 사용한다. 특정 클래스에 추가적인 기능을 포함하고 있는 서브 클래스를 만드는 것을 피한다. 예시로 GUI에 표시하는 시각적 객체들을 위한 VisualComponent 클래스가 있다하자. 그렇다면 VisualComponent 내부의 클래스 계통에 있는 모두에게 기능을 추가하는 것이 아니라 특정 서브 클래스에만 기능을 추가하는 것이다. VisualComponent 클래스를 상속하는 특정 서브 클래스를 TextView라고 하자. TextView 인터페이스에 스크롤바와 테두리 기능을 추가하고 싶을 때, TextView를 상속하는 새로운 서브 클래스를 만들어야할까? 당연..

[디자인 패턴] 구조 패턴 (3) 복합체 Composite

복합체 (Composite) 패턴 1. 의도 객체 구조가 트리 형태로 나타낼 수 있다. 객체의 부분은 또 다른 객체의 전체를 표현한다. 2. 활용 Grahpic 객체와 Picture 객체 Graphic 객체는 화면에 표시할 수 있는 모든 객체가 될 수 있다. 한 객체는 또 다른 Graphic 객체들을 포함하고 하나의 그룹처럼 행동할 수 있다. 예를 들면, MS PowerPoint의 도형 객체들을 그룹하하여 하나의 객체처럼 이동하거나 확대, 축소 연산이 가능하다. 이러한 그룹으로 묶어진 객체들을 컨테이너라고 하고 예시에서 Picture 클래스는 컨테이너로서 여러 그림 요소를 포함할 수 있다. 복합체 패턴에서 Graphic 클래스는 컨테이너와 개별 그림 요소의 의미를 모두 포함하도록 추상화하여 정의한다. 따..

[디자인 패턴] 구조 패턴 (2) 가교 Bridge

가교 (Bridge) 패턴 1. 의도 개체의 틀(Handle)과 내용(Body)을 분리하여 다른 클래스 계통을 가지게 함 2. 활용 예시 Window - WindowImp Window 창에 대한 인터페이스를 제공하는 Window 클래스가 있고 같은 계통으로 상속할 수 있는 클래스가 있다. 1. Window 창 종류의 변화 Icon을 표시하는 창이거나 잠시 로그인으로 띄우는 Transient 임시 창일 수도 있다. 2. Window 창을 그리는 시스템 환경 Window를 X Window 시스템이나 PM Window 시스템에서 그릴 수 있다. IconWindow이면서 X Window환경에서 그리려면 어떻게 해야할까 IconWindow를 서브 클래싱하는 IconXWindow 클래스를 정의함으로 해결할 할 수 ..

[디자인 패턴] 구조 패턴 (1) 적응자 Adapter

적응자 (Adapter) 패턴 1. 의도 다른 클래스의 인터페이스를 가져와서 새로 만들거나 기존에 있던 클래스에 추가하는 것 2. 활용 기존 클래스에서 기능을 추가해야하나 상위 추상 클래스를 손보고 싶지 않을 때 다른 클래스에서 기능을 가져오되 다른 클래스 역시 수정하고 싶지 않을 때 한마디로 두 개의 인터페이스를 다중 상속하여 두 기능을 갖고 싶을 때 적용 예시 TextShape와 TextView 추상 클래스 Shape를 상속받는 Line과 TextShape 객체가 있는데 이들은 특정 모양을 나타내고 그래픽 요소로서 Client가 화면에 그리기 위한 기본 객체이다. 객체의 바운더리를 얻는 BoundingBox() 메서드와 이 객체를 다루는 핸들러?를 반환하는 CreateManipulator()가 있다...

[디자인 패턴] 생성 패턴 (5) 싱글톤 Singleton (2021.02.19 수정)

싱글톤 (단일체-Singleton) 패턴 1. 의도 프로그램 상 인스턴스가 하나만 있음을 보장. 전역적인 접근이 가능하다. 2. 활용 프로그램 전체에서 인스턴스가 하나만 있고 모든 사용자가 접근 가능하도록 만든다. 3. 참여자 Singleton: Instance() 연산을 정의하여 유일한 인스턴스에 접근한다. Instance() 연산은 정적 멤버 함수로 구현하여 모든 사용자가 접근할 수 있도록 한다. 4. 협력 방법 사용자는 instance() 연산을 이용하여 단일체 인스턴스에 접근할 수 있다. 5. 결과 유일한 존재를 보장하고 인스턴스 접근을 통제한다. 전역 변수로 선언을 피함으로 이름 공간 혼란을 줄일 수 있다. 6. 구현 예시 코드로 설명 Instance(): 단일체인 자신을 반환하는 접근자 Rel..

[디자인 패턴] 생성 패턴 (4) 원형 Prototype

원형 (Prototype) 패턴 1. 의도 객체를 복사하여 사용하는 것. 복사할 객체의 클래스를 명시한다. 2. 활용 인스턴스화할 클래스를 런타임에 지정할 때 팩토리 메서드에서 객체 합성으로 클래스 계통을 연결 하였는 데 이를 피하고 싶을 때 원형 복제를 먼저하고 나중에 초기화 하여 자세히 설정된 객체를 사용하고 싶을 때 주로 인스턴스의 상태가 유한한 경우 복제하여 초기화하는 것이 유용할 수 있다. Graphic 객체와 Graphic Tool 객체 팩토리 메서드에서 기능 분리 등으로 서브 클래스에서 객체를 합성하여 인스턴스를 생성하였다. 하지만 생성하는 클래스가 다를 경우 팩터리 메서드를 상속하는 ImageGraphicTool, WidgetGraphicTool... 등 새로운 서브클래스를 만들어야 했는데..

[디자인 패턴] 생성 패턴 (3) 팩토리 메서드 Factory Method

팩토리 메서드 (Factory Method) 1. 의도 객체를 생성하기 위한 인터페이스를 정의하지만 인스턴스 생성은 자신의 서브클래스이 하도록 함 2. 활용 추상 객체에서 어떤 객체를 생성(포함)해야하는지 모르기 때문에 객체의 생성을 서브 클래스가 하도록 미룬다. 문서와 어플리케이션의 예시 Application 객체는 Document 객체를 새로 만들거나(New) 기존에 있던 것을 여는(Open) 연산을 한다. NewDocument()의 함수 예시에서 Document* doc = CreateDocument();와 같이 CreateDocument() 함수를 이용하여 Document를 생성할 수 있다. 만약 추상적 Document를 생성하는 것이 아니라 회계를 위한 장부, 회의록, 일정 등등 Document..

[디자인 패턴] 생성 패턴 (1) 추상 팩토리 Abstract Factory

추상 팩토리 (Abstract Factory) 1. 의도 상세한 서브 클래스를 정의하지 않고 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공 한마디로 공통 특징을 가지는 객체를 생산하기 위한 포괄적인 "공장" 객체이다. 2. 활용 비슷한 특징을 가지는 제품을 하나의 제품군으로 묶고 추상 팩토리 클래스에서 생성자를 정의하지 않고 객체를 생성하는 인터페이스(가상 함수)를 제공 각 제품을 만드는 구체 팩토리(Concrete Factory)는 추상 팩토리(Abstract Factory)를 상속받아 제품에 대한 생성하는 인터페이스를 구현 사용자는 구체적인 제품 명을 알 필요 없이 제품군이 공통적으로 가지는 인터페이스를 통해 조작 ex) Widget을 찍어내는 WidgetFactor..

[디자인 패턴] 생성 패턴 (2) 빌더 Builder

빌더 (Builder) 1. 의도 비슷한 생산 절차를 가지는 객체들을 묶어 Builder를 통해 추상화하고 동일한 절차를 제공할 수있도록 한다. 2. 활용 생산 절차는 비슷하지만 생성된 객체들은 서로 독립적인 경우 (공통으로 상속하는 추상 클래스가 없어도 된다.) cf) 추상 팩토리 - 한 팩토리릍 통해 생산된 객체는 다른 팩토리에서 생산된 객체와 공통으로 상속하는 추상 클래스가 존재한다. 따라서 표현이 다르지만 생산 절차가 비슷하기 때문에 생산 절차에 대한 인터페이스를 제공한다. ex) RTFReader 문서 변환기 RTFReader는 문서를 읽어 토큰의 타입에 따라 자신이 가지고 있는 빌더를 통해 원하는 변환을 수행할 수 있다. RTFReader는 디렉터로서 빌더를 합성하고(has-a 관계, 상속 x..

[운영체제] 가상 메모리 (3) 페이지 교체 알고리즘과 프로세스 적재 정책

독학사 운영체제 편을 공부하고 정리한 글입니다. 페이지 교체 알고리즘 페이지 부재 발생 시, 메모리가 꽉 찼을 경우 스왑 영역으로 내보낼 페이지를 결정하는 알고리즘 메모리에서 앞으로 사용할 가능성이 적은 페이지를 희생자 페이지로 선정한다. 페이지 교체 알고리즘 종류 - 이론적 페이지 교체 알고리즘 미래 메모리 접근 패턴을 전부 안다는 가정 하에 대상(희생자) 페이지를 결정한다. 가장 이상적인 교체 알고리즘으로 실제 구현이 불가능하지만 다른 알고리즘과 비교하기 위해 사용한다. - 최적 페이지 교체 근접 알고리즘 LRU/LFU/NUR/2차 기회 페이지 알고리즘 - 간단한 알고리즘 FIFO 알고리즘 1) FIFO 페이지 교체 알고리즘 선입 선출 형식으로 메모리에 가장 먼저 들어온 페이지를 대상 페이지로 선정하..