Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 6. 상속, 그리고 객체 지향 설계 (3) 항목 38 : "has-a(...는...를 가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자 합성(Composition)이란, 어떤 타입의 객체들이 그와 다른 타입의 객체들을 포함하고 있을 경우에 성립하는 그 타입들 사이의 관계를 일컫습니다. 응용 영역 : 객체 중 우리 일상생활에서 볼 수 있는 사물을 본 뜬 것들. 구현 영역 : 응용 영역에 속하지 않는 것들. 시스템 구현만을 위한 인공물. 연결 리스트를 재사용하는 Set 템플릿 예 // list를 잘못 사용한 예(is-a) template class Set ..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 6. 상속, 그리고 객체 지향 설계 (2) 항목 35 : 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자 가상 함수 대신 쓸 수 있는 매서드 패턴 네 가지를 알아보자. class GameCharacter { public: // 캐릭터의 체력치를 반환하는 함수. // 파생 클래스를 이 함수를 재정의할 수 있습니다. virtual int healthValue() const; }; 1. 비가상 인터페이스 관용구(NVI 관용구)를 통한 템플릿 메서드 패턴 공개되지 않은 가상 함수를 비가상 public 멤버 함수로 감써서 호출하는, 템플릿 메서드 패턴의 한 형태입니다. class GameCharacter { public: /..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 6. 상속, 그리고 객체 지향 설계 (1) 항목 32 : public 상속 모형은 반드시 "is-a(...는 ...의 일종이다)"를 따르도록 만들자 public 상속의 의미는 "is-a(...는 ...의 일종)"입니다. 기본 클래스에 적용되는 모든 것들이 파생 클래스에 그대로 적용되어야 합니다. 왜냐하면 모든 파생 클래스 객체는 기본 클래스 객체의 일종이기 때문입니다. 항목 33 : 상속된 이름을 숨기는 일은 피하자 1. 문제 class Base { private: int x; public: virtual void mf1() = 0; virtual void mf1(int); virtual void mf2(); void mf3(); vo..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 5. 구현 항목 30 : 인라인 함수는 미주알고주알 따져서 이해해 두자 함수 인라인은 작고, 자주 호출되는 함수에 대해서만 하는 것으로 묶어둡시다. 이렇게 하면 디버깅 및 라이브러리의 바이너리 업그레이드가 용이해지고, 자칫 생길 수 있는 코드 부풀림 현상이 최소화되며, 프로그램의 속력이 더 빨라질 수 있는 여지가 최고로 많아집니다. 생성자와 소멸자 인라인은 피하자. 함수 템플릿이 대개 헤더 파일에 들어간다는 일반적인 부분만 생각해서 이들을 inline으로 선언하면 안 됩니다. 항목 31 : 파일 사이의 컴파일 의존성을 최대로 줄이자 객체 참조자 및 포인터로 충분한 경우에는 객체를 직접 쓰지 않습니다. 할 수 있으면 클래스 정의 대신 클..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 5. 구현 항목 26 : 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 변수 정의는 늦출 수 있을 때까지 늦춥시다. 프로그램이 더 깔끔해지며 효율도 좋아집니다. 항목 27 : 캐스팅은 절약, 또 절약! 잊지 말자 다른 방법이 가능하다면 캐스팅은 피하십시오. 특히 수행 성능에 민감한 코드에서 dynamic_cast는 몇 번이고 다시 생각하십시오. 설계 중에 캐스팅이 필요해졌다면, 캐스팅을 쓰지 않는 다른 방법을 시도해 보십시오. 캐스팅이 어쩔 수 없이 필요하다면, 함수 안에 숨길 수 있도록 해 보십시오. 이렇게 하면 최소한 사용자는 자신의 코드에 캐스팅을 넣지 않고 이 함수를 호출할 수 있게 됩니다. 구형 스타일의 캐스트를 쓰..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 4. 설계 및 선언 항목 18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 좋은 인터페이스는 제대로 쓰기에 쉬우며 엉터리로 쓰기에 어렵습니다. 인터페이스를 만들때는 이 특성을 지닐 수 있도록 고민하고 또 고민합시다. 인터페이스의 올바른 사용을 이끄는 방법으로는 인터페이스 사이의 일관성 잡아주기, 그리고 기본제공 타입과의 동작 호환성 유지하기가 있습니다. 사용자의 실수를 방지하는 방법으로는 새로운 타입 만들기, 타입에 대한 연산을 제한하기, 객체의 값에 대해 제약 걸기, 자원 관리 작업을 사용자 책임으로 놓지 않기가 있습니다. tr1::shared_ptr은 사용자 정의 삭제자를 지원합니다. 이 특징 때문에 tr..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 3. 자원 관리 항목 13 : 자원 관리에는 객체가 그만! 자원 누출을 막기 위해, 생성자 안에서 자원을 획득하고 소멸자에서 그것을 해제하는 RAII 객체를 사용합시다. 일반적으로 널리 쓰이는 RAII 클래스는 tr1::shared_ptr 그리고 auto_ptr입니다. 이 둘 가운데 tr1::shared_ptr이 복사 시의 동작이 직관적인기 때문에 대개 더 좋습니다. 반면, auto_ptr은 복사되는 객체(원본 객체)를 null로 만들어 버립니다. 참고 : [TR1] shared_ptr 항목 14 : 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 RAII 객체의 복사는 그 객체가 관리하는 자원의 복사 문제를 안고 가기 때문에,..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 2. 생성자, 소멸자 및 대입 연산자 항목 5 : C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있습니다. 항목 6 : 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 컴파일러에서 자동으로 제공하는 기능을 허용치 않으려면, 대응되는 멤버 함수를 private으로 선언한 후에 구현은 하지 않은 채로 두십시오. Uncopyable과 비슷한 기본 클래스를 쓰는 것도 한 방법입니다. 항목 7 : 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 다형성을 가진 기..
Effective C++ 이펙티브 C++ 스콧 마이어스 저/곽용재 역 1. C++에 왔으면 C++의 법을 따릅시다 항목 1 : C++를 언어들의 연합체로 바라보는 안목은 필수 C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라집니다. 그 경우란, 바로 C++의 어떤 부분을 사용하느냐입니다. 항목 2 : #define을 쓰려거든 const, enum, inline을 떠올리자 단순한 상수를 쓸 때는, #define보다 const 객체 혹은 enum을 우선 생각합니다. 함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 인라인 함수를 우선 생각합시다. 항목 3 : 낌새만 보이면 const를 들이대 보자! const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 줍니다. con..
Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 Meyers, Scott Item 2 : Understand auto type deduction auto 타입 추론 = 템플릿 타입 추론 (Direct Mapping) template void f(ParamType param); f(expr); // call f with some expression auto x = 27; const auto cx = x; const auto& rx = x auto = 템플릿의 T역할, 타입 지정자 = ParamType 역할 template // conceptual template for void func_for_x(T param); ..
- #레거시코드
- #EffectiveModernCpp
- Scott Meyers
- #스콧마이어스
- #ndc
- #techdays2015
- #코드최적화
- #자녀교육
- #uwp
- 객체 지향 설계
- #cpp
- #알고리즘
- #ModernCPP
- #scottmeyers
- #임백준
- Effective C++
- #cplusplus
- #세미나
- #프로그래밍심리학
- #제럴드와인버그
- 상속
- 책
- #build2016
- #로버트마틴
- #mva
- #팀개발
- Effective Modern C++
- #클린코드
- #csharp
- #마이클페더스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |