본문 바로가기

노마드코더13

4장. 실용주의 편집증 오늘 읽은 범위 4장. 실용주의 편집증 기억하고 싶은 내용 여러분은 완벽한 소프트웨어를 만들 수 없다. Topic 23. 계약에 의한 설계 DBC(Degign By Contract) 선행 조건: 루틴이 호출되기 위해 참이어야 하는 것 후행 조건: 루틴이 자기가 할 것이라고 보장하는 것 클래스 불변식: 호출자의 입장에서 볼 때는 이 조건이 언제나 참인 것을 클래스가 보장하는 것 계약으로 설계하라. DBC 구현 코드를 작성하기 전에 유효한 입력 범위가 무엇인지, 경계 조건이 무엇인지, 루틴이 뭘 전달한다고 약속하는지, 혹은 더 중요하게는 무엇을 약속하지 않는지 등을 나열하는 것만으로도 더 나은 소프트웨어를 작성하는 데에 엄청난 도움이 된다. DBC와 일찍 멈추기 DBC 방식을 하용하여 선행 조건과 후행 조건.. 2022. 5. 19.
3장. 기본 도구 오늘 읽은 범위 3장. 기본 도구 기억하고 싶은 내용 Topic 16. 일반 텍스트의 힘 우리는 지식을 설계와 구현, 테스트, 문서로 표현하며, 지식을 저장하는 최고의 포맷이 일반 텍스트(plain text)라고 믿는다. 지식을 일반 텍스트로 저장하라. 지원 중단에 대한 보험 사람이 읽을 수 있는 형태의 데이터와 그 자체만으로 의미가 드러나는 데이터는 다른 어떤 형태의 데이터보다 더 오래 살아남을 것이다. 기존 도구의 활용 버전 관리 시스템에서 일반 텍스트를 보존해 줄 것이다. Topic 17. 셸 가지고 놀자 텍스트 파일을 다루는 프로그래머에겐 명령어 셸이 작업대이다. 명령어 셸의 힘을 사용하라 자신만의 셸 색깔 조함 설정 프롬프트 설정 별칭(alias)과 셸 함수 명령어 자동 완성 Topic 18. .. 2022. 3. 23.
2장. 실용주의 접근법 오늘 읽은 범위 2장. 실용주의 접근법 기억하고 싶은 내용 좋은 설계는 나쁜 설계보다 바꾸기 쉽다. 결합도를 줄이는 이유: 관심사를 분리함으로써 각각이 더 바꾸기 쉬워지기 때문이다. 단일 책임 원칙: 요구 사항이 바뀌더라도 모듈 하나만 바꿔서 반영할 수 있기 때문이다. 이름 짓기의 중요성: 이름이 좋으면 코드가 읽기 쉬워지고, 코드를 바꾸려면 코드를 읽어야 하기 때문이다. ETC는 규칙이 아니라 가치이다. DRY: 반복하지 말라. DRY를 따르지 않으면 똑같은 것이 두 군데 이상에 표현될 것이다. 하나를 바꾸면 나머지도 바꿔야 함을 기억해야 한다. DRY는 지식의 중복, 의도의 중복에 대한 것이다. 문서화 중복: 주석 대신 코드로 의도를 나타내자. 데이터의 DRY 위반: 가능하다면 중복되는 필드 대신 메.. 2022. 3. 21.
1장. 실용주의 철학 오늘 읽은 범위 추천사 2판 서문 1판 서문 1장. 실용주의 철학 기억하고 싶은 내용 각 상황에서 좋은 해결 방안을 고를 수 있도록 충분한 배경지식과 경험을 쌓아야 한다. 당신에게는 에이전시(agncy)가 있다. 당신은 당신의 조직을 바꾸거나. 당신의 조직을 바꿀 수 있다. (마틴 파울러) 어설픈 변명 말고 대안을 제시하라. 리팩터링의 가치를 설명해 줘라. 최선의 방법을 결정하기 위해 프로토타입을 만들어라. 테스트를 개선하거나, 재발을 방지하기 위해 자동화를 도입해라. 깨진 창문을 내버려 두지 말라. 불쾌한 코드를 주석 처리 하거나, ‘아직 구현되지 않았음'이라고 메시지를 표시하거나. 가짜(dummy) 데이터로 대치해 놓아라. 어떤 위기가 찾아왔다고 해서 부가적인 피해를 일으키지 말라. 변화의 촉매가 되.. 2022. 3. 19.
10장. 클래스 오늘 읽은 범위 10장. 클래스 기억하고 싶은 내용 클래스 체계 (p.172) 정적(static) 공개(public) 상수 → 정적 비공개(private) 변수 → 비공개 인스턴스 변수 → 공개 함수 → 비공개 함수 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫다. 클래스는 작아야 한다! (p.172) 클래스의 크기를 측정하는 척도는 클래스가 맡은 책임이다. 단일 책임 원칙(Single Responsibility Principle, SRP): 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다는 원칙이다. 응집도(Cohesion): 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미이다. 응집도를 유지하면 작은 클래스 여럿이 나온다. 변경하기 쉬운 클래스 (p.185) 시스템의.. 2022. 3. 9.
9장. 단위 테스트 오늘 읽은 범위 9장. 단위 테스트 기억하고 싶은 내용 TDD 법칙 세 가지 (p.155) 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트 코드 유지하기 (p.156) 테스트 코드는 실제 코드 못지않게 중요하다. 테스트는 유연성, 유지보수성, 재사용성을 제공한다. 테스트 케이스가 있으면 변경이 쉬워지기 때문이다. 깨끗한 테스트 코드 (p.158) 깨끗한 테스트 코드를 만드는데 가독성이 중요하다. 테스트 코드를 도메인에 특화된 언어(DSL)로 리팩터링 해야 한다. 테스트 코드에 적용하는 표준은 실제 코드에 적용하는 표준과 달라도 된다... 2022. 3. 6.
7장. 오류 처리 오늘 읽은 범위 7장. 오류 처리 기억하고 싶은 내용 오류 코드보다 예외를 사용하라 (p.130) 오류 코드를 사용하면 각 개념을 독립적으로 살펴보고 이해할 수 있다. Try-Catch-Finally 문부터 작성하라 (p.132) try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬워진다. 미확인(unchecked) 예외를 사용하라 (p.133) 확인된 예외는 OCP(Open Closed Principle)를 위반한다. 예외에 의미를 제공하라 (p.135) 예외를 던질 때는 전후 상황을 충분히 덧붙인다. 호출자를 고려해 예외 클래스를 정의하라 (p.135) 외부 API를 감싸면 외부 라이브러리와 프로그램 사이에서 의존성이 크게 줄어든다. 감싸기 클래스에서 외부 API를 호출하는 대신 .. 2022. 3. 4.
6장. 객체와 자료 구조 오늘 읽은 범위 6장. 객체와 자료 구조 기억하고 싶은 내용 자료 추상화 (p.118) 변수를 private으로 선언하더라도 각 값마다 조회(get) 함수와 설정(set) 함수를 제공한다면 구현을 외부로 노출하는 셈이다. 구현을 감추려면 추상화가 필요하다! 자료/객체 비대칭 (p.119) 객체: 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조: 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 디미터 법칙 (p.123) 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다. 자료 구조라면 당연히 내부 구조를 노출하.. 2022. 3. 1.
5장. 형식 맞추기 오늘 읽은 범위 5장. 형식 맞추기 기억하고 싶은 내용 형식을 맞추는 목적: 코드 형식은 의사소통의 일환이다. (p.96) 적절한 행 길이를 유지하라: 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. (p.97) 신문 기사처럼 작성하라 이름은 간단하면서도 설명이 가능하게 짓는다. 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다. 개념은 빈 행으로 분리하라 세로 밀집도: 서로 밀접한 코드 행은 세로로 가까이 놓아야 한다. 수직 거리: 서로 밀접한 개념은 세로로 가까이 둬야 한다. 변수 선언: 변수는 사용하는 위치에 최대한 가까이 선언한다. 인스턴스 변수: 인스턴수 변수는 클래스 맨 처음에 선언한다. .. 2022. 2. 28.
4장. 주석 오늘 읽은 범위 4장. 주석 기억하고 싶은 내용 “나쁜 코드에 주석을 달지 마라. 새로 짜라.” (p.68) 주석은 나쁜 코드를 보완하지 못한다. (p.69) 코드 품질이 나쁘다면 주석을 추가할 것이 아니라 코드를 정리해야 한다. 코드로 의도를 표현하라! (p.70) 좋은 주석 (p.70) 정말로 좋은 주석은, 주석을 달지 않을 방법을 찾아낸 주석이다. 법적인 주석 정보를 제공하는 주석: 주석이 유용하다 할지라도, 가능하다면, 함수 이름에 정보를 담는 편이 더 좋다. 의미를 명료하게 밝히는 주석: 인수나 반환값이 표준 라이브러리나 변경하지 못하는 코드에 속한다면 의미를 명료하게 밝히는 주석이 유용하다. 결과를 경고하는 주석: 때로 다른 프로그래머에게 결과를 경고할 목적으로 주석을 사용한다. TODO 주석.. 2022. 2. 25.