프로그래머는 이미 존재하는 라이브러리로 자신의 문제를 풀 수 있는 상황이 많다는 걸 모르고 있다.

아니면 라이브러리가 할 수 있는 일을 잊어버린다. 라이브러리가 할 수 있는 일을 알고 활용하는 것은 대단히 중요하다.


 매일 15분씩 자신의 표준 라이브러리에 있는 모든 함수/모듈/형들의 이름을 읽어라


여기에는 C++의 STL, Java API, 내장된 파이썬 모듈 등이 모두 포함된다.

라이브러리 전체를 암기하라는 게 아니다. 그냥 그 안에 무엇이 있는지 감을 잡아놓고,

나중에 새로운 코드를 작성할 때 "잠깐만, 이건 전에 API에서 보았던 것과 뭔가 비슷한데..." 하고 생각할 수 있기를 바라는 것이다.

이러한 습관을 들이려고 노력하면 생각보다 금세 좋은 결과를 얻을 수 있다.

코드를 직접 작성하는 대신 우선적으로 이미 존재하는 라이브러리를 사용하는 습관을 갖게 되기 때문이다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


'Archive' 카테고리의 다른 글

지나친 테스트  (0) 2012.06.16
테스트에 친숙한 개발  (0) 2012.06.16
변수의 범위를 좁혀라  (0) 2012.06.15
쇼트 서킷 논리 (Short-Circuit Logic) 오용 말기  (0) 2012.06.15
설명 변수와 요약 변수  (0) 2012.06.15
  

변수의 범위를 좁혀라

Posted by epicdev Archive : 2012. 6. 15. 22:16


 변수가 적용되는 범위를 최대한 좁게 만들어라


많은 프로그래밍 언어는 모듈, 클래스, 함수, 블록 범위 같은 다양한 범위/접근 수준을 제공한다.

더 제한적인 접근을 이용하면 변수가 더 적은 줄 내에서만 '보이므로' 일반적으로 더 좋다.


왜 그럴까?

바로, 코드를 읽는 사람이 한꺼번에 생각해야 하는 변수 수를 줄여주기 때문이다.

모든 변수의 범위를 두 배로 축소시키면, 한 번에 읽어야 하는 변수의 수는 평균적으로 반으로 줄어든다.


많은 메소드를 static으로 만들어서 클래스 멤버 접근을 제한해라. 가급적 static 메소드는 코드를 읽는 사람에게

'이 코드는 저 변수들로부터 독립적'이라는 사실을 알려주는 매우 좋은 방법이다.


커다란 클래스를 여러 작은 클래스로 나누는 방법도 있다. 이 방법은 작은 클래스들이 서로 독립적일 때 유용하다.

만약 클래스를 두 개의 작은 클래스로 나누었는데 서로의 멤버를 참조한다면, 실제로 성취한 일은 아무 것도 없게 된다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰, 트레버 파우커 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  

쇼트 서킷 논리 (Short-Circuit Logic) 오용 말기

Posted by epicdev Archive : 2012. 6. 15. 21:57

대부분의 프로그래밍 언어에서 불리언 연산은 쇼트 서킷 평가를 수행한다.

예를 들어 if (a || b)에서 a가 참이면 b는 평가하지 않는다. 이는 매우 편리하지만 때로는 매우 복잡한 연산을 수행할 때 오용될 수도 있다.



이 코드는 한 줄에 불과하지만 대부분의 프로그래머는 의미를 이해하기 위해서 손을 멈추고 생각해야 한다.



이 코드는 동일한 일을 수행한다. 코드가 두 줄로 늘어났지만 훨씬 이해하기 쉬워졌다.

그럼 첫 번째 코드가 굳이 한 줄짜리 거대한 표현으로 작성된 이유는 무엇이었을까?

코드를 작성하던 당시에는 그렇게 하는 게 매우 영리하다고 생각했기 때문이다. 짧은 코드에 논리를 집어넣는 행위에는 어떤 즐거움이 있기 때문이다.

우리는 모두 일을 하면서 어떤 즐거움을 얻기를 원한다. 문제는 바로 그런 코드가 나중에 코드를 읽는 사람에게는 정신적인 장애물이 된다는 데 있다.


'영리하게' 작성된 코드에 유의하라. 나중에 다른 사람이 읽으면 그런 코드가 종종 혼란을 초래한다.



읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  

설명 변수와 요약 변수

Posted by epicdev Archive : 2012. 6. 15. 21:46
설명변수

커다란 표현을 쪼개는 가장 쉬운 방법은 작은 하위표현을 담을 "추가 변수"를 만드는 것이다.
추가 변수는 하위표현의 의미를 설명하므로 "설명 변수"라고도 한다.
요약 변수

request.user.id == document.owner_id라는 표현이 커다랗게 보이지는 않지만, 이는 변수 다섯 개를 담고 있다.
따라서 이 표현을 읽으려면 추가적인 시간이 필요하다.

다음 코드의 핵심 개념은 "사용자가 이 문서를 소유하는가?"이다. 이러한 개념은 요약 변수를 더하면 더 명확하게 표현할 수 있다.

대단한 개선처럼 보이지 않을지 몰라도 if (user_owns_document)라는 구문은 더 읽기 쉽다.
또한 user_owns_document라는 표현을 맨 위에 두어 코드를 읽는 사람에게 "이것이 바로 이 함수에서 생각해야 하는 주된 개념이로군"이라는 생각이 들게 한다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  


 프로그래밍 구조

상위수준의 프로그램 흐름이 혼란스러워지는 방식 

스레딩 

어느 코드가 언제 실행되는지 불분명하다 

시그널/인터럽트 핸들러 

어떤 코드가 어떤 시점에 실행될지 모른다 

예외

예외처리가 여러 함수 호출을 거치면서 실행될 수 있다 

함수 포인터 & 익명 함수 

실행할 함수가  런타임에 결정되기 때문에 컴파일 과정에서는 어떤 코드가 실행될지 알기 어렵다

가상 메소드 

object.virtualMethod()는 알려지지 않은 하위 클래스의 코드를 호출할지도 모른다 


위 예시 중 어떤 것은 매우 유용하다. 코드를 더 읽기 편하고 덜 중복되게 한다. 하지만 프로그래머는 나중에 코드를 읽는 사람이 얼마나 어렵게 느낄지 생각하지 않은 채 이러한 구조들을 과도하게 사용하기도 한다. 그리고 이러한 구조는 버그 추적을 매우 어렵게 한다.


결국 핵심은 코드를 작성할 때 이러한 구조가 차지하는 비율이 너무 높지 않아야 한다는 데 있다. 만약 과용하면 코드의 흐름을 파악하는 일이 매우 어려워진다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  

코드의 미학

Posted by epicdev Archive : 2012. 5. 11. 17:20

미학적으로 보기 좋은 코드가 사용하기 더 편리하다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  

Boolean 변수의 이름에서는 의미를 부정하는 용어를 피하는 것이 좋다.


아래와 같은 이름 대신



다음과 같은 이름을 사용하면 더 간결하고 읽기 좋다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  

first/last와 begin/end

Posted by epicdev Archive : 2012. 5. 11. 17:09

경계를 포함하는 범위에는 first와 last를 사용하라.

즉, range(first=2, last=4)라면 2, 3, 4를 모두 포함하는 것이다.


경계를 포함하고/배제하는 범위에는 begin과 end를 사용하라.

즉, range(begin=2, end=4)라면 2, 3을 포함하는 것이다.


10월 16일에 일어난 일을 모두 출력하고 싶을 때


라고 쓰는 것이 아래보다 더 편리하다.





읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교



  

코드는 다른 사람이 그것을 이해하는 데 들이는 시간을 최소화하는 방식으로 작성되어야 한다.




읽기 좋은 코드가 좋은 코드다

저자
더스틴 보즈웰 지음
출판사
한빛미디어 | 2012-04-06 출간
카테고리
컴퓨터/IT
책소개
이 책은 코드를 작성할 때 언제나 적용할 수 있는 기본적인 원리...
가격비교


  

참고

http://stackoverflow.com/questions/725782/in-python-what-is-the-difference-between-append-and

http://markandclick.com/1/post/2012/01/python-list-append-vs.html


Python에서 list에 아이템을 더할 때 append나 += 를 수행해서 list에 항목을 추가 할 수 있다.

그런데 이 둘이 미묘한 차이가 있으므로 사용할 때 주의하여야 한다 (성능 최적화가 필요할 경우).



이 결과는 어찌보면 당연한 것이다.

+= 연산의 경우 두 list를 합쳐서 새로운 list를 만드는 것이니, 당연히 느리다.

그런데 append의 경우 하나의 list에다가 항목을 추가하는 것이니, 당연히 += 연산을 이용하는 것보다 빠르다.

따라서, += 연산을 append 대신에 사용하는 것은 비효율적이라는 것을 알 수 있다.


좀 더 자세한 결과를 위해 Python bytecode를 disassembling 해보면 아래와 같은 결과를 얻을 수 있다.



append의 경우 LOAD_ATTR + CALL_FUNCTION을 사용하는 것이고

+=의 경우 BUILD_LIST를 사용하게 된다.

당연히 LOAD_ATTR + CALL_FUNCTION보다 BUILD_LIST가 느린 것은 당연한 것이므로 append가 더 빠르다.

여기서 LOAD_ATTR을 미리 처리해서 append의 속도를 더 빠르게 만들 수도 있다.



같은 함수를 반복 호출할 경우 이런방식으로 사용한다면 좀 더 효율적인 코드를 짤 수 있을것이다.


결론:

list에 항목을 하나만 추가할 때는 +=보다는 append를 사용하고

list들을 이을(concatenation) 때만 +=나 extend를 사용하자

(list들을 이을 때, +=와 extend의 속도차이는 아래의 글을 참고하자. 참고로 list들을 이을 때는 +=가 extend보다 더 빠르다.)

http://stackoverflow.com/questions/4176980/is-extend-faster-than

  
 «이전 1 2 3 4 5 6 7 ··· 17  다음»