안 웹개발/파이썬

[무너도 아는 파이썬] 00. 굳이 개념 먼저 배워야 하나요?

by 목도리 2021. 9. 29.

격?주? 금요일마다 연재됩니다.

프로그래밍 언어를 배우다 보면 막히고 헤맬 때가 많습니다. 많은 시행착오를 겪고 나서야 해결법이 몸에 익게 됩니다. 이 강의는 그런 시행착오를 막기 위해 '처음부터 누가 알려줬으면 좋았을' 파이썬 개념들에 대해 다룹니다.

요약

  • 클래스와 객체를 먼저 배웁니다.
  • 파이썬 언어의 특징과 동작 원리를 이해합니다.
  • 파이써닉한 코드 쓰는 법을 알아봅니다.

그래서 기존 파이썬 강의와 무엇이 다른가요?

우리가 살면서 지금까지 배웠던 파이썬 강좌는 (나아가, 대부분의 프로그래밍 언어 강좌는) 보통 개념 하나하나씩 순서대로 배워나가는 식이었습니다. 1을 배운 후 2, 3, 4... 를 배웁니다. 가령

  • 자료형을 배웁니다.
정수 = 42
리스트 = [1, 2, "단어", True]
사전 = {"이름" : "메리", "좋아하는 수": 11}
  • 함수를 배웁니다.
def 인사하기(누구):
    print("안녕, ", 누구, "!")

인사하기("철수")
# 결과: 안녕, 철수!
  • 기본을 배운 후에는 직접 코드를 짜 봅니다. 생각했던 것과 다른 동작에 당황합니다.
a = [1, 2, 3]
def 리스트추가(a):
	a.append(4)

리스트추가(a)
# 예상: a는 [1, 2, 3, 4]
# 결과: a는 [1, 2, 3, 4]

b = 1
def 숫자증가(b):
    b += 1

증가(b)
print(a)
# 예상: b는 2
# 결과: b는 1
  • 검색창을 엽니다. 계속해서 파이썬 프로그래밍을 하며 궁금했던 점을 찾아봅니다.
Q: 어째서 파이썬 함수 안에서 함수 밖 변수를 바꿀 수 없나요?  
A: 함수 안에서 global로 변수를 지정해 줘야 합니다.

Q: 문자열 "hello"를 어떻게 대문자로 바꾸나요?
A: "hello".upper() 를 써 보세요.
Q: 어째서 문자열 뒤에 점(',')이랑 함수("upper()")를 붙이나요?
A: 내장 함수 표현식입니다. 그것이 뭐냐면 나중에 클래스를 배우게 되면 알게 됩니다.

 

이런 식으로 공부하면 안 되나요?

가볍게 언어를 배우려면 물론 나쁘지 않습니다. 하지만 위에서 global을 사용해야 하는 이유는 무엇일까요? 내장 함수 표현식과 클래스는 무엇일까요? 인터넷 검색만으로 매번 생기는 질문들을 찾기에는 힘이 많이 듭니다.

이 방식의 가장 큰 문제점은 유기적으로 연결된 개념들을 이해하기 어렵다는 것입니다. 파이썬으로 복잡한 작업을 하려 할 때, 새로운 방식을 시도할 때 특히 두드러집니다.

수학에서는

  • 사칙연산 -> 방정식 -> 다차방정식 순서로 배우는데
  • 앞의 개념(사칙연산)을 이해하는 데 뒤의 개념(다차방정식)을 배울 필요가 없습니다.

그런데 파이썬은

  • 배우는 순서는 자료형 -> 함수 -> 클래스(객체)인데
  • 한참 뒤에 나오는 개념(클래스)을 모르면 가장 처음 배우는 개념(자료형)이 어째서 그렇게 작동하는지 알기 어렵습니다.

그전까지는 어째서 어떤 변수는 함수 안에서 바꿀 수 없는지, 문자열 뒤에 어떻게 점과 함수를 붙일 수 있는지 완전하게 이해하기 어렵습니다. 어째서 어떨 때는 되는데 어떨 때는 되지 않는지 모르겠습니다. 지칩니다. 처음 공부를 시작했을 때의 의욕은 서서히 사라집니다.

그럼 어떻게 할까요?

이 강의에서는 구현을 배우기 전에 필요한 사전 지식을 모두 익힙니다. 가령 자료형을 배운다면

  • 컴퓨터가 정보를 처리하는 방식을 배웁니다.
  • 파이썬이 자료형을 구현한 방식(객체)과 그렇게 한 이유를 알아봅니다.
  • 객체를 구성하는 메모리와 포인터를 이해합니다.
  • 함수의 동작 원리를 이해합니다.
  • 값과 참조에 의한 호출을 이해합니다.
  • 대입 연산자를 배웁니다. (예: a = 1)
  • 마지막으로 문법적인 설탕(syntatic sugar)을 배웁니다. (예: a, b, c = 1,2,3)

풀어쓰니 어려워 보이지만, 이차방정식의 근의 공식을 유도하는 것처럼 개념과 원리를 이해하는 과정일 뿐입니다. 처음에는 낯설고 가까운 길을 돌아가는 것 같겠지만, 원리를 이해한다면 실수를 줄이고 응용도 쉬워질 것입니다.

그 밖에

사실과 다른 부분이나 건의 사항이 있으면 언제건 지적 해주세요. 설명이 불충분하거나 장황한 부분이 있다면 그 부분도 수정하겠습니다.

이 강의는 퍼블릭 도메인(CC0)으로 제공됩니다. 자유롭게 수정/편집/이익 창출을 할 수 있습니다.

댓글