클린코드 <5>
단일 스레드는 콜 스택을 살펴보면 프로그램 상태가 바로 드러난다. 반면 멀티 스레드는 구조적인 관점에서 보면 하나의 루프가 아니라 작은 프로그램 여러 개가 돌고 있는 것으로 보인다. 시스템을 이해하기가 쉽고 문제를 분리하기도 쉽다. - 동시성이 필요한 이유? : 처리 속도의 향상 - 난관 : 동시성은 복잡하다. : 동시성 버그는 재현하기 어렵다. - 동시성 방어 원칙 : 동시성 코드는 다른 코드와 분리해야 한다. : 자료를 캡슐화하고 공유 자료(critical section)를 최대한 줄여야 한다. : 공유 객체를 복사해 읽기 전용으로 사용. : 스레드는 가능한 독립적으로 구현. (각 스레드는 클라이언트 요청 하나를 처리한다. 데이터는 로컬 변수에 저장. 다른 스레드와 동기화할 필요 없으므로 하나의 프로..
주석은 항상 거짓말을 한다. : 코드는 살아 있는 생물체라 항상 변화하고 진화하지만, 주석은 계속 퇴화한다. - 주석은 나쁜 코드를 보완해서 안된다. 코드로 의도를 표현하라 좋은 주석 - 법적인 주석 - 정보 제공 주석 - 중요성 강조 주석 - 경고 주석 - TODO 주석 나쁜 주석 - 주절거리는 주석 - 코드와 중복된 내용 적는 주석 - 오해할 여지가 있는 주석 - 이력을 기록하는 주석 (버전 관리 시스템이 있어서 요즘은 안 하죠) - 주석으로 처리한 코드 (버전 관리 시스템이 있으니 그냥 지웁시다) - 너무 많은 정보 - 함수 헤더
- 작게 만들어라 :즉, 한 가지만 해라(SRP : Single Responsibility Principle) - Switch 문 쓰지 마라 : 한 가지 작업만 하는 switch문을 만들기는 어렵다.(물론, 정말 어쩔 수 없는 경우는 써야지요.) : OCP(Open Closed Prindiple)을 위반한다. (새 유형이 추가되면 계속 수정해야 함) : 다형성을 이용하라. - 이상적인 함수의 인수(Parameter)는 0개이다. : 불가피하게 parameter가 늘어나게 되면 클래스로 만들어 넘긴다. : bool 인수는 함수가 true면 A일 false면 B 일을 시키겠다는 짓이니 하지 말자. - 한 가지 일만 처리해라 (강조, 강조) : 예 1) set함수에서 return 값으로 bool 넘겨서 확인하..
게임 캐릭터 이름 짓기 다음으로 고민되는 거 = 함수 이름 짓기 - 함수 이름이 길어지더라도 함수의 수행 의도를 명확히 하라. - 발음하기 쉬운 이름 - 검색하기 쉬운 이름 (누구나 검색하고 싶은 것을 떠올렸을 때 바로 떠오르는 영단어) + 기발한 이름 피하시오. - 헝가리 표기법, 멤버 변수 접두어, 인터페이스라고 I로 시작하는 것을 피하라 : 모두 옛날의 잔재들임 요즘 IDE 너무 좋아서 굳이 표시할 필요 없다. - 클래스 : 명사, 명사구 - 함수 : 동사, 동사구 :함수명과 인수(parameter)의 관계는 동사 / 명사 = 동사 / 목적어 관계로 표현하면 의도를 명확히 알 수 있다.
깨끗한 코드란 무엇인가? 가끔 협업하다 보면 굉장히 스마트하고 아는 거 많고 모든 신기술을 섭렵하고 프로그래밍도 아주 잘하는 사람들을 만나게 된다. 그런 사람들을 볼 때면 `나도 굉장히 스마트 한 사람이야`라고 뽐내고 싶을 때가 있다. 주의해야 한다. 혼자 코딩할 때도 물론 주의해야 한다. 나 혼자 쓰는 건데 뭐 어때 나만 알아보면 되지 하면서 비트 연산 넣고 하는 순간 과거의 나를 탓하게 된다. (물론 꼭 필요할 때도 있지만.) 이 책에서 저명한 프로그래머들은 아래와 같이 말했다. + 내 의견 1. 깨끗한 코드란 가독성이 좋은 코드다. (별표 백만 개) 그 외 - 중복이 없어야 한다. - 의존성을 줄여야 한다. - 성능을 최적으로 유지해야 한다. - 모든 테스트 케이스를 통과한다. 등등이 있는데 이건 ..