본문 바로가기

728x90

study

[C++][Effective C++] 26~31. 구현 [Effective C++(3판)]에 대한 내용을 공부하면서 정리한 내용이다. 이번에 요약하는 내용은 26~31 항목으로 아래와 같다. 26. 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 27. 캐스팅은 절약, 또 절약! 잊지 말자 28. 내부에서 사용하는 객체에 대한 "핸들"을 반환하는 코드는 되도록 피하자 29. 예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자! 30. 인라인 함수는 미주알고주알 따져서 이해해 두자 31. 파일 사이의 컴파일 의존성을 최대로 줄이자 요약 26. 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 프로그램 제어 흐름이 변수의 정의에 닿으면 생성자가 호출된다. 그리고 그 변수가 유효 범위를 벗어나면 소멸자가 호출된다. 이런 비용을 낭비하지 않기 위해서.. 더보기
[C++][Effective C++] 18~25. 설계 및 선언 [Effective C++(3판)]에 대한 내용을 공부하면서 정리한 내용이다. 이번에 요약하는 내용은 18~25 항목으로 아래와 같다. 18. 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 19. 클래스 설계는 타입 설계와 똑같이 취급하자 20. '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다 21. 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 22. 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 23. 멤버 함수보다 비멤버 비프렌드 함수와 더 가까워지자 24. 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 25. 예외를 던지지 않는 swap에 대한 지원도 생각해 보자 요약 18. .. 더보기
[C++][Effective C++] 13~17. 자원 관리 [Effective C++(3판)]에 대한 내용을 공부하면서 정리한 내용이다. 이번에 요약하는 내용은 05~12 항목으로 아래와 같다. 13. 자원 관리에는 객체가 그만! 14. 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 15. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 16. new 및 delete를 사용할 때는 형태를 반드시 맞추자 17. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 요약 13. 자원 관리에는 객체가 그만! 자원이 항상 해제되도록 만들 방법은, 자원을 객체에 넣고 그 자원 해제를 소멸자가 맡도록 하며, 그 소멸자는 실행 제어가 func(자원을 생성하게 된 함수)를 떠날 때 호출하게 하는 것이다. 자원을 객체에.. 더보기
[C++][Effective C++] 05~12. 생성자, 소멸자 및 대입 연산자 [Effective C++(3판)]에 대한 내용을 공부하면서 정리한 내용이다. 이번에 요약하는 내용은 05~12 항목으로 아래와 같다. 05. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 06. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 07. 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 08. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 09. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 10. 대입 연산자는 *this의 참조자를 반환하게 하자 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 12. 객체의 모든 부분을 빠짐없이 복사하자 요약 05. C++가 은근슬쩍 만들어 호출해 버.. 더보기
[디자인패턴][생성패턴] 팩터리 Factory - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Factory pattern 두 개의 GoF(Gang of Four) 패턴, 팩터리 메서드와 추상 팩터리를 동시에 알아본다. 이 두 패턴은 긴밀하게 연관이 되어있다. 시나리오 직교 좌표계의 좌표점 정보를 저장한다고 가정하자. 다음과 같이 쉽게 구현할 수 있을 것이다. struct CPoint { CPoint(const float x, const float y) : m_x(x), m_y(y) {} float m_x, m_y; //< 직교 좌표계의 좌표 } 여기서 극좌표계로 좌표점 정보를 저장해야 한다면 어떻게 할까? 쉽게 다음과 같이 극좌표계용 생성자를 추가할 것이다. CPoint(const float r, const float .. 더보기
[C++][Effective C++] 01~04. C++에 왔으면 C++의 법을 따릅시다. [Effective C++(3판)]에 대한 내용을 공부하면서 정리한 내용이다. 이번에 요약하는 내용은 01~04 항목으로 아래와 같다. 01. C++를 언어들의 연합체로 바라보는 안목은 필수 02. #define을 쓰려거든 const, enum, inline을 떠올리자 03. 낌새만 보이면 const를 들이대 보자! 04. 객체를 사용하기 전에 반드시 그 객체를 초기화하자 요약 01. C++를 언어들의 연합체로 바라보는 안목은 필수 기존의 C++은 C 언어에 OOP 몇 가지를 결합한 형태에 불과했다. 그에 따라 처음의 이름 역시 "C with Classes"였다. 하지만, 시간이 지남에 따라 C++은 점차 과감하게 변화했다. Exception, Template, STL이 그러한 변화의 산출물이다. 이제 .. 더보기
[C++][Effective C++] 00. Effective C++ 들어가면서 [Effective C++(3판)]에 대한 내용을 공부하면서 정리한 내용이다. 요약 이 책은 C++를 보다 효과적으로 쓰기 위해 작성되었다. C++ 개발을 하면서 자주 마주치는 C++ 프로그래밍의 이모저모를 다루는 내용이다. 합쳐서 보다 효과적으로 사용하도록 해보자. 다만, 별도 행령 강령 따위가 아니고 바이블이 아니다. 그저 지침(Guideline)일 뿐이다. 책을 통해서 C++가 어떻게 동작하는지 또는 왜 이렇게 동작하는지 이해하고, 독자가 어떤 용도에 어떻게 쓸 수 있을 지에 대해서 안목을 길러야 한다. 이 책에서는 크게 아래 2가지에 대해 다루고 있다. 일반적인 설계 전략 C++ 만의 언어적 특징에 관련된 실전 세부사항 상속 vs 템플릿 public 상속 vs private 상속 private 상.. 더보기
[디자인패턴][생성패턴] 빌더 Builder - C++ [모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다. Builder pattern 생성이 까다로운 객체를 쉽게 처리하기 위한 패턴이다. 즉, 생성자 호출 코드 단 한 줄로 생성할 수 없는 객체를 쉽게 다루는 패턴이다. 코드 한줄로 생성할 수 없는 객체는 다른 객체들의 조합이거나, 상식적인 것을 벗어난 까다로운 로직이 요구된다. 이런 객체는 생성하는 코드를 따로 분리해야 한다. 책에 나오는 예제는 그렇게 까다로워 보이지 않지만, 빌더 패턴을 어떻게 구현하는지, 빌더 패턴을 사용하는 의미가 무엇인지에 대해 설명할 수 있는 정도다. 시나리오 HTML 웹 페이지에 입력할 컴포넌트를 생성한다고 가정하자. 단순하게 "hello"와 "world"를 비순차() 리스트() 태그로 출력하려고 한다... 더보기

728x90