프로그래밍/Effective C++(35)
-
타입변환이 모든 매개변수에 적용된다면? 그 함수는 비멤버로(effective c++ 24)
예시- 어떤 함수에 들어가는 모든 매개변수(this 포인터가 가리키는 객체도 포함해서)에 대해 타입 변환을 해 줄 필요가 있다면, 그 함수는 비 멤버 함수여야 한다.- 암시적 타입 변환에 대해 매개변수가 적용되려면 매개변수 리스트에 들어있어야 한다는 것.(말이 너무 어렵다!!!!) 해결 보통 프렌드로 비맴버 함수로 구현했었는데. 변환생성자에 explicit를 안쓰면 뭔가 깨림찍..
2015.08.25 -
멤버 함수보단 비멤버 비프렌드 함수를!(effective c++ 23)
클래스에서 여러 함수를 호출해야 할 때, 함수들을 모아서 불러주는 함수를 만들 수 있다. 예시 해당 클래스의 클리어에 관련된 모든 함수를 호출하는 함수를 만들고 싶다. 1안은 멤버 함수로 2안은 비멤버 함수로. 비멤버 함수의 이점캡슐화! 함수가 보이지가 않아요! - 어떤 것을 캡슐화하면, 외부에서 이것을 볼 수 없게 된다. - 그렇게 되면 (변경 자체가 영향을 줄 수 있는 범위가 ‘변경된 것을 볼 수 있는 것들’로 한정되기 때문에) 그것들을 바꿀 때 필요한 유연성이 커진다. - 즉, 이미 있는 코드를 바꾸더라도 제한된 사용자들 밖에 영향을 주지 않는 융통성을 확보할 수 있다. 패키징 유연성 - 해당 클래스의 관련된 기능을 구현하는 데 있어서 패키징 유연성(packaging flexibility)이 높아진..
2015.08.25 -
데이터 멤버는 private(effective c++ 22)
Public이면 왜 안 되는가? WHY?문법적 일관성 – 항목 18 참조데이터 멤버가 public이 아니라면, 외부에서 접근할 수 있는 유일한 수단은 멤버 함수함수를 사용하면 데이터 멤버의 접근성에 대해 정교한 제어를 할 수 있다.캡슐화(encapsulation) 정리 데이터 멤버는 private 멤버로 선언하자. - 문법적으로 일관성 있는 데이터 접근 통로를 제공할 수 있다.- 세밀한 접근 제어도 가능- 클래스의 불변속성을 강화- 내부 구현의 융통성 발휘 protected는 public보다 더 많이 ‘보호’ 받고 있는 것이 절대로 아니다.
2015.08.25 -
함수에서 객체 반환시 참조로 X(effective c++ 21)
참조에 의한 전달모든 경우에서 참조에 의한 전달만을 사용하려고 해서는 안 된다. 문제점‘값에 의한 전달’에 숨겨진 효율 문제를 알아챈 후에, 나머지 모든 부분에서 ‘참조에 의한 전달’만을 사용하려 할 경우 문제가 생긴다.실제로 있지도 않은 객체의 참조자를 넘기려는 상황이 올 수도 있다. 새로운 객체를 반환operator*가 참조자를 반환하도록 만들어졌다면, 이 함수가 반환하는 참조자는 반드시 이미 존재하는 Rational 객체의 참조자여야 한다. 문제점참조자는 존재하는 객체에 붙는 ‘또 다른’ 이름이다.반환될 객체에 대한 참조자를 operator*에서 반환할 수 있으려면, 그 객체를 직접 생성해야 한다.함수 수준에서 새로운 객체를 만드는 방법은 2가지이다.( 스택에 생성, 힙에 생성 ) 스택에 만드는 방..
2015.08.23 -
클래스 설계는 타입 설계와 같이 보자(effective c++ 19)
효과적인 클래스 설계객체 지향 프로그래밍 언어와 마찬가지로 C++에서 새로운 클래스를 정의한다는 것은 새로운 타입을 하나 정의하는 것과 같다. 고려 사항문법(syntax)이 자연스럽고 의미구조(semantics)가 직관적이며, 효율적인 구현 클래스 설계에 신경써야 할 부분새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가?- 객체 지향 프로그래밍 언어와 마찬가지로 C++에서 새로운 클래스를 정의한다는 것은 새로운 타입을 하나 정의하는 것과 같다. 객체 초기화는 객체 대입과 어떻게 달라야 하는가?- 생성자와 대입 연산자의 동작 및 둘 사이의 차이점을 결정짓는 요소이다..- 초기화와 대입을 헷갈리지 않는 것이 가장 중요하다. 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 ..
2015.08.20 -
인터페이스 설계방법. 제대로는 쉽게, 엉터리론 어렵게(effective c++ 18)
인터페이스 설계란클래스의 접근 권한을 이야기 하는 것이 아닌, 사용자와 제품간의 접점을 말한다. 여기서는 클래스나 함수, 템플릿의 사용 환경 등이 속한다. 좋은 설계제대로 쓰기는 쉽게, 잘못 쓰기는 어렵게 설계하는 것이 바람직하다. 일관성을 지키는 설계인터페이스를 만들 때 기존에 제공되던 공통인터페이스를 일관성 있게 따르는 것이 바람직하다. 이는 사용자 측에서 뭔가를 외우지 않고 기존에 하던 대로 편하게 사용 할 수 있으므로 접근성이 높다. (STL, .NET등도 최대한 이와 같이 하려고 노력하였다.) 실수를 방지하는 설계만일 사용자가 인터페이스를 잘못 사용하고 있다면 알기 쉽게 컴파일 에러가 나도록 만든다. 방법1. 새로운 타입을 들여와 인터페이스를 강화한다.2. const의 활용 주의점새로운 타입을 ..
2015.08.20