프로그래밍
-
26. 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자프로그래밍/Effective c++ 2016. 3. 10. 16:38
이 함수는 주어진 밀번호 password 가 충분히 길 경우에 해당 비밀번호를 암호화하여 반환하는 함수이다.비밀번호가 너무 짧으면 logic_ error 타입의 예외를 던지도록 만들어졌다. std : :string encryptPassword(const std : :string& password){ using namespace std;string encrypted ; if (password.length() < MinimumPasswordLength) { throw logic_ error( "Password is too short " ) ;} ... //주어진 비밀번호를 암호화하여 encrypted //변수에 넣는 데 필요한 일들을 여기서 합니다. return encrypted;} 위와 같이 string ..
-
25. 예외를 던지지 않는 swap에 대한 지원도 생각해보자.프로그래밍/Effective c++ 2016. 3. 10. 16:37
1. std::swap이 해당 타입에 대해 느리게 동작할 여지가 있다면, swap 멤버함수를 제공하자. 단 이때 예외를 던지지 않아야한다. 2. swap 안에 클래스 템플릿이 들어가야 하는 경우, 현재 클래스 혹은 템플릿이 들어있는 네임스페이스와 같은 네임스페이스에 비멤버 swap을 만들어 넣는다. 그리고 1번에서 만든 swap함수를 이 비멤버함수가 호출하도록 한다.namespace WidgetStuff { ... template class Widget { ... }; ... template void swap(Widget& a, Widget& b) { a.swap(b); }} 3. 새로운 클래스(클래스 템플릿이 아니라)를 만들고 있다면 그 클래스에 대한 std::swap의 특수화 버전을 준비해둔다. 그리..
-
24. 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자프로그래밍/Effective c++ 2016. 3. 10. 16:37
다음과 같은 클래스가 있다. class Rational {public: Rational(int numerator =0, int denominator = 1);//생성자에 일부러 explicit을 붙이지 않음. int -> Rational로의 암시적 변환을 허용하기 위해. //분자 및 분모에 대한 접근용 함수 int numerator() const; int denominator() const; private: ...}; 만약 곱셈을 다음과 같이 멤버 함수로 선언한다면,class Rational {public: ... const Rational operator* (const Rational& rhs) const;}; Rational result = oneHalf * oneEight;result = oneHa..
-
1. 기초프로그래밍/확률과 통계 2016. 3. 10. 14:29
표본공간(Sample Space) : 모집단에서 표본을 취했을 때(통제시행) 나올 수 있는 모든 가능한 통계 결과의 집합. 상태공간 (State Space) : 숫자로 구성된 표본공간 = 확률 변수의 집합 (상태공간⊂표본공간) ex) 주사위의 표본공간 { 1,2,3,4,5,6 } 표본공간 분할 (Sample Space Partition) A1 A2 . . . An 사건 A1, A2, . . . , An 에 대해, 조건 1) 임의의 Ai , Aj 에 대해 서로 배반사건, 즉, Ai ∩ Aj = ø, i 6= j 조건 2) A1 ∪ A2 ∪ . . . ∪ An = S (표본공간) ⇒ A1, A2, . . . , An은 표본공간 분할. P(A ∩ B) = P(A) * P(B | A) (반드시 A가 선행사건)
-
23. 멤버 함수보다는 비멤버 비프렌드 함수만 더 가까워지자.프로그래밍/Effective c++ 2016. 3. 10. 14:07
멤버함수보다는 비멤버 비프렌트 함수를 많이 쓰는 것이 좋다.(다른 라이브러리를 사용하는 입장에서) 캡슐화: 최대한 기능을 추상화 하여, 내부 구현이 바뀌어도 외부 사용자의 사용에 영향을 적게 미치게 하는 것.따라서 멤버변수에 접근하는 함수가 적을수록 다른 함수에 영향을 적게 주어 사용자의 코드에 끼치는 영향이 줄어든다. 1. 캡슐화에 좋다. 멤버변수에 접근할 수 있는 함수의 수가 줄어들기 때문. 2. 패키징 유연성이 좋다.멤버함수는 한 파일 안에 클래스 속에만 선언할 수 있는 반면, 비멤버 비프렌드 함수는 네임 스페이스를 이용하면 새로운 함수가 필요할 때 새로운 파일을 만들어 같은 네임스페이스에 함수를 추가할 수 있다.또한 서로 다른 파일에 선언된 함수들은 같은 네임스페이스 안에 있다고 해도 필요한 부분..
-
22. 데이터 멤버가 선언 될 곳은 private 영역임을 명심하자프로그래밍/Effective c++ 2016. 3. 10. 14:06
데이터 멤버는 private로 선언하자.장점은 다음과 같다.1. 문법적으로 일관성 있는 데이터 접근 통로를 제공.2. 필요에 따라서는 세밀한 접근 제어가 가능.(const 또는 쓰기 전용)3. 클래스의 불변속성을 강화할 수 있을 뿐 아니라, 내부 구현의 융통성도 발휘할 수 있다. - public 또는 protected로 구현하는 순간 멤버를 삭제 또는 수정하면 사용자의 수많은 코드가 망가진다.. 따라서 내부 구현을 수정하기가 불가능.4. public으로 두면 변수를 쓴 위치를 추적할 수가 없다. getter setter라도 두자. protected는 public보다 절대로 더 보호받고 있는것이 아님!
-