회사 동료분과 소소한 스터디로 일주일에 한번씩 책을 읽고 이야기를 나누자고 해서 <파이썬 코딩의 기술>이라는 책을 선택했다. '파이썬답게' 코딩하는 방법이 궁금하기도 했고 책을 읽고 조금씩 회사 코드에 적용시켜보면 좋을 것 같았다. 낯선 영어 단어를 외워두고도 막상 실전에서 사용하려면 잘 기억이 안나는 것처럼 책을 읽으면서 과연 내가 코드를 작성하는 과정에서 이 기술(?)들을 떠올릴 수 있을지 걱정이 되기도 했다. 그래도 우선은 이렇게 읽어두고 실전에서 써보려는 노력을 하는게 아무것도 하지 않는것보다는 훨씬 나을테니까 조금씩 열심히 읽어보는 중이다. 오늘은 1장 파이썬답게 생각하기 중에서 절반정도를 정리해보려고 한다.
읽은 범위
1장 파이썬답게 생각하기
목차
- 사용중인 파이썬의 버전을 알아두라
- PEP 8 스타일 가이드를 따르라
- bytes와 str의 차이를 알아두라
- C스타일 형식 문자열을 str.format과 쓰기보다는 f-문자열을 통한 인터폴레이션을 사용하라
- 복잡한 식을 쓰는 대신 도우미 함수를 작성하라
- 인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹하라
- range보다는 enumerate를 사용하라
- 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip를 사용하라
- for나 while 루프 뒤에 else 블록을 사용하지 말라
- 대입식을 사용해 반복을 피하라
1. 사용중인 파이썬의 버전을 알아두라
파이썬 2는 수명이 다했다. 더이상 공식적으로 지원되지 않기 때문에 파이썬 3을 사용해야 한다.
첫 회사에 다닐 때는 파이썬이나 장고, 사용하는 DB의 버전을 알아두는 것을 중요하게 생각하지 못했다. 사수분이 모든 버전을 되도록 최신으로 유지하는 편이어서 오래된 버전이라서 특정 기능을 사용하지 못하거나 한 적은 없기 때문이다. 현재 회사도 비교적 최신 버전을 사용하고 있어서 큰 걱정이 없다. 하지만 지인의 회사에는 아직도 장고 1.xx대 버전을 사용해서 더이상 문서에서 궁금한 내용을 찾기도 쉽지 않다고 한다. 레거시 때문에 버전을 올리는 것도 쉽지 않다는 고충을 이야기해주셨는데 개발을 하면서 꾸준히 버전을 안정적인 업데이트 하고 가고자 하는 회사에서 어떤 버전을 쓰는지 파악하는 것도 중요한 일 같다. 파이썬의 최신 버전이 나올 때마다 추가되는 부분들도 놓치지 말고 파악하고 있어야겠다는 생각도 들었다.
2. PEP 8 스타일 가이드를 따르라
문법만 올바르다면 어떤 방식으로든 원하는 코드를 작성해도 좋지만 일관된 스타일을 사용하면 코드에 더 친숙하게 접근하고, 코드를 더 쉽게 읽을 수 있다.
파이썬에서 공백은 중요한 의미가 있다. 탭 대신 스페이스를 사용해 들여쓰기 하라. 라인 길이는 79개 문자 이하여야 한다.
파이참에 PEP 8 스타일 가이드에 맞지 않으면 표시를 해주는 기능이 있어서 의식적이든 무의식적이든 최대한 가이드를 지키며 코딩을 해왔다. option + command + l 을 하면 자동으로 정렬을 해주기 때문에 주로 자동 정렬을 사용했다. 탭 대신 스페이스를 사용해서 들여쓰기를 해야하는건 이번에 처음 안 사실이다. 예전에 '실리콘밸리'라는 미드를 볼 때 주인공이 좋아하는 여자와 탭을 쓸지 스페이스를 쓸지 논쟁을 벌이는걸 보면서 드라마라 오버하는줄 알았는데 이번에 탭 VS 스페이스를 구글링해보니 전혀 오버가 아닌 현실이었다! 그동안 들여쓰기할때 탭을 사용했는데 나도 스페이스를 사용하도록 고쳐야겠다.
3. bytes와 str의 차이를 알아두라
bytes에는 8비트 값의 시퀀스가 들어 있고, str에는 유니코드 코드 포인트의 시퀀스가 들어있다. 처리할 입력이 원하는 문자 시퀀스인지 확실히 하려면 도우미 함수를 사용하라.
종종 엑셀 파일 등을 export 할 때 오류가 나는 경우가 있었는데 생각해보면 여기서 나오는 bytes와 str의 차이를 염두해두지 않고 이진쓰기모드, 텍스트 쓰기 모드 등을 구분하지 못하고 썼던 것 같다. 이제 읽어두었으니 다음에는 어떤 타입을 쓰는지 잘 알고 써야겠다.
4. C스타일 형식 문자열을 str.format과 쓰기보다는 f-문자열을 통한 인터폴레이션을 사용하라
% 연산자를 사용하는 C 스타일 형식화 문자열은 여러 가지 단점과 번잡성이라는 문제가 있다.
str.forat 메서드도 C 스타일 형식 문자열의 문제점을 그대로 가지고 있으므로 가능하면 str.format 시용을 피해야 한다.
나는 C 언어를 배우지 않아서 C스타일 형식 문자열을 사용해보지 않았다. str.format도 종종 알고리즘 문제를 풀 때만 사용해보고 처음부터 f-문자열을 사영하다보니 f-문자열의 편리함을 제대로 인지하지 못했던 것 같다. f-문자열이 파이썬 3.6부터 도입되었다고 하니 이전 버전을 사용한 코드가 남아있다면 str.format도 어느정도는 알고 있어야겠다고 느꼈다. 버전이 올라갈때마다 훨씬 사용하기 편리해진다는 점에 놀랐고 앞으로의 업데이트들도 기대가 된다.
5. 복잡한 식을 쓰는 대신 도우미 함수를 작성하라
복잡한 식을 도우미 함수로 옮겨라. 특히 같은 로직을 반복해 사용할 때는 도우미 함수를 꼭 사용하라
boolean 연산자 or나 and를 식에 사용하는 것보다 if/else 식을 쓰는 편이 더 가독성이 좋다.
글쓴이는 코드 예시를 보여주면서 '코드를 짧게 유지하면 멋지기는 하지만, 모든 내용을 한 줄에 우겨넣기 위해 노력할 만큼의 가치는 없다'고 말한다. 미래의 나 자신을 위해서도 그렇고 협업을 할 때도 잘 읽을 수 있는 코드를 작성하기 위해 동의하는 바이다. 다만 아래에 나와있는 예시를 보면서 동료분과 이야기 했을 때 어떤 코드가 더 읽기 쉬운지에 대해서는 사람마다 의견이 갈릴 수도 있다는 생각이 들었다.
red = int(my_values.get('빨강', [''])[0] or 0)
위의 코드처럼 한줄로도 가능하지만
red_str = my_values.get('빨강', [''])
red = int(red_str[0]) if red_str[0] else 0
글쓴이는 이 코드를 더 명확하다고 보았다
green_str = my_values.get('초록', [''])
if green_str[0]:
green = int(green_str[0])
else:
green = 0
if/else를 사용한 위의 코드는 더욱 명확하다고 보았으며 여러번 반복하는 경우에는 아래처럼 함수를 만들어서 사용하는 것을 더욱 좋다고 생각했다.
def get_first_in(values, key, default=0):
found = values.get(key, [''])
if found[0]:
return int(found[0])
return default
green = get_first_int(my_values, '초록')
한줄로 쓸 수 있는 코드를 굳이 길게 써야하는지에 대한 의견이 나뉠 수도 있지만 한눈에 봐도 읽기 쉽게 코드를 작성 하는 것이 많은 사람들의 시간과 노력을 아낄 수도 있는 것 같다. 업무를 하면서 코드를 읽을 때 가끔 내가 아직 충분히 실력이 되지 않아서 읽기 힘든건지, 더 많이 공부하면 쉽게 읽을 수 있는건지에 대한 고민을 많이 하게 된다.
시니어가 되어 실력이 쌓일수록 더 어려운 문법도 많이 알게 되고 한줄로도 많은 것을 표현할 수 있게 된다. 아마 영어를 더 많이 공부할수록 더 고급 표현을 많이 알게 되는 것과 비슷한 것 같다. 하지만 코드를 작성하는 것도 일종의 다른 사람들과의 대화이다보니 주니어, 시니어가 모두 쉽게 읽을 수 있는 코드를 작성하는 것도 중요하다고 생각한다. 지금 상황에서는 더더 열심히 공부하고 내가 시니어가 되었을 때도 주니어를 포함한 많은 사람들이 쉽게 이해할 수 있는 코드를 작성하도록 노력해야겠다.
'개발서적' 카테고리의 다른 글
[파이썬 코딩의 기술] 2. 리스트와 딕셔너리(2-1) (0) | 2022.07.24 |
---|---|
[파이썬 코딩의 기술] 1장 파이썬답게 생각하기(1-2편) (0) | 2022.07.10 |