실용주의 프로그래머 TIL 6일차

최정환·2022년 3월 24일
0

pragmatic-programmer

목록 보기
6/13

TIL (Today I Learned)

2022.03.24

오늘 읽은 범위

4장 실용주의 편집증

🎨 책에서 기억하고 싶은 내용을 써보세요.

  • 146p

    실용주의 프로그래머는 자기 자신 역시 믿지 않는다. 어느 누구도, 심지어는 자기 자신도 완벽한 코드를 작성할 수 없음을 알기 때문에 실용주의 프로그래머는 자신의 실수에 대비한 방어책을 마련한다.

마인드셋 +1

  • 148p

    제약에 의한 설계 (DBC)란 프로그램의 정확성을 위해 모듈의 권리와 책임을 문서화하고 합의하는데 초점을 맞춘다.

    1. 선행 조건(precondition) : 루틴이 호출되기 위해 참이어야 하는 것. 즉, 루틴의 요구 사항
    2. 후행 조건(postcondition) : 루틴이 자기가 할 것이라고 보장하는 것. 즉, 루틴이 완료되었을 때 세상 의 상태다. 무한 반복은 허용되지 않는다.
    3. 클래스 불변식(class invariant) : 루틴의 내부 처리 도중에는 불변식이 참이 아닐 수도 있지만, 루틴이 끝나고 호출자로 제어권이 반환되는 시점에는 불변식이 참이 되어야 한다

앞장에서 나왔을때 뭔지 궁금해서 찾아봤는데 그 내용을 잘 정리해놓았다 생각한다.

이 용어를 만든 사람이 이용하는 언어가 객체지향이라 이름이 클래스 불변식이라 붙었다한다. 용어가 의미하는 것은 상태(state)라고 하는데 클래스의 인스턴스와 비슷하다 한다.

  • 155p

    명령 줄에서 수를 하나 읽어서 sqrt를 호출하여 제곱근을 계산하고 결과를 출력하는 프로 그램을 생각해 보자. sqrt 함수는 선행 조건이 있다. 인자가 음수면 안 된다. 명령 줄에서 사 용자가 음수를 입력했을 때 그 값이 sqrt로 절대 전달되지 않게 하는 것은 호출하는 코드의 몫이다. 호출하는 코드에게는 많은 선택지가 있다. 종료할 수도 있고, 경고문을 보여 주고 다 른 숫자를 입력 받을 수도 있다. 혹은 숫자를 양수로 바꾼 다음 sqrt의 결괏값에 ‘i’를 덧붙여 서 허수를 출력할 수도 있다. 뭘 선택하든 그건 절대 sqrt가 신경 쓸 일이 아니다.
    제곱근 함수의 입력 범위를 sqrt 루틴의 선행 조건에 표현함으로써 입력의 정확성 확보라 는 짐을 호출자에게 지운다. 호출자가 마땅히 책임을 져야 한다. 그러면 여러분은 입력값이 범위 내에 있다는 전제하에 sqrt 루틴을 안전하게 설계할 수 있게 된다.

내가 생각한 DBC의 예시와 비슷해서 다행이라는 안도감과 내가 생각했던거 보다 쉬운 개념이라 다행이다.

  • 156p

    의미론적 불변식은 무언가가 품은 진짜 의미의 중심이 되어야 하며, 훨씬 역동적으로 변하는 비즈니스 규칙처럼 일시적인 정책에 영향을 받으면 안 된다. 우리가 의미론적 불변식이라는 용어를 사용하는 것은 이 때문이다.

책에 나온 의미론적 불변식의 예시는 하나의 거래로 두번의 똑같은 결제가 되면 안된다는 요구 사항은 일시적인 정책이나 비즈니스 정책이 아니다. 이걸 의미론적 불변식이라 한다.

나는 서비스가 지닌 상식적인 오류는 없어야한다는게 의미론적 불변식이라고 이해했다.

  • 163p

    단정문을 사용해 불가능한 상황을 예방해라.
    대부분의 언어 구현에서 조건이 참인지 거짓인지 확인 하는 assert의 일종을 찾을 수 있을 것이다.
    이런 단정문은 엄청나게 유용하다.
    매개 변수나 결과가 절대 null이어서는 안 된다면 명시적으로 검사하라.

assert (result != null);

하지만 진짜 오류 처리를 해야 하는 곳에 단정을 대신 사용하지는 말라. 단정은 결코 일어나면 안 되는 것들을 검사한다.

🍋 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

단정문이라는 개념을 처음 알게 되었다.
의미론적 불변식이 약간 이해가 가지 않는다. 당연하다고 생각하는게 당연하지 않을 수도 있는 경우가 존재할텐데 하지만 이것 또한 장의 마지막 즘에 나오는 '너무 먼 미래를 생각하며 설계하지 말아라'를 보고 그냥 이해하듯이 넘어가기로 했다.

🧐 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

0개의 댓글