삽질의 현장/- ETC

프로그램을 작성하는 33가지 방법 - Chaptor 06 정리

shovelman 2019. 3. 23. 19:39

최근 '프로그래밍 패턴 (프로그램을 작성하는 33가지 방법)' 을 읽기 시작했다.

한 가지의 기능을 Chaptor 마다 각각 다른 패턴으로 구현하여 설명한 책이다.

모두 비슷하게 동작하지만 환경과 상황이라는 제약 조건 안에서 탄생된 패턴을 직접 코드로 보여주고 있어직접 코딩을 하며 이해하고 있는 중이다.

책에서 소개하는 한 가지 기능은 '텍스트 파일을 읽어 단어 빈도 출력' 하는 프로그램이다.


가장 빈도가 높은 단어 순으로 그에 해당하는 빈도를 내림차순으로 출력하는 기능을 구현하고 있다.

이전 Chaptor 보기 :프로그램을 작성하는 33가지 방법 - Chaptor 05 정리

Chaptor 06. 코드 골프

  • 코드 줄 수를 가능한 적게 한다.


가능한 한 가장 짧은 프로그램을 다양한 프로그래밍 언어로 만드는 기술에는 코드 골프라는 이름이 붙는다. 

이 형식의 주된 관심사는 간결함이다. 가능한 적은 코드 줄 수로 프로그램의 기능을 구현하는 것이 목표다.

일반적으로 언어의 고급 기능과 라이브러리를 사용해 이를 달성한다. 

간결함이 유일한 목표라면 이 형식으로 작성된 코드가 이해하기 어려운 명령이 나열된, 매우 긴 몇 줄의 코드가 되는 것은 이해해야한다.


#-*- coding: utf-8-*-
#!/usr/bin/env python
import re, sys, collections

stops = open('../stop_words.txt').read().split(',')
words = re.findall('[a-z]{2,}', open(sys.argv[1]).read().lower())
counts = collections.Counter(w for w in words if w not in stops)
for (w, c) in counts.most_common(25):
    print(w, ' - ', c)

간결함이 일반적으로 많은 프로그래머가 달성하려고 노력하는 좋은 목표이더라도 LOC만을 위한 최적화는 잘못된 목표이며, 

문제를 해당 줄 속에 숨겨 진단하기가 매우 어려워질 수 있다.