{ 이번 항목에서 이 문구가 제일 마음에 와 닿는다. "나누고 정복하라. 작은 클래스가 만들기도 쉽고, 얻기도 쉬울 뿐만 아니라 테스트하고 사용하기도 쉬우며, 다양한 상황에서 활용하기에도 편리하다." 왜 이 부분이 와 닿았냐면, 나는 보통 주말에 청소를 한다. 여러가지 이유가 있겠지만, 아마도 빨래를 할 수 있는 날이기 때문이다. 그래서 바닥을 쓸거나 닦거나 책정리 나 쓰래기를 정리하는것을 몰아서 처리 한다. 이것은 청소 할 때마다 불편했다. 왜냐하면 좋지 못한 환경에서 지내야 하고, 청소 할 때 마다 많은 먼지가 발생하고, 이 먼지들이 여러곳에 달라 붙는다. 다시 이 먼지들을 털어내면서 더 많은 시간이 잡아 먹게 된다. 이제야 나는 청소를 할 수 있다면, 조금씩 청소를 해야 한다고 생각 했고, 각 파트..
C++ 코딩의 정석 검색 결과
{ 왜냐하면 클래스를 어정쩡하게 만들면, 가독성이나 각종 논리적 에러에 혼란이 오기 때문이다. 일반적으로 각 상황에 맞는 클래스 작성법을 설명한다. 값들을 저장하는 클래스 1. 복사 할당자, 복사 생성자가 존재한다. 2. 가상 함수가 없다. 3. 클래스의 객체 자체가 직접 사용 된다. 4. 기본 자료형 처럼 쓰인다. 기반 클래스 1. 공용이면서 가상이거나 보호된 가상이 아닌 소멸자가 있다. 2. 가상 함수가 있다. 3. 인스턴스는 대개 힙이나 스마트 포인터로 만든다. 특성 클래스 1. typedef와 정적 함수만 있으며. 상태 변경이 불가능하다. 2. 함수 오버로딩의 분기 조건에 많이 쓰인다. 정책 클래스 1. 특정한 클래스들에게 어떻게 구현해야 되는지 강제하기 위해서 사용 한다.(복사 할당, 생성이 안..
{ 알다시피 저 연산자들은 컴파일러에서 특별히 다루어 지며, 최적화가 이루어져 "단축 평가"가 되는 연산자 들이다. 만약 저 연산자들을 오버로딩 한다면, "단축 평가"는 무너지게 되고, 단축 평가를 예상하고 만들었던 코드를 단축평가가 없는 상태로 다시 만들어야 한다. 이래나 저래나 저 연산자들 까지 오버로딩 한다면, "이거 내가 잘짜고 있는거 맞나?" 라고 생각해 봐야 할 것이다. }
{ 왜냐하면, 헷갈리기 때문이다. 그것도 매우 헷갈리기 때문이다. 지금까지의 짧은 코딩 경력으로도 헷갈리는 코드는 좋지 못한 코드라는 것을 알 수 있었다. 연산자의 경우 "기호" 적인 부분을 재정의 하는 것이기 때문에, "기호"만으로 그 함수를 파악해야만 한다. 그런데 그 "기호"처럼 행동하지 않는다면, 어떻게 되겠는가? 다시 다 뜯어 봐야 할 것이다. 이것은 시간 낭비이다. 자신만 볼 코드이기 때문에 상관없다고 하자. 정말 자기 자신은 그 코드를 보고도 헷갈리지 않을 자신이 있을까? 자신이 만큼 코드라도 일주일간만 안보면, 새롭게 느껴지는게 이 쪽 세계인데, 정말 그럴지 의구심이 든다. "-" 연산자가 "-"의 의미를 지니지 않고, "+" 의 의미를 지닌다고 생각해 보면 쉽게 이해가 간다. 어쩔 수 없..
{ 이번 항목은 함수의 매개변수를 무엇으로 정하는게 좋을까? 란 말과 같다. 매개변수야 필요한 것을 필요한 만큼 인자로 만들면 되지 않을까? 라고 생각 할 수도 있겠지만, C++ 에선 "클래스" 라는 개념이 있기 때문에, 좀 까다로운 것들이 많이 있다. 예를 들자면, 자신의 복사 갯수를 카운팅하는 객체, 소유권 개념이 있는 객체, 스마트 포인터, 다른 것을 카운팅 하는 객체, 데이터 크기가 매우 큰 객체, 또는 매우 작은 객체, 복사 되지 않는 객체, 10개까지만 복사 되는 객체 등... 사용 상에 필요한 용도로 만들어진 이러한 객체들은 "함수의 매개변수로 어떻게 전달 할까?" 를 고민해 봐야 한다. 또는 함수 내부에서 변경될 수 있는가? 에 대한 고민도 같이 해서 const 를 붙여야 하는가? 말이야 ..
{ 이번 항목은 그냥 예만 보여줘도 손 쉽게 이해 할 수 있을 것이라고 생각 한다. // 내부 #include 가드 예 #ifndef FOO_H_INCLUDE_ #define FOO_H_INCLUDE_ // 파일에 대한 내용 #endif // FOO_H_INCLUDE_ // 외부 #include 가드 웨 #ifndef FOO_H_INCLUDE_ #define FOO_H_INCLUDE_ #include "foo.h" #endif // FOO_H_INCLUDE_ 가드의 목적은 무엇인가? 가드의 목적은 중복 #include 를 막음으로써, 단일 정의 규칙을 지키기 위해서이다. C 컴파일러든 C++ 컴파일러든 단일 정의 규칙을 따른다. 만약 지키지 않을 경우 재정의 에러, 즉 컴파일 에러를 벹어 내며 컴파일이 ..
최근댓글