SlideShare une entreprise Scribd logo
1  sur  11
Effective C++ 정리
Chapter 1, chapter2
C++를 언어들의 연합체로 바라보는 안목
• C + 클래스 != C++
• 템플릿은 프로그램 설계에 새로운 사고방식 제공
• STL은 확장성에 대한 지평을 염
• C++은 다중 패러다임 프로그래밍 언어
->절차적, 객체지향, 함수식, 일반화, 메타프로그래밍 개념까지 지원
-> C++의 효과적인 프로그래밍을 위해서는 4가지의 특징이 적재
적소에 잘 어우러져야 한다.
#define 보다 const, enum ,inline
• 매크로는 컴파일러에게 넘어가기 전 상수로 바꾸어 버린다
->기호 테이블에 이름이 없기에 디버깅이 힘들다.
• 따라서 매크로 대신 상수를 쓰는 것이 좋다 – const
• 클래스 상수를 #define으로 만들면 안 된다.
->쓸 수도 없고, 객체지향의 캡슐화 혜택도 받을 수 없다.
• 기존 메크로를 이용한 함수가 아닌 템플릿을 이용해야 한다.
-> 매크로를 될 수 있으면 적게 쓰는 것이 좋다.
Const를 적극적으로 활용하자
• Const를 사용하여 컴파일러가 실수하는 부분을 줄일 수 있다.
->외부 변경을 불가능하게 함.
• Const를 쓰면 어떤 값이 불변이어야 한다는 의도파악이 쉽다.
• 정적 멤버, 비정적 데이터 멤버 모두 상수로 선언 가능
• 포인터와 포인터가 가리키는 대상에도 const 사용이 가능하다.
• 함수 반환 값에 const를 이용하면 효율과 안정성을 가진다.
• 멤버 함수에 붙는 const 키워드는 해당 멤버 함수가 상수 객체에
대해 호출될 함수라는 것을 의미
객체를 사용하기 전에 반드시 초기화
• 초기화를 하지 않으면 그것에 대해 계속 신경을 써주어야 함
-> 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화를
해주는 것.
• 생성자에서 그 객체의 모든 것을 초기화하자(대입과 혼동 X)
• 클래스 데이터 멤버는 모두 초기화 리스트로 초기화 할 것
• 상수이거나 참조자로 되어 있는 데이터 멤버의 경우는 반드시 초
기되어야 한다.
-> 상수와 참조자는 대입 자체가 불가능
C++이 만들어 호출해버리는 함수들 주의
• 컴파일러가 만들어낸 복사 생성자, 복사 대입연산자가 하는 일은
원본 객체의 비정적 데이터를 사본 객체쪽으로 단순 복사
• 컴파일러가 자동 생산하는 것이 아닌, 생성자 인자가 꼭 필요한
클래스를 만든다면 컴파일러가 눈치 없이 기본 생성자를 만들지
는 않는다.
• 컴파일러가 만들어낸 함수가 필요없으면 확실히 이들의 사용을
금해버리는게 좋다.
->컴파일러가 자동으로 함수생산하는 것을 막으려면 private 멤
버로 선언하면 된다.(외부로부터의 호출 차단)
다형성을 가진 기본 클래스에서는 소멸자
를 반드시 가상소멸자로 선언
• 대체로 가상 소멸자를 선언하는 것은 그 클래스에 가상 함수가
하날도 들어 있는 경우로 한정할 것.
• 추상 클래스는 기본 클래스로 쓰이고, 가상 소멸자를 가지는게
원칙이다.
• 순수 가상 함수가 있으면 그것이 바로 추상 클래스다.
->즉 추상 클래스는 순수 가상 소멸자를 선언해야하고, 기본 클래
스가 아니거나, 다형성을 갖지 않는 클래스에는 가상 소멸자를
선언하지 말아야 한다.
예외의 상황이 소멸자를 떠나지 못하게 막
기
• 소멸자에서는 예외가 빠져나가지 못하도록 해야 한다.
• 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 그
처리는 소멸자에서 어떻게든 처리해야 한다.
• 예외에 대한 사용자의 반응이 필요하더라도 소멸자가 아닌 보통
의 함수로 제공해야 한다.
• 예외를 그냥 무시하는 것은 좋지 않다.
->무엇이 잘못됐는지 알려주는 정보를 무시하기 때문이다.
• 소멸자에서 적절하게 처리해야 한다.
객체 생성 및 소멸 과정 중에는 절대로 가
상 함수를 호출하지 말 것
• 파생 클래스 객체가 생성 될 때 그 객체의 기본 클래스 부분이 파
생 클래스 부분보다 먼저 호출
-> 기본 클래스가 생성 중에는 아직 파생 클래스가 생성이 되지
않았는데, 가상 함수를 호출하는 것은 초기화 하지 않은 어떤것
에 대한 접근을 하겠다는 것, 매우 위험.
• 기본 클래스 생성 과정에는 가상함수가 먹히지 않는다.
• 생성자, 소멸자에서 가상함수를 호출하면 안 된다.
• 기본클래스 생성 중에는 생성자나 소멸자에 해당하는 클래스의
파생 클래스 쪽으로는 내려가지 않는다.
Operator= 에서는 자기대입에 대한 처리
가 빠지지 않도록 해야한다
• 여러 곳에서 하나의 객체를 참조하는 상태 -> 중복 참조의 경우에
대비해야 한다.
• 자기 참조의 가능성이 있는 코드에 대비해야 한다.
-> 어떤 객체가 그 자신에 대입되는 경우를 제대로 처리해야한다.
• 원본과 복사대상 객체의 주소비교, 문장의 순서 조정, 복사 후 맞
바꾸기 기법 등등의 방법이 있다.
-> 두 개 이상의 객체에 대해 동작하는 함수가 있다면, 이 함수에
넘겨지는 객체들이 사실 같은 객체인 경우에 동작을 반드시 확인
해야한다.
객체의 모든 부분을 빠짐없이 복사할 것
• 객체 복사 함수 -> 복사 생성자, 복사 대입 연산자
• 혹여 복사 되지 않는 부분이 있어도 컴파일러는 알려주지 않음
• 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본
클래스 부분을 빠드리지 말고 복사해야 한다.
• 클래스의 복사 함수 두 개 구현 시 한쪽을 이용해 다른 쪽을 구현
하려는 짓은 하지 말 것.
• 어떤 클래스가 상속한 기본 클래스의 복사 함수가 있다면 그 함
수도 호출을 해주어야 한다.

Contenu connexe

Tendances

More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinDong Chan Shin
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3현찬 양
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2현찬 양
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3성연 김
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4성연 김
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2성연 김
 
Effective c++chapter8
Effective c++chapter8Effective c++chapter8
Effective c++chapter8성연 김
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디quxn6
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2세빈 정
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 

Tendances (20)

More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
5 6 1
5 6 15 6 1
5 6 1
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
Effective c++chapter8
Effective c++chapter8Effective c++chapter8
Effective c++chapter8
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
Exception&log
Exception&logException&log
Exception&log
 

Similaire à Effective c++ 정리 1~2

Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4문익 장
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
Effective cpp
Effective cppEffective cpp
Effective cppTonyCms
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummarySeungYeonChoi10
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
연산자 오버로딩
연산자 오버로딩연산자 오버로딩
연산자 오버로딩수빈 박
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summarySehyeon Nam
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptInjae Lee
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++Min-soo Park
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinDong Chan Shin
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차Injae Lee
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
Effective java
Effective javaEffective java
Effective javaHaeil Yi
 
M1 2 1
M1 2 1M1 2 1
M1 2 1nexthw
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4Dong Chan Shin
 

Similaire à Effective c++ 정리 1~2 (20)

Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
Effective cpp
Effective cppEffective cpp
Effective cpp
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
연산자 오버로딩
연산자 오버로딩연산자 오버로딩
연산자 오버로딩
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4ppt
 
1 2 1
1 2 11 2 1
1 2 1
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
Effective java
Effective javaEffective java
Effective java
 
M1 2 1
M1 2 1M1 2 1
M1 2 1
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4
 

Effective c++ 정리 1~2

  • 2. C++를 언어들의 연합체로 바라보는 안목 • C + 클래스 != C++ • 템플릿은 프로그램 설계에 새로운 사고방식 제공 • STL은 확장성에 대한 지평을 염 • C++은 다중 패러다임 프로그래밍 언어 ->절차적, 객체지향, 함수식, 일반화, 메타프로그래밍 개념까지 지원 -> C++의 효과적인 프로그래밍을 위해서는 4가지의 특징이 적재 적소에 잘 어우러져야 한다.
  • 3. #define 보다 const, enum ,inline • 매크로는 컴파일러에게 넘어가기 전 상수로 바꾸어 버린다 ->기호 테이블에 이름이 없기에 디버깅이 힘들다. • 따라서 매크로 대신 상수를 쓰는 것이 좋다 – const • 클래스 상수를 #define으로 만들면 안 된다. ->쓸 수도 없고, 객체지향의 캡슐화 혜택도 받을 수 없다. • 기존 메크로를 이용한 함수가 아닌 템플릿을 이용해야 한다. -> 매크로를 될 수 있으면 적게 쓰는 것이 좋다.
  • 4. Const를 적극적으로 활용하자 • Const를 사용하여 컴파일러가 실수하는 부분을 줄일 수 있다. ->외부 변경을 불가능하게 함. • Const를 쓰면 어떤 값이 불변이어야 한다는 의도파악이 쉽다. • 정적 멤버, 비정적 데이터 멤버 모두 상수로 선언 가능 • 포인터와 포인터가 가리키는 대상에도 const 사용이 가능하다. • 함수 반환 값에 const를 이용하면 효율과 안정성을 가진다. • 멤버 함수에 붙는 const 키워드는 해당 멤버 함수가 상수 객체에 대해 호출될 함수라는 것을 의미
  • 5. 객체를 사용하기 전에 반드시 초기화 • 초기화를 하지 않으면 그것에 대해 계속 신경을 써주어야 함 -> 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화를 해주는 것. • 생성자에서 그 객체의 모든 것을 초기화하자(대입과 혼동 X) • 클래스 데이터 멤버는 모두 초기화 리스트로 초기화 할 것 • 상수이거나 참조자로 되어 있는 데이터 멤버의 경우는 반드시 초 기되어야 한다. -> 상수와 참조자는 대입 자체가 불가능
  • 6. C++이 만들어 호출해버리는 함수들 주의 • 컴파일러가 만들어낸 복사 생성자, 복사 대입연산자가 하는 일은 원본 객체의 비정적 데이터를 사본 객체쪽으로 단순 복사 • 컴파일러가 자동 생산하는 것이 아닌, 생성자 인자가 꼭 필요한 클래스를 만든다면 컴파일러가 눈치 없이 기본 생성자를 만들지 는 않는다. • 컴파일러가 만들어낸 함수가 필요없으면 확실히 이들의 사용을 금해버리는게 좋다. ->컴파일러가 자동으로 함수생산하는 것을 막으려면 private 멤 버로 선언하면 된다.(외부로부터의 호출 차단)
  • 7. 다형성을 가진 기본 클래스에서는 소멸자 를 반드시 가상소멸자로 선언 • 대체로 가상 소멸자를 선언하는 것은 그 클래스에 가상 함수가 하날도 들어 있는 경우로 한정할 것. • 추상 클래스는 기본 클래스로 쓰이고, 가상 소멸자를 가지는게 원칙이다. • 순수 가상 함수가 있으면 그것이 바로 추상 클래스다. ->즉 추상 클래스는 순수 가상 소멸자를 선언해야하고, 기본 클래 스가 아니거나, 다형성을 갖지 않는 클래스에는 가상 소멸자를 선언하지 말아야 한다.
  • 8. 예외의 상황이 소멸자를 떠나지 못하게 막 기 • 소멸자에서는 예외가 빠져나가지 못하도록 해야 한다. • 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 그 처리는 소멸자에서 어떻게든 처리해야 한다. • 예외에 대한 사용자의 반응이 필요하더라도 소멸자가 아닌 보통 의 함수로 제공해야 한다. • 예외를 그냥 무시하는 것은 좋지 않다. ->무엇이 잘못됐는지 알려주는 정보를 무시하기 때문이다. • 소멸자에서 적절하게 처리해야 한다.
  • 9. 객체 생성 및 소멸 과정 중에는 절대로 가 상 함수를 호출하지 말 것 • 파생 클래스 객체가 생성 될 때 그 객체의 기본 클래스 부분이 파 생 클래스 부분보다 먼저 호출 -> 기본 클래스가 생성 중에는 아직 파생 클래스가 생성이 되지 않았는데, 가상 함수를 호출하는 것은 초기화 하지 않은 어떤것 에 대한 접근을 하겠다는 것, 매우 위험. • 기본 클래스 생성 과정에는 가상함수가 먹히지 않는다. • 생성자, 소멸자에서 가상함수를 호출하면 안 된다. • 기본클래스 생성 중에는 생성자나 소멸자에 해당하는 클래스의 파생 클래스 쪽으로는 내려가지 않는다.
  • 10. Operator= 에서는 자기대입에 대한 처리 가 빠지지 않도록 해야한다 • 여러 곳에서 하나의 객체를 참조하는 상태 -> 중복 참조의 경우에 대비해야 한다. • 자기 참조의 가능성이 있는 코드에 대비해야 한다. -> 어떤 객체가 그 자신에 대입되는 경우를 제대로 처리해야한다. • 원본과 복사대상 객체의 주소비교, 문장의 순서 조정, 복사 후 맞 바꾸기 기법 등등의 방법이 있다. -> 두 개 이상의 객체에 대해 동작하는 함수가 있다면, 이 함수에 넘겨지는 객체들이 사실 같은 객체인 경우에 동작을 반드시 확인 해야한다.
  • 11. 객체의 모든 부분을 빠짐없이 복사할 것 • 객체 복사 함수 -> 복사 생성자, 복사 대입 연산자 • 혹여 복사 되지 않는 부분이 있어도 컴파일러는 알려주지 않음 • 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본 클래스 부분을 빠드리지 말고 복사해야 한다. • 클래스의 복사 함수 두 개 구현 시 한쪽을 이용해 다른 쪽을 구현 하려는 짓은 하지 말 것. • 어떤 클래스가 상속한 기본 클래스의 복사 함수가 있다면 그 함 수도 호출을 해주어야 한다.