제1장 도입

한지훈·2022년 10월 17일

글로 읽는 파이썬

목록 보기
1/4

제1절 거대한 비단뱀 앞에 서기

대부분의 서적이 파이썬에 들어가기에 앞서 파이썬의 개발자 귀도 반 로섬에 대해 언급하며, 이 언어가 거대한 비단뱀의 이름을 하게 된 유래에 대하여 지면을 사용한다. 다양한 분야에서 사용되는 파이썬의 그 쉬운 학습 장벽과 활용 범위를 나열하며, 사용자가 왜 파이썬을 꼭 배워야 하는지를 설득한다. 허나, 본 지에서는 이러한 것들을 생략하고 파이썬을 제대로 학습하기 위한 몇 가지의 짚고 넘어갈 점에 대해서 간략하게 소개하고자 한다.

파이썬은 일종의 언어이다. 이 언어를 통하여 얻을 수 있는 궁극적인 목적은 컴퓨터에서 실행할 수 있는 특정 프로그램을 만들어 내는 것이다. 프로그램은 여러 명령들의 집합이다. 이 명령을 통하여 특정 기능을 수행하게 된다. 우리는 파이썬을 통하여 이 기능을 만들어낸다. 그렇기에 파이썬을 통하여 만들 수 있는 기능들이 과연 무엇인지에 대해서 먼저 알아보고자 한다.

프로그램 또한 결국 사람이 행하는 행위를 효율화시키기 위해서 탄생한 산물이다. 인간으로 하기에는 너무 자원이 많이 소요되는 작업들을 대체한다. 따라서 프로그램에서의 기능도 결국 사람이 하는 기능과 유사할 것이라는 단서를 얻을 수 있다. 프로그램의 주요한 목적은 인간이 해결하기에 어려운 문제를 대신 해결하는 것이다.

문제해결을 위하여 인간이 행할 수 있는 기능에 대해서 생각하여 보자. 아래의 기능들은 필자가 생각하기에 우리가 파이썬을 학습하는데 밀접한 인간이 수행할 수 있는 몇 가지의 기능이다.

기억하기 혹은 저장하기

인간은 특정 숫자를 몇 초간 기억하는 행위를 할 수 있다. 대부분은 짧거나 어느정도 긴 숫자를 간단히 기억하여 되돌려 준다. 프로그램도 이러한 기억 혹은 저장을 위한 기능이 있어야 할 것이다.

우리는 파이썬을 통하여 이러한 기능을 만들어 낼 수 있다. 거의 모든 프로그래밍 언어에서 통용되는 개념인 변수라는 공간을 할당하여 정보를 저장하게 된다. 여기서 중요한 것은 어떠한 정보를 어떻게 저장하는 지에 관한 문제다. 각 정보에는 저마다의 특성이 존재할 것이며, 따라서 그 정보를 기억하는 방법도 달라진다. 이러한 문제 상황 속에서 우리는 자료형이라는 생소한 개념을 학습하게 될 것이다.

비유를 통하여 생각하여 보도록 하자. 공을 담을 수 있는 상자가 하나 있다. 여기서 상자는 저장 공간을 의미하고, 공은 정보를 의미한다. 공의 상태, 즉 정보의 상태에 따라서 상자, 즉 저장할 수 있는 공간의 특성이 바뀌어야 하는 상황이 생긴다. 공이 젖어 있을 경우에는 종이 상자에 담으면 상자가 찢어져 버릴 게 분명하기 때문이다. 작은 상자에는 작은 공을 충분히 담을 수 있지만, 거대한 공을 작은 상자에 담기에는 무리일 것이다. 이렇게 저장하고자 하는 각 정보에 따라서 그 공간의 특성은 달라져야 한다.

파이썬에서는 변수를 통하여 이러한 기억이라는 기능을 수행하기 위하여 상자와 같은 기능을 하는 변수라는 곳에 각 자료를 담는다. 물론 각 자료의 형태가 중요하게 살펴봐야할 점이다.

연산하기

우리는 뇌를 통하여 빠르게 연산할 수 있다. 여러 정수와 실수를 계산하여 낼 수 있으며 복잡한 수식의 답을 내놓을 수 있다. 수학적 산술 연산뿐만 아니라 논리적인 연산이 될 수도 있다. 우리는 무수히 많은 참과 거짓인 명제들을 통하여 적절한 답을 만들어 낼 수도 있다.우리가 만드는 프로그램도 이러한 기능을 가지고 있어야 할 것이며, 여러 연산자들을 통하여 이 기능을 수행할 명령을 만들어 낼 수 있다.
다만 한 가지 주의하여야 할 것은 연산하려는 대상이 어떠한 형태를 가지는 지에 따라서 그 연산의 성격이 바뀔 수 있다는 점이다. 인간이 정수(整數)나 실수(實數)를 연산할 때에는 그다지 어렵다고 느끼지는 않을 것이다. 조금 어려워보이는 실수를 계산할 때에도 소수점을 어디에 찍어야 하는 지만 생각하면 된다. 하지만 컴퓨터에서는 이러한 정수와 실수마저도 저장하는 방식과 계산하는 방식에 그 차이점이 존재하며, 이러한 이유로 연산에서는 자료의 형태를 중요시하게 된다.

조건에 따라 행동하기

연산과 결이 비슷하게 인간은 논리적인 판단을 통하여 조건에 따라 행동할 수 있다. 그 조건에서는 어떠한 자료를 서로 비교하여 특정 행동을 수행하는 등의 산술적 혹은 논리적인 연산이 동반될 수도 있다. 이것이 자신에게 이득 혹은 손실을 가져다 줄 수 있지만, 중요한 점은 특정 조건에 따라 어떠한 행위에 대한 분기를 만들어 낼 수 있으며,이러한 분기에 따라 행동이 낳는 결과가 바뀔 수 있다는 점이다. 이를 정리하여 말하면 조건에 따라 결과 값이 변할 수 있는 행동을 취할 수 있다는 것이다.

프로그램에서도 이러한 조건에 따라 다른 명령을 수행하도록 명령을 만들어 낼 수 있다. 파이썬에서는 간단한 예약된 명령어를 따라서 조건에 따라 행위와 그 결과를 다르게 하는 기능을 수행할 수 있다.

반복하기

인간은 지속적인 반복적인 행위를 취할 수 있다. 인간은 무수한 반복되는 행위를 취하며, 이러한 반복적인 행위 중 자아실현에 영향을 주지 않고 반복적인 노동에만 소요되는 일들을 대체하기 위해 수많은 자동 기계들을 만들어 냈다.
컴퓨터도 그 중의 하나로 이러한 반복적인 작업을 컴퓨터가 대체할 수 있게 설계되었으며, 프로그램 또한 명령을 통하여 이러한 기능을 수행할 수 있다.

반복에는 위에서 언급한 조건이 수반되는 경우도 있다. 즉 어떠한 조건의 울타리 안에서만 특정 행동 또는 작업을 취하거나, 혹은 행동을 중단하는 것이다.
이처럼 반복이라는 행위에는 조건에 따른 행위가 적절히 수반되어야 그 시작과 끝을 명확히 할 수 있다.

파이썬에서도 간단한 예약된 명령어로 이러한 기능을 수행하도록 할 수 있다.

개념화하기

인간은 기본적으로 공통적인 특성 또는 행위들을 한데 묶어 개념화할 수 있는 능력을 가지고 있다. 각 객체들의 유사성을 통하여 하나의 개념을 만들어 낸다. 더불어 현실적인 개념을 더 높은 차원으로 추상화할 수도 있다. 개념의 부차적인 요소들은 제외되고 핵심 요소들만 가지고 다양한 행위를 진행할 수 있게 된 것이다. 우리는 이러한 개념 혹은 추상화된 개념을 가지고 연산을 해내거나 새로운 개념을 만들어 낼 수 있다.

이렇게 보자면, 우리가 지속적으로 이야기한 정수, 실수, 벡터 공간의 원소인 벡터와 같은 자료의 형태도 하나의 개념으로 나타낼 수 있다. 혹은 우리가 현실에서 만날 수 있는 다양한 것들이 개념화하여 나타낼 수 있을 것이다.

자동차를 생각하여 보자. 우리는 몇 개의 바퀴를 가지고 다른 에너지원을 통하여 인간이 그 안에 탑승하여 보다 먼 길을 갈 수 있도록 하는 기계 물체를 자동차라고 한다. 이러한 설명을 통하여 자동차라는 개념을 설명할 수도 있으며, 혹은 자동차에 대한 공통된 특성 요소들을 나열하여 나타낼 수도 있다.

명칭, 바퀴의 개수, 소유주의 이름, 기어의 단수, 속도계의 속도, 헤드 라이트를 켜고 끌 수 있음, 와이퍼를 작동할 수 있음 등

위에서 나타난 특성 요소들을 잘보면 아래와 같이 두 가지의 특성으로 나눌 수 있는 점이 보인다.

명칭, 바퀴의 개수, 소유주의 이름, 기어의 단수, 속도계의 속도

헤드 라이트를 켜고 끌 수 있음, 와이퍼를 작동할 수 있음

먼저 제시된 요소는 특정한 값을 가진다. 명칭이나 속도, 소유주의 이름 등은 모두 변하거나 변하지 않는 특정한 값들을 가지고 있다. 뒤에 제시된 요소의 경우에는 어떠한 움직임을 가진다. 조작판을 작동하면 헤드라이트를 켜거나 끄는 움직임을 만들어 낼 수 있으며, 와이퍼 스틱을 작동시키면 와이퍼가 작동하게 될 것이다. 이렇듯 움직임은 제시된 값을 변화시킬 수 있다. 가령 가속 페달을 밟으면 속도계의 속도가 증가하고, 브레이크 페달을 밟으면 속도가 감소하여 정지에 이르게 될 것이다. 즉, 어떠한 움직임이 속도라는 값을 변화시키는 것이다.

위와 같이 프로그램에서는 어떠한 개념을 값과 움직임으로 구분하여 정의내린다. 어떠한 값을 변수를 통하여 기억 혹은 저장할 수도 있으며, 움직임을 함수로 정의하여 저장된 값이나 결과를 변경하는데 사용할 수도 있다. 다만 변수의 경우 값을 저장하고 기억하는 공간이라고 이야기 하여 적용하는 예를 쉽게 이해할 수 있으나, 움직임을 함수라고한 점은 궁금증을 만들어 낼 수 있을 것이다. 이에 대한 설명은 추후 클래스와 함수라는 것을 설명할 때 덧붙이도록 하겠으며, 지금은 이러한 개념화에 대해서 좀 더 알아보도록 하자.

프로그램에서도 보다 인간친화적인 기능 수행을 위하여 인간의 이러한 면을 수행할 수 있다. 물론 개념을 컴퓨터가 직접 만들어 내지는 못하지만, 정의된 개념을 통하여 부속 개체들을 만들어 낼 수는 있다.이러한 개념을 우리는 클래스라고 한다.

각 객체의 공통적인 부분을 통하여 하나의 공통된 개념을 하나의 틀로, 즉 클래스를 만들어 내고 이와 유사한 또 다른 객체가 필요할 때 이 틀을 통하여 찍어내는 것이다. 추후 설명하겠지만 이러한 클래스를 통하여 만들어진 객체를 인스턴스라고 이야기한다. 더 정확하게는 이를 만들어 낸 클래스의 인스턴스라는 표현으로 그 관계성에 초점을 맞추어 표현한다.

이러한 개념화는 처음 보는 이들에게는 실제적으로 받아들이기에 어려움이 크며, 많은 이들이 이러한 클래스의 개념을 학습하기 시작하면서 좌절을 경험하게 된다. 하지만 너무 걱정 말고 앞으로의 이야기들을 통하여 차근차근히 배워가면 앞으로의 학습 과정에서 큰 도움이 될 것이다.

0개의 댓글