#cppcon16 Using Types Effectively / Ben Deane

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-01.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-02.png

왜 복잡할까? ConnectionState에 따라 유효한 멤버 변수가 달라진다. 예를 들면 Connected 상태일 때만 m_id 변수가 유효하다. 하지만 구분 없이 모두 정의했다. 선언만으로 모든 정보를 알 수가 없다. 호출하는 코드를 봐야 한다. 아~ Connected 상태로 변경하고 m_id를 할당하는구나.

std::variant 클래스를 사용한 코드는 단순하다. 코드 선언에 모든 정보가 담겨있다. 명료하다.

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-03.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-04.png

타입에 대한 정의를 다르게 했다고 디스하려는 게 아니다. 표현할 수 있는 값의 집합으로 바라보자.

이 정의로 바라보면 안 보이던 게 보인다. 머릿속에서 딱 집어서 표현할 수 없었던 것. 복잡성이 보인다. 위에서 예로 든 Connection 구조체를 보면 std::variant 클래스를 사용해서 가능한 값을 + 연산으로 낮췄다. 다른 예제는 + 연산이 아니라 * 연산으로 가능한 값을 계산해야 한다.

그리고 partial function도 보이기 시작한다. 어라 실패까지 합치면 257개가 돼야 하는데. 현재 256개만 표현할 수 있네. total function으로 바꾸려면 boost::optional 같은 걸 발라야 하나?

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-05.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-06.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-07.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-08.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-09.png

퀴즈 재미있다. 얼마나 많은 값을 가질 수 있는가?

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-10.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-11.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-12.png

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-13.png

타입으로 제약을 만드는 패턴. 타입으로 만들어서 잘못된 데이터가 input으로 들어갈 리가 없다. 컴파일 에러 발생.

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-14.png

그다음엔 이름 짓는 퀴즈. type signature를 보고 이름을 짓는다. 크크. 퀴즈 풀다가 나도 함정에 걸렸다. 맞다. partial function. 벡터가 비었을 때, 부재를 나타낼 수 있는 값이 없다.

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-15.png

퀴즈 재미있었다. Ben Deane 아저씨는 퀴즈 디자인도 잘한다. 지루한 거 없이 다 재미있었다. type signature만 보고도 어떤 함수인지 대답할 수 있었다. partial function인지도 타입만으로 알 수도 있었다.

/pnotes/assets/2017-01-16-cppcon16-using-types-effectively-ben-deane-16.png

타입 믿고 가자.

자료


크리에이티브 커먼즈 라이선스
Feedback plz <3 @ohyecloudy, ohyecloudy@gmail.com
|