본문 바로가기

Effective C++7

Chapter 6 상속, 그리고 객체 지향 설계 2018/05/23 - [프로그래밍/Effective C++] - Chapter 5 구현 C++의 객체 지향 프로그래밍(object-oriented programming: OOP)는 익히 알고있는 OOP보다 조금 더 생각할 부분이 많다. 항목 32: public 상속 모형은 반드시 "is-a(...는 ...의 일종이다)"를 따로도록 만들자 C++로 객체 지향 프로그래밍을 하면서 다른 건 잊더라도 꼭 잊지 말아야 하는 규칙이 public 상속은 "is-a(...는 ...의 일종이다)"를 의미한다는 이야기다. 최고의 설계는, 제작하려는 소프트웨어 시스템이 기대하는 바에 따라 달라지는 것이다. public 상속은 기본 클래스 객체가 가진 모든 것들이 파생 클래스 객체에도 그 대로 적용된다고 단정하는 상속이다... 2018. 6. 7.
Chapter 5 구현 2018/04/17 - [프로그래밍/Effective C++] - Chapter 4 설계 및 선언구현 시 발생할 수 있는 여러가지 문제를 어떻게 조심해야 할까? 항목 26: 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 생성자 혹은 소멸자를 끌고 다니는 타입으로 변수를 정의하면 반드시 물게 되는 비용이 두개 있다. 하나는 프로그램 제어 흐름이 변수의 정의에 닿을 때 생성자가 호출되는 비용이고, 또 하나는 변수가 유효범위를 벗어날 때 소멸자가 호출되는 비용이다. 어떤 변수를 사용해야 할 때가 오기 전까지 그 변수의 정의를 늦추는 것은 기본이고, 초기화 인자를 손에 넣기 전까지 정의를 늦출 수 있는지도 둘러봐야 한다.어떤 변수가 루프 안에서만 쓰이는 경우라면, 해당 변수를 루프 바깥에서 미리 정의.. 2018. 5. 23.
Chapter 4 설계 및 선언 2018/04/11 - [프로그래밍/Effective C++] - Chapter 3 자원 관리 소프트웨어 설계(소프트웨어가 원하는 동작을 하도록 틀을 짜는 방법) 항목 18: 인터페이스 설계는 제대로 쓰긴엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 C++에서는 발에 치이고 손에 잡히는 것이 인터페이스이다. 어떤 인터페이스를 어떻게 써 봤는데 결과 코드가 사용자가 생각한 대로 동작하지 않는다면 그 코드는 컴파일되지 않아야 맞다. 거꾸로 어떤 코드가 컴파일된다면 그 코드는 사용자가 원하는 대로 동작해야 한다. '제대로 쓰기에 쉽고 엉터리로 쓰기에 어려운' 인터페이스를 개발하려면 우선 사용자가 저지를 만한 실수의 종류를 머리에 넣어두고 있어야 한다. 기본제공 타입과 쓸데없이 어긋나는 동작을 피하는 실질적인 이유는 .. 2018. 4. 17.
Chapter 3 자원 관리 2018/03/28 - [프로그래밍/Effective C++] - Chapter 2 생성자, 소멸자 및 대입 연산자 Chapter 3 자원 관리 프로그래밍 분야에서 자원(resource)이란, 사용을 일단 마치고 난 후에 시스템에 돌려주어야 하는 모든 것을 일컫는다. 가장 중요한 것은 "가져와서 썼으면 해제해야, 즉 놓아 주어야 한다" 항목 13: 자원 관리에는 객체가 그만! 특정 함수로 얻어낸 자원이 항상 해제되도록 만드는 방법은, 자원을 객체에 넣고 그 자원 해제를 소멸자가 맡도록 하며, 그 소멸자는 실행 제어가 함수를 떠날 때 호출되도록 만드는 것이다. 소프트웨어 개발에 쓰이는 상당수의 자원이 힙에서 동적으로 할당되고, 하나의 블록(block)혹은 함수 안에서만 쓰이는 경우가 잣기 때문에 그 블록 .. 2018. 4. 11.
Chapter 2 생성자, 소멸자 및 대입 연산자 2018/03/19 - [프로그래밍/Effective C++] - Chapter 1 C++에 왔으면 C++의 법을 따릅시다 Chapter 2 생성자, 소멸자 및 대입 연산자 C++ 클래스에 한 개 이상 꼭 들어 있는 것들이 생성자와 소멸자, 대입 연산자이다. 생성자: 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 객체의 초기화를 맡는 함수소멸자: 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어하는 함수대입 연산자: 기존의 객체에 다른 객체의 값을 줄 때 사용하는 함수 클래스를 제대로 쓰려면 이들이 우선 우뚝 서 있어야 함은 분명하고도 중요한 요구사항이다. 항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 C++의 복사 생성자(copy.. 2018. 3. 28.
Chapter 1 C++에 왔으면 C++의 법을 따릅시다 Chapter 1 C++에 왔으면 C++의 법을 따릅시다'가장' 근본적인 것들을 다루고 있는 단원 항목 1: C++를 언어들의 연합체로 바로보는 안목은 필수 초창기의 C++는 단순히 C 언어에 객체 지향 기능 몇 가지가 결합된 형태였다. 오늘날의 C++는 다중패러다임 프로그래밍 언어(multiparadigm programming)라고 불립니다. 절차적(procedural) 프로그래밍을 기본으로 하여 객체 지향(object oriented), 함수식(functional), 일반화(generic) 프로그래밍을 포함하며 메타프로그래밍(metaprogramming) 개념까지 지원하고 있다. C++를 잘 이해하는 방법C++를 단일 언어로 바라보는 눈을 넓혀, 상관관계가 있는 여러 언어들의 연합체(federatio.. 2018. 3. 19.