프로그래밍 언어를 배우다 보면 막히고 헤맬 때가 많습니다. 많은 시행착오를 겪고 나서야 해결법이 몸에 익게 됩니다. 이 강의는 그런 시행착오를 막기 위해 '처음부터 누가 알려줬으면 좋았을' 파이썬 개념들에 대해 다룹니다.
요약
- 클래스와 객체를 먼저 배웁니다.
- 파이썬 언어의 특징과 동작 원리를 이해합니다.
- 파이써닉한 코드 쓰는 법을 알아봅니다.
그래서 기존 파이썬 강의와 무엇이 다른가요?
우리가 살면서 지금까지 배웠던 파이썬 강좌는 (나아가, 대부분의 프로그래밍 언어 강좌는) 보통 개념 하나하나씩 순서대로 배워나가는 식이었습니다. 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)으로 제공됩니다. 자유롭게 수정/편집/이익 창출을 할 수 있습니다.
'안 웹개발 > 파이썬' 카테고리의 다른 글
3줄로 터미널 컬러 코드 색칠해서 출력하기 (0) | 2021.10.12 |
---|---|
[무너도 아는 파이썬] 01. 안녕 세상, 자료형 그리고 객체 (0) | 2021.10.06 |
파이썬에서? lambda 말고? 자바스크립트? 화살표 함수(=>)? 를? 쓰고? 싶다 하네요 (0) | 2021.10.04 |
파이썬 for문에서 인덱스를 쓰지 말아야 하는 이유 (0) | 2021.09.29 |
댓글