본문 바로가기
[실용주의 프로그래머] 메타 프로그래밍 [실용주의 프로그래머] 메타 프로그래밍 -아무리 뛰어난 천재라도 세부사항에 집착하면 그 재능이 발휘되지 않는 법이다. - 레비의 8번째 법칙 -세부사항은 우리의 깔끔한 코드를 어질러 놓는다.특히 변화가 잦을 때는 더욱 그러하다. -세부사항을 코드에서 몰아내라.이렇게 함으로써 우리의 코드는 매우 설정 가능(configurable)하게 되고 ‘소프트’해진다.즉, 변화에 쉽게 적응할 수 있게 되는 것이다. 동적 설정 -시스템을 되도록 설정가능하게 만들어야 한다.배경 색, 프롬프트 텍스트 뿐 아니라 알고리즘의 선택, 사용할 데이터베이스 제품, 미들웨어 기술, 사용자 인터페이스 스타일 등 시스템의 심층까지 말이다.이런 아이템들은 통합하거나 엔지니어링하지 말고 설정 옵션으로 구현해야 한다. -통합하지 말고 설정하라.. 2018. 10. 30.
[실용주의 프로그래머] 결합도 줄이기와 디미터 법칙 [실용주의 프로그래머] 결합도 줄이기와 디미터 법칙 구부러지거나 부러지거나 -유연함을 유지하는 한 가지 좋은 방법은 가능한 적은 양의 코드를 작성하는 것이다. -코드를 세포(모듈)로 구성하고, 이들 간의 상호작용을 제한하라.그러면 한 모듈이 변경되거나 교체된다 하더라도 다른 모듈들은 변경 없이 수행될 수 있다. 결합도 줄이기 -의존의 증가가 나쁜 이유는 시스템 어딘가의 무관한 변화가 여러분의 코드에 영향을 미칠 수 있는 위험이 커지기 때문이다.이렇게 되면 개발자가 수정한 부분이 시스템에 어떤 영향을 미칠지 몰라 코드의 수정을 두려워하게 된다. 디미터 함수 법칙 -디미터 함수 법칙은 프로그램에서 모듈간 결합도를 최소화하려 시도한다.이 법칙은 한 객체가 제공하는 메서드에 접근하기 위해 또 다른 객체들을 통하.. 2018. 10. 29.
[실용주의 프로그래머] 리소스 사용의 균형 [실용주의 프로그래머] 리소스 사용의 균형 -시작한 것은 끝내라. 이것은 단순히 리소스를 할당하는 루틴이나 객체가 리소스를 해제하는 책임 역시 져야한다는 걸 의미한다.이상적으로 말해서 리소스를 할당하는 루틴이 해제 역시 책임져야 한다는 것이다. 중첩 할당 -리소스를 할당한 순서의 반대로 해제하라. 이렇게 해야 한 리소스가 다른 리소스를 참조하는 경우에도 리소스를 고아로 만들지 않는다.코드의 여러 곳에서 동일한 리소스 집합을 할당하는 경우, 할당 순서를 언제나 같게 하라. deadlock 가능성이 줄어들 것이다. 객체와 예외 균형과 예외 리소스 사용의 균형을 잡을 수 없는 경우 -기본적인 리소스 할당 방식이 아예 적절하지 않은 경우가 있다.보통 동적 자료 구조형을 사용하는 프로그램에서 이런 일이 많이 생긴.. 2018. 10. 28.
[실용주의 프로그래머] 언제 예외를 사용할까 [실용주의 프로그래머] 언제 예외를 사용할까 무엇이 예외적인가 -예외에 문제가 있다면 하나는 이걸 언제 사용할지 아는 것이다.예외가 프로그램의 정상 흐름의 일부로 사용되는 일은 거의 없어야 한다.모든 예외 처리기(exception handler)를 제거해도 이 코드가 여전히 실행될까 자문해보자.만약 그 답이 아니오라면 아마도 예외가 비예외적인 상황에서 사용되고 있는 것이다. -예외는 예외적인 문제에 사용하라. -예외가 있다는 것은 컨트롤의 이동이 즉각적이고 로컬하지 않다는 것을 말한다.일종의 연쇄 goto 같은 것이다.예외를 정상적인 처리 과정의 일부로 사용하는 프로그램은 고전적인 스파게티 코드의 가독성 문제와 관리성 문제를 전부 떠안게 된다.이런 프로그램은 캡슐화 역시 깨뜨린다.예외 처리를 통해 루틴과.. 2018. 10. 27.
[실용주의 프로그래머] 단정적 프로그래밍 [실용주의 프로그래머] 단정적 프로그래밍 -자기 비난에는 사치성이 있다. 우리가 자신을 비난할 때, 다른 사람은 우리를 비난할 권리가 없다고 우리는 느낀다. - 오스카 와일드 -이런 일은 절대 일어날 리 없어. 이 코드를 지금부터 30년 동안이나 사용하지는 않을 테니까, 연도에 두 자리 수를 사용해도 괜찮아.이 앱을 외국에서 사용하는 일은 절대 없을 텐데 뭐하러 국제화하지?count 는 음수가 될 수 없어.이 printf 는 실패할 수 없어. 이런 류의 자기기만을 훈련하지 말자, 특히 코딩할 떄는.. -단정문(assert)을 사용해서 불가능한 상황을 예방하라. -컴파일 중에 단정 기능이 꺼져 있을 수도 있다는 걸 기억해야 한다.그리고 실행되어야만 하는 코드는 절대 assert 속에 두면 안된다. 진짜 에.. 2018. 10. 26.
[실용주의 프로그래머] 죽은 프로그램은 거짓말을 하지 않는다 [실용주의 프로그래머] 죽은 프로그램은 거짓말을 하지 않는다 -실용주의 프로그래머는 만약 에러가 있다면 정말로 뭔가 나쁜 일이 생긴 것이라고 자신에게 이야기한다. 일찍 작동을 멈추게 하라. 망치지 말고 멈추라 -가능한 한 빨리 문제를 발견하게 되면, 좀 더 일찍 시스템을 멈출 수 있다는 이득이 있다.게다가 프로그램을 멈추는 것이 할 수 있는 최선일 때가 많다. -분명히 실행 중인 프로그램을 그냥 종료해 버리는 것은 때로 적절치 못하다.해제되지 않은 자원(resource)이 남아 있을 수도 있고, 로그 메시지를 기록할 필요가 있을 수도 있고, 열려있는 트랜잭션을 청소해야 하거나, 다른 프로세스들과 상호작용해야 할 필요가 있을지도 모른다. 그러나 기본 원칙은 똑같다.방금 불가능한 뭔가가 발생했다는 것을 코드.. 2018. 10. 25.
[실용주의 프로그래머] 계약에 의한 설계 [실용주의 프로그래머] 계약에 의한 설계 실용주의 편집증 -완벽한 소프트웨어는 만들 수 없다. -우리는 방어적으로 코딩하도록 가르침 받았다. 만약 조금이라도 의심이 들면, 주어진 모든 정보를 확인한다. 잘못된 데이터를 찾아내기 위해 assertion 을 사용한다. 일관성을 확인하고 데이터 베이스 컬럼에 constraint 를 걸면서 대부분은 스스로 만족해한다. 하지만 실용주의 프로그래머들은 여기서 한 걸음 더 나아간다. ‘그들은 자기 자신 역시 믿지 않는다’ 어느 누구 심지어는 자기 자신도 완벽한 코드를 작성할 수 없음을 알기 때문에 실용주의 프로그래머는 자신의 실수에 대비해 방어적으로 코드를 짠다. 계약에 의한 설계 -정직한 거래를 보장하는 최선의 해법 중 하나는 계약이다.계약은 상대편은 물론 자신의 .. 2018. 10. 24.
[실용주의 프로그래머] 코드 생성기 [실용주의 프로그래머] 코드 생성기 -코드를 작성하는 코드를 작성하라. -코드 생성기에는 두 가지 유형이 있다. 수동적 코드 생성기는 결과를 내기 위해 한 번만 실행된다. 능동적 코드 생성기는 코드 생성이 필요할 때마다 작동한다. 이는 종종 어떤 형태의 스크립트나 컨트롤 파일을 읽어서 결과물을 만들어 낸다. 수동적 코드 생성기 -수동적 코드 생성기는 기본적으로 몇 개의 입력에서 주어진 출력을 생성하는 매개 변수화된 템플릿이다. -수동적 코드 생성기로는 아래와 같은 것을 할 수 있다. 템플릿, 소스코드 제어 지시자, 지적재산권 문구, 기본적으로 들어가는 주석 생성.프로그래밍 언어간 일회용 변환 수행런타임에 계산하기엔 비용이 많이 드는 참조 테이블과 여타 자원을 생성. 능동적 코드 생성기 -수동적 코드 생성.. 2018. 10. 23.
[실용주의 프로그래머] 텍스트 처리 [실용주의 프로그래머] 텍스트 처리 -텍스트 처리 언어를 하나 익혀라. -책에서는 Perl 을 추천하는데, Python 등의 script 언어들 모두 괜찮을 듯 싶다. perl, python, script, [실용주의 프로그래머] 텍스트 처리, 텍스트 처리 언어 2018. 10. 22.
반응형