실용주의 프로그래머라는 책을 읽으며, 삼색볼펜 독서법을 적용. 줄 친 내용에 대한 단상을 정리합니다.
삼색볼펜 스터디란? 책에서 중요하다고 생각되는 문장을 빨강 > 파랑 > 검정 순으로 줄을 치며 공부하는 방식.
🔴 가장 중요한 문장
🔵 그래도 꽤 중요한 문장
⚫ 그럭저럭 내 마음에 와닿은 문장
🤔 짧은 생각 (단상은 단상일뿐!!)
볼드체 중요한 문장은 아니지만 단락 구분 표시
Topic 25. 단정적 프로그래밍
🔵 자기 비난에는 사치성이 있다. 우리가 자신을 비난할 때, 다른 사람은 우리를 비난할 권리가 없다고 우리는 느낀다. (오스카 와일드. 도리안 그레이의 초상)
🤔 남들도 나도 나를 비난할 권리가 없다는 것보다야 낫겠으나… 나에 대해 관대해지지 않도록 주의하자.
⚫ ‘하지만 물론 그런 일은 절대 일어나지 않을 거야.’라는 생각이 든다면 그런 일을 확인하는 코드를 추가하라.가장 간단하게 추가하는 방법은 단정문(Assertion)을 사용하는 것이다.
🤔 여기서 말하는 단정문은 잘 사용해본적이 없는 것 같다. 흠…뭐 비슷한 동작을 직접 검증한 적은 많지만 공식적으로 제공하는 단정문을 좀 잘 써보도록 해야겠다.
⚫ 하지만 진짜 오류 처리를 해야 하는 곳에 단정을 대신 사용하지는 말라. 단정은 결코 일어나면 안 되는 것들을 검사한다.
🤔 비즈니스 오류를 내뱉어야 하는 곳에선 그냥 하던대로 하자..!!
단정과 부작용
⚫ 단정문을 쓸 때도 조건을 평가하는 코드에 부작용이 있다면 이런 일이 발생할 수 있다.
🤔 단정문은 최대한 심플하게. 복잡한 조건 체크나 비즈니스 코드에 영향을 주는 책임을 져서는 안된다.
단정 기능을 켜 둬라
⚫ 여러분의 첫 번쨰 방어선은 가능한 오류를 모두 검사하는 것이고, 그 다음은 그러고도 놓친 것을 잡아내기 위해 단정을 사용하는 것이다.
🤔 단정문이 운영코드에 있어봤자, 속도가 얼마나 느려질까? 코드가 물론 더러워보일수는 있겠지만, 그건 지혜롭게 잘 짜보자.
Topic 26. 리소스 사용의 균형
⚫ 자신이 시작한 것은 자신이 끝내라.
⚫ 이 팁은 많은 경우 쉽게 적용하 수 있다. 리소스를 할당하는 함수나 객체가 리소스를 해제하는 책임 역시 져야 한다는 뜻일 뿐이다.
⚫ 잘 모르겠을 땐 언제나 스코프를 줄이는 편이 낫다.
🤔 한번 할당한 리소스는 눈에 보이는 곳에서 바로바로 해제하는 것이 혹시 모를 사이드 이펙트를 줄일 수 있다. 흔히 리소스라고 하면 파일 입출력 정도로 생각할때가 있는데, 뒤에서 줄치긴 했지만 네트워크 연결이나 트랜잭션, 디비 커넥션 등도 포함할 수 있겠다.
중첩 할당
⚫ 리소스를 할당한 순서의 역순으로 해제하라.
🤔 재귀함수를 생각하면 될듯. 재귀함수는 가장 최근에 호출당한 영역부터 반환하니깐.
⚫ 코드의 여러 곳에서 동일한 구성의 리소스들을 할당하는 경우에는 언제나 같은 순서로 할당해야 교착 가능성을 줄일 수 있다.
🤔 결국 리소스를 할당한다는건 공유 자원을 점유 한다는 의미이기 때문에, 일관성을 지켜야 교착가능성이 줄어든다.
🔵 어떤 종류의 리소스를 사용하고 있는지는 중요하지 않다. 트랜잭션이건 네트워크 연결이건 메모리건 파일 혹은 스레드, GUI 요소건 모두 기본 패턴을 적용할 수 있다.
🤔 난 리소스 할당 할 일이 많이 없으니까. 라고 안일하게 생각했다가 흠칫 했던 문장. 하다못해 스레드 조차도 리소스라고 볼 수 있으니, 좀 더 신경 써야겠다.
균형을 점검하기
🔴 실용주의 프로그래머는 자신을 포함해서 아무도 믿지 않는다.
🤔 자신도 못 믿는다는 점에선 나와 같지만, 자신을 포함해서 아무도 믿지 않는다고 모두 실용주의 프로그래머는 아닐 것이다.
⚫ 우리는 언제나 정말로 리소스가 적절하게 해제되었는지 실제로 점검하는 코드를 작성하는 것을 좋아한다.
🤔 왜냐면 이렇게까지 좋아하지는 않거덩…
연습 문제 18
⚫ 일부 자바 개발자들은 어떤 객체를 사용한 다음에는 반드시 그 객체를 가리켰던 변수를 NULL로 설정한다. 왜 이것이 좋은 생각일까?
-> 변수를 NULL로 설정하면 그 변수가 가리키던 객체를 가리키는 포인터의 수가 하나 줄어든다. 포인터 개수가 0이 되면 그 객체는 가비지 컬렉션 대상이 된다. 실행 시간이 길어서 메모리 사용량이 시간이 지남에 따라 늘어나지 않도록 신경 써야 하는 프로그램이라면 변수에 NULL을 설정하는 것이 중요할 수 있다.
🤔 오..이렇게까지 디테일하게 코드를 짜는 건 보지 못하긴 했다. 좀 더 관련해선 찾아봐서 코드의 가독성과 효율성을 따져가지고 한번 써먹어보던가 해야겠다.
Topic 27. 헤드라이트를 앞서가지 말라
🔵 작은 단계들을 밞아라. 언제나.
⚫ 언제나 신중하게 작은 단계들을 밟아라.
🤔 뭔 소린가 헀는데, 개발에 집중한답시고 테스트코드도 대충 짜고, 주변과 소통 안하면서 쭈욱 밀고 나가지 말라는 걸로 알아 들었다. 딱 맘 잡고 집중해서 기능개발 하는 것보다 맘 편한 일이 또 있겠냐만은…막상 그러면 나중에 수습해야하는 일이 좀 많은가?!
⚫ 우리는 미래의 유지 보수를 고려해서 설계해야 하지 않느냐고? 맞다. 하지만 여러분이 볼 수 있는 미래까지만 고려해야한다.
🤔 또 다른 걸로는 너무 미래를 생각해서 복잡하게 생각하지 말자는 것. 지금 당장 예측 가능한 수준에서만 앞서 말한 원칙들을 가지고 개발하자.
'성장의 흔적 > 실용주의 프로그래머를 읽고' 카테고리의 다른 글
[실용주의 프로그래머]를 읽고 #9. 4장. 실용주의 편집증. Topic 23, 24 (0) | 2025.02.22 |
---|---|
[실용주의 프로그래머]를 읽고 #8. 3장. 기본 도구. Topic 16 ~22 (0) | 2025.02.20 |
[실용주의 프로그래머]를 읽고 #7. 2장. 실용주의 접근법. Topic 14, 15 (1) | 2025.02.08 |
[실용주의 프로그래머]를 읽고 #6. 2장. 실용주의 접근법. Topic 12, 13 (0) | 2025.02.06 |
[실용주의 프로그래머]를 읽고 #5. 2장. 실용주의 접근법. Topic 10, 11 (0) | 2025.02.04 |