개발

[Effective C++] #18 인터페이스 설계 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 4장 "설계 및 선언", 항목 18 "인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자"에 해당하는 내용입니다. 인터페이스 이번 항목에서 다룰 "인터페이스"란, C++에서 제공하는 "__interface" 혹은 추상 클래스로 특정 짓는 것이 아니라, 사용자가 코드 작성 시 사용하는 함수, 클래스, 그리고 템플릿 등을 의미합니다. 인터페이스의 정의가 의미하는 바, 그 자체를 의미합니다. 건물을 짓기 위한 기반 및 자재들이라고 볼 수 있죠. 책에서 설명하는 인터페이스 설계의 궁극적인 목적은 사용자가 원하..
[Effective C++] #16 new 및 delete 사용 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 16 "new 및 delete를 사용할 때는 형태를 반드시 맞추자"에 해당하는 내용입니다. 동적 할당 코드 작성 중 일시적으로 필요한 만큼의 자원을 할당받고 불필요한 자원 낭비를 방지하는 메모리 할당 방법입니다. 우리가 작성한 program이 정상적으로 실행되기 위해 메모리 공간이 필요합니다. 이때, 프로세스의 runtime 중 필요한 메모리 크기만큼을 컴퓨터에 일려 줌으로써 자원을 보다 효율적으로 사용할 수 있도록 해줍니다. 동적 할당은 heap 영역에서 이루어지고, new를 ..
[Effective C++] #15 자원 관리 객체, 자원에 대한 접근 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 15 "자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자"에 해당하는 내용입니다. 자원 관리 객체, 그리고 자원에 대한 접근 자원 관리 객체는 외부(API)에서 해당 자원을 접근할 수 있도록 허용해야 합니다. 물론, 외부의 접근을 허용하는 행동은 캡슐화에 위배되는 행동입니다. 하지만, 자원 관리 객체의 목적은 자원을 외부로부터 숨기기 위함이 아니라, 성공적으로 자원 해제를 수행하기 위 위함입니다. 자원 관리 객체의 자원들에 접근하는 방법은 두 가지가 있..
[Effective C++] #14 자원 관리 객체 심화 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 14 "자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자"에 해당하는 내용입니다. 자원 관리 객체의 복사 class Lock { public: Lock (Mutex* pm) : mutexPtr(pm) {lock(mutexPtr);} ~Lock(){unlock(mutexPtr);} private: Mutex* mutexPtr; } #include using namespace std; int main() { Mutex m; Lock m1(&m); ...// m1 객체의 소멸자 호출 및..
[Effective C++] #11 중복 참조와 자기 대입 연산자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 11 "operator=에서는 자기 대입에 대한 처리가 빠지지 않도록 하자"에 해당하는 내용입니다. 중복 참조에 의한 자기 대입 연산 class Wclass {...}; Wclass w; ... w = w; *px = *py;// 서로 같은 객체를 가리킬 수도 ... a[i] = a[j]; // 같은 값일 수도... 보통 자기 대입 연산은 적법한 코드로 분류됩니다. 쉽게 말해, 사용자 쪽에서 문제가 발생한지 모를 수 있죠. 위 예제 코드는 일단 보기에 크게..
[Effective C++] #10 대입 연산자와 *this의 참조자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 10 "대입 연산자는 *this의 참조자를 반환하게 하자"에 해당하는 내용입니다. 대입 연산자 대입연산자 = { =, *=, /=, %=, +=, -=, =, &=, ^=, |= } class A { public: ... A& operator=(const A& 우변객체){ ... return *this; } }; 대입 연산자는 위 코드에서 살펴본 대로, "= *= /= %= += -= = &= ^= |="를 의미합니다. "="의 경우 단순 할당 연산자로..
[Effective C++] #6 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 6 "컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 막아 버리자"에 해당하는 내용입니다. 사용자 정의 멤버 함수 class Assets {...}; Assets h1; Assets h2; Assets h3 (h1); Assets h3 = h2; 세상에 모든 자산은 한 개씩 존재한다고 가정해봅시다. 각 자산마다 "Assets" 클래스를 통해 생성되며, 생성된 객체들은 서로 같을 수 없습니다. 따라서, 위 예제 코드처럼 "h3"..
[Effective C++] # 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 5 "C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자"에 해당하는 내용입니다. 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 class Empty {}; 위 예제 코드는 비어 있는 클래스를 정의했습니다. 하지만, C++는 비어 있는 클래스 안에 몇 개의 멤버 함수를 자동으로 생성합니다. 이 멤버 함수들은 "생성자", "소멸자", "복사 생성자", 그리고 "복사 대입 연산자"입니다. 이들은 모두 public 멤버이며, inl..
[Effective C++] #28_예외 안전성 확보 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 30 "인라인 함수는 미주알고주알 따져서 이해해 두자" 에 해당하는 내용입니다. 인라인 함수 인라인 함수는 함수 호출 시 발생하는 오버헤드를 줄이기 위해 함수를 호출하는 대신 함수가 호출되는 곳마다 함수 본문의 코드를 복사해 넣어 주는 방법입니다. 함수처럼 보이고, 함수처럼 동작하며, 메크로보다 훨씬 안전하고 쓰기 좋습니다. 책에서 얘기하는 '인라인 함수'의 장점은 이와 같습니다. 컴파일러 최적화는 함수 호출이 없는 코드가 연속되어 이어지는 구간에 적용되도도록 설계되어있고, 인라인 함수를 사용..
[Effective C++] #27_캐스팅은 절약하고 또 절약하자! Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 28 "내부에서 사용하는 객체에 대한 핸들을 반환하는 코드는 되도록 피하자" 에 해당하는 내용입니다. 멤버의 참조자를 반환하는 멤버 함수들의 최대 접근도 class Point { public: Point(int x, int y); ... void setX(int newVal); void setY(int newVal); ... }; struct RecData { Point ulhc; // upper left-hand corner Point lrhc; // lower right-ha..
Hardii2
'개발' 태그의 글 목록 (2 Page)