Skip to content

Instantly share code, notes, and snippets.

@shoark7
Last active September 7, 2019 02:50
Show Gist options
  • Save shoark7/76204e5eb8d7f69462751cfea5e545ed to your computer and use it in GitHub Desktop.
Save shoark7/76204e5eb8d7f69462751cfea5e545ed to your computer and use it in GitHub Desktop.
정수 배열을 오름차순 정렬하되, 홀수가 짝수보다 무조건 앞에 오게 하라.
# 미연님이 올려주신 코드에요. 여기에 대해 피드백 드려볼게요.
# 정답보다도 가독성 좋은 코딩 스타일에 대해서
A = [1, 2, 3, 4, 5, 6, 73, 8, 10, 54]

odd = 0
even = 0

odds=[]
evens=[]

for i in A:
  if i%2 == 0:
      evens.append(i)##
  elif i%2 == 1:
      odds.append(i)
print(odd+even)

일단 보내주신 코드는 치명적인 문제가 있어요. 뭐냐면 문제의 요구조건을 만족시키지 않았다입니다.
분명 문제의 대표적인 요구사항을 정리하면 다음과 같아요:

  1. 홀수가 짝수보다 앞서게 하라
  2. 각 정수는 오름차순 정렬하라

이 중에서 두 번째 조건이 만족되지 않았어요. 이건 치명적입니다. 코드를 가독성 있게 짰냐, 안 짰냐보다 중요한 건 일단 문제는 정확하게 해결했느냐에요. 가독성 등 좋은 코드의 다른 조건은 문제를 해결한 이후에 생각할 문제에요.

따라서 정렬의 조건을 만족한 새로운 코드를 만드셔야 합니다.


이제는 코드 자체에 대한 피드백을 드릴게요.

  • 상수와 변수에 대한 구분
    • 코드에서 상수(constant)와 변수(variable)을 구분하는 것은 중요해요.
    • 변수는 의미 그대로 프로그램 실행 중에 계속적으로 값이 변할 수 있는 것을 의미해요. 가령 위 코드에서 even은 계속적으로 변하죠.
    • 상수는 프로그램 실행 동안 값이 변하지 않을 것을 의미해요.
    • 이 둘을 구분하는 건 의미가 있어요. 파이썬에서는 변수는 소문자, 상수는 대문자로 처리하는데 정수 배열 A는 변수로 취급해주셔도 좋겠어요

  • 변수명에 대한 이해
    • 좋은 코드에서 중요한 기준 중 하나는 변수명을 어떻게 지을까에 대한 문제에요. 변수명은 가독성에 매우 중대한 요소기 때문이에요. 기억해주세요. 결국 우리는 협업을 할 것이고, 따라서 내가 짠 코드는 동료, 제 3자가 읽을 것이라고 생각해주세요. 그들을 내 코드로 설득할 수 있어야 해요.
    • 변수명은 적절한 이름을 선택하는 것과 함께 길이도 중요해요. 변수명의 길이에 따라 편의성과 가독성은 trade-off 관계에 있는데, 변수명이 길어질수록 일반적으로 가독성이 좋아져요. 반대로, 변수명이 짧아지면 가독성은 떨어지지만 코드 작성은 매우 쉬워져요.
    • A를 볼게요. A는 길이가 1인데 그에 따라 작성하고 사용하기 매우 쉬워요. 다만 길이가 너무 짧아 제 3자는 저게 뭔지 도무지 알 수 없어요. 저건 배열(array)인가요? 제가 학교에서 받은 최고 성적인가요? 아니면 에펠탑에 대한 추상화 기호인가요?
    • 결론은 저 변수는 길이를 조금만 늘려주세요. 한 arr 정도만 해도 가독성이 훨씬 좋아집니다. 프로그래밍을 조금만 한 사람들은 저게 배열(array)라는 걸 단박에 알아차릴 수 있어요.
    • 언제나 변수명과 상수명을 신경 써주세요.

  • 띄어쓰기
    • +, %, =와 같은 연산자 사이는 띄어주세요. 그게 가독성도 좋고, 좋은 코딩 컨벤션(convention)이에요. 일단 저렇게 붙여놓으면 답답한 느낌이 듭니다.
    • 나랏말삼이즁국과달라문자와서로사맣디아니할새이런절차로 vs 나랏말삼이 즁국과 달라 문자와 서로 사맣디 아니할새 이런 절차로

제가 UX를 공부하는 사람한테 UX가 뭐냐고 물었더니 그 사람은 'UX는 사용자가 생각하게 하지 않는 것'이라고 말했어요. 그 사람 말이 맞다고 가정해볼게요. 언제나 우리가 생산하는 코드의 UX를 고려해주세요. 유저(동료 등 누가 될지는 몰라요)를 불편하게 하는 것은 없는지, 그들에게 지나친 사고를 요구하지는 않는지. 우리가 생산하는 코드는 결국 제품이고 상품이라는 것을 기억하고, 공부하시는 초반부터 좋은 코드에 대해 고민하시고 짜면 매우 건강한 코드를 작성하실 수 있을거에요.

스터디에서 고려해주세요!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment