인기 글
-
6. 상속, 그리고 객체 지향 설계
항목 36: 상속받은 비가상 함수를 파생 클래스에 재정의하는 것은 절대 금물!
D라는 이름의 클래스가 B라는 이름의 클래스로부터 public 상속에 의해 파생되었고, B 클래스에는 mf()라는 public 맴버 함수가 정의되어 있다고 가정해보자. 여기서의 pB->mf() 이 당연히 이런식으로 동작할 것이라고 예상할 수 있다. 왜? 둘 다 같은 객체인 x에 대해 mf()를 호출하고 있기 때문이다. 하지만 당연하지 않을 수도 있다는 것이 문제이다. 특히 mf()가 비가상 함수이고 D 클래스가 자체적으로 mf() 함수를 또 정의하고 있는 경우 아래 코드와 같은 황당한 일이 벌어진다. 이렇게 같은 객체에서 같은 함수를 호출하는데, 실제로는 다른 함수를 호출하는 이유는, 비가상 함수는 정적 바인딩(static binding)으로 묶이기 때문이다.(항목 37 참고) => 즉 pB가 가르키는 ..
-
6. 상속, 그리고 객체 지향 설계
항목 34: 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자
(public)상속 이라는 개념은 사실 2가지로 나뉜다. 인터페이스 상속 vs (함수)구현 상속 이 둘의 차이는 함수 선언과 함수 정의의 차이와 맥을 같이한다고 보면 된다. 클래스 설계자의 입장에서 맴버 함수의 인터페이스(선언)만을 파생클래스에 상속받고 싶은 경우 함수의 인터페이스 구현을 모두 상속받고 싶은 경우 상속받은 구현이 오버라이드가 가능하게 만들고 싶은 경우 어떤 것도 오버라이드할 수 없도록 막고 싶은 경우 이러저러한 선택사항이 나올 수 있는데, 이러한 선택사항들 사이의 차이점을 명확하게 몸으로 느끼는 것이 중요하다. 그래서 예를 들어보면, 그래픽 응용프로그램에 쓰이는 기하학적 도형을 나타내는 클래스 계통구조를 놓고 한번 생각해보자. Shape는 추상 클래스이다. 왜냐하면 맴버 함수인 draw(..
- 03. DLL Injection 03-01. Windows 메세지 후킹 1.메세지 훅 Windows는 GUI를 제공하고, 이는 Event Driven 방식으로 동작한다. 우리가 키보드/마우스를 이용하여 메뉴 선택, 버튼 선택 등을 할 때의 작업이 모두 Event이다. Windows는 이런 Event가 발생할 때 응용 프로그램으로 미리 정의된 Message를 보낸다. 이 Message를 중간에서 가로채는 것이 Message Hooking이다. (자세한 내용은 찰스 펫졸드의 『Programming Windows』를 참고) 2. SetWindowsHookEx() Message Hooking은 SetWindowsHookEx() API를 통해 간단히 구현할 수 있다. HHOOK SetWindowsHookExA( int idHook, HOOKPROC lpfn, HINSTANCE hmo..
최신 글
-
4. 구조 패턴 4.1 적응자(ADAPTER) 의도 클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 적응(변환) 시킨다. 다른 이름 Wrapper(래퍼) 동기 "프로그램이 요청하는 인터페이스 ≠ 툴킷에 정의된 인터페이스" 인 경우 툴킷이 재사용을 목표로 개발되었다고 해도 실제 재사용되지 못할 수가 있다. 그림 편집기를 예로 들어보자. 그림판의 중요한 추상적 개념은 그래픽 객체들이다. 공통된 그래픽 요소에 대한 인터페이스를 추상 클래스 Shape 이라고 정의한다. 그리고 각각의 그래픽 요소들을 Shape의 서브클래스로 정의한다. 즉, 선을 위한 LineShape, 다각형을 위한 PolygonShape 등을 Shape을 상속받아 개발하면 된다. LineShape이나 PolygonShape 과 같은 매우 기본적인 그래픽 요소들은 구현이 비교적 쉽.. -
1. 서론 1.5 카탈로그 조직화하기 패턴의 목적 · 생성 o 객체의 생성 과정에 관여 · 구조 o 클래스나 객체의 합성 · 행동 o 클래스나 객체들이 상호작용 하는 방법 o 클래스나 객체들이 책임을 분산하는 방법 패턴의 적용 범위 · 클래스 패턴 o 클래스와 서브클래스 간의 관련성을 다루는 패턴 o 관련성은 주로 상속 o 컴파일 타임에 정적으로 결정되는 패턴 · 객체 패턴 o 객체간의 관련성을 다룸 o 런타에 변경할 수 있고, 동적인 패턴 대부분은 객체 패턴이다. -
1. 서론 1.3 디자인 패턴 기술하기 설계를 재사용하기 좋게 만들려면 설계를 하기까지의 다양한 결정, 대안, 장단점 등을 고려한 과정도 함께 적어주어야 합니다. -패턴 이름과 분류(Pattern Name and Classification) -의도(Intent) -다른 이름(Also Known As) -동기(Motivation) : 설계 문제를 제시하고, 패턴 안에서 클래스나 객체 구조가 어떻게 문제를 해결하는지 설명해 주는 일종의 시나리오 -활용성(Applicability) -구조(Structure) : 객체 모델링 기법(Object Modeling Technique: OMT)에 기반을 둔 표기법을 이용하여 해당 패턴에서 쓰는 클래스들을 시각적으로 나타냅니다. 또한, 객체 사이에 오가는 요청과 협력 관계의 순차를 표현하기 위해서 상호작용 다..