목록Tutorials (196)
KoreanFoodie's Study
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 24 : 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 핵심 : 어떤 함수에 들어가는 모든 매개변수(this 포인터가 가리키는 객체도 포함해서) 에 대해 타입 변환을 해 줄 필요가 있다면, 그 함수는 비멤버이어야 한다. 유리수를 나타내는 클래스가 있다고 하고, 곱셉 연산을 만든다고 가정하자. class Rational { public: Rational(int numerator = 0, int denominator = 1); int numerator() const; int denominator() const;..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 23 : 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자 핵심 : 멤버 함수보다는 비멤버 비프렌드 함수를 자주 쓰자. 캡슐화 정도가 높아지고, 패키징 유연성도 커지며, 기능적인 확장성도 늘어난다. 웹 브라우저에서 캐시를 비우는 함수, URL 기록을 없애는 함수, 쿠키를 제거하는 함수가 있다고 하자. 세 동작을 동시에 하도록 만드는 함수를 정의할 때, 멤버 함수로 만드는 것이 좋을까, 비멤버 함수로 제공하는 것이 더 좋을까? class WebBrowser { public: void clearCache(); void clearHist..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 22 : 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 핵심 : 1. 데이터 멤버는 private 멤버로 선언하자 이를 통해 클래스 제작자는 문법적으로 일관성 있는 데이터 접근 통로를 제공할 수 있고, 필요에 따라서는 세밀한 접근 제어도 가능하며, 클래스의 불변속성을 강화할 수 있을 뿐 아니라, 내부 구현의 융통성도 발휘할 수 있다. 2. protected 는 public 보다 더 많이 '보호' 받고 있는 것이 절대로 아니다. 먼저, 데이터 멤버에 public 대신 private 을 써야 하는 이유를 알아보자. 문법적 일관..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 21 : 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 핵심 : 1. 지역 스택 객체에 대한 포인터나 참조자를 반환하는 일, 혹은 힙에 할당된 객체에 대한 참조자를 반환하는 일, 또는 지역 정적 객체에 대한 포인터나 참조자를 반환하는 일은 그런 객체가 두 개 이상 필요해질 가능성이 있다면 절대로 하지 말자(항목 4를 보면 단일 스레드 환경에서의 적절한 코드 예제를 찾을 수 있다) 유리수를 표현하는 클래스의 곱셈 operator 를 다음과 같이 정의하면, 각기 다른 문제가 발생한다! // 1. result 객체를 생성..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 20 : '값에 의한 전달' 보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다 핵심 : 1. '값에 의한 전달' 보다는 '상수 객체 참조자에 의한 전달' 을 선호하자. 대체적으로 효율적일 뿐만 아니라 복사손실 문제까지 막아준다. 2. 이번 항목에서 다룬 법칙은 기본제공 타입 및 STL 반복자, 그리고 함수 객체 타입에는 맞지 않는다. 이들에 대해서는 '값에 의한 전달' 이 더 적절하다. 기본적으로 C++ 는 함수로부터 객체를 전달받거나 전달할 때 '값에 의한 전달(pass-by-value)' 방식을 사용한다. 이러한..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 19 : 클래스 설계는 타입 설계와 똑같이 취급하자 핵심 : 클래스 설계는 타입 설계이다. 새로운 타입을 정의하기 전에, 이번 항목에 나온 모든 고려사항을 빠짐없이 점검해 보자! C++ 에서 새로운 클래스를 정의한다는 것은 새로운 타입을 하나 정의하는 것과 같다. 따라서 다음과 같은 요소들을 숙고한 후 만들어 보자! 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? (operator new, operator delete[] 등등) 객체 초기화는 객체 대입과 어떻게 달라야 하는가? 새로운 타입으로 만든 객체가 값에 의해..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 핵심 : 1. 좋은 인터페이스는 제대로 쓰기에 쉬우며 엉터리로 쓰기에 어렵다. 인터페이스를 만들 때는 이 특성을 지닐 수 있도록 고민하고 또 고민하자 2. 인터페이스의 올바른 사용을 이끄는 방법으로는 인터페이스 사이의 일관성 잡아주기, 그리고 기본제공 타입과의 동작 호환성 유지하기가 있다. 3. 사용자의 실수를 방지하는 방법으로는 새로운 타입 만들기, 타입에 대한 연산을 제한하기, 객체의 값에 대해 제약 걸기, 자원 관리 작업을 사용자 책임으로 놓지 않기가 있..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 17 : new 로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 핵심 : new 로 생상한 객체를 스마트 포인터로 넣는 코드는 별도의 한 문장으로 만들자. 이것이 안 되어 있으면, 예외가 발생될 때 디버깅하기 힘든 자원 누출이 초래될 수 있다! 처리 우선순위를 알려주는 함수가 하나 있고, 동적으로 할당한 Widget 객체에 대해 어떤 우선순위에 따라 처리를 적용하는 함수가 하나 있다고 가정하자. int priority(); void processWidget(std::shared_ptr pw, int prio..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 16 : new 및 delete 를 사용할 때는 형태를 반드시 맞추자 핵심 : new 표현식에 [ ] 를 썼으면, 대응되는 delete 표현식에도 [ ] 를 써야 한다. 마찬가지로, new 표현식에 [ ] 를 안 썼으면, 대응되는 delete 표현식에도 [ ] 를 쓰지 말아야 한다. 아래 코드는 어떤 부분이 잘못되었을까? std::string *stringArray = new std::string[100]; ... delete stringArray; stringArray 는 배열이므로, delete[] 를 사용하지 않으면 배열의 객체 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 15 : 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 핵심 : 1. 실제 자원을 직접 접근해야 하는 기존 API 들도 많기 때문에, RAII 클래스를 만들 때는 그 클래스가 관리하는 자원을 얻을 수 있는 방법을 열어 주어야 한다. 2. 자원 접근은 명시적 변환 혹은 암시적 변환을 통해 가능하다. 안전성만 따지면 명시적 변환이 대체적으로 더 낫지만, 고객 편의성을 놓고 보면 암시적 변환이 괜찮다. 다음의 경우처럼, RAII 클래스의 객체를 그 객제가 감싸고 있는 실제 자원으로 변환해야 하는 경우가 종종 생긴다. ..