Chapter 2. Python 기본 문법에 대하여

Python은 종전에 우리가 알고 있는 언어인 C나 C++과는 다르게 중괄호를 여닫는 방식이 아니라 들여쓰기에 민감한 문법을 가지고 있습니다. 우리가 흔히 말하는 화이트 스페이스 중에서도 개행과 관련이 없는 문자여야만 합니다. 예를 들어 가로 탭 (키보드의 Tab키로 입력이 가능한 기본 8글자/4글자 크기의 탭을 말합니다.) 이나 스페이스 정도가 있겠지요. 이 점이 제일 중요하죠. 제 생각에, 파이썬을 이용해서 프로그래밍을 하다가 사람들이 흔히 겪는 문제점은 대부분 이런 차이점으로부터 나타나는 것 같습니다.

IronPython도 Python의 기본 문법을 충실히 지원하도록 만들어졌기 때문에 이번 강좌를 통해서 배우게 되는 기본 Python 문법은 다른 Python 버전에서도 그대로 적용이 됩니다. 그럼 기본 문법을 알아보도록 하죠. ^^

꼭 기억하세요!: 이전 장에서도 언급하였듯이 우리가 이 강좌 내내 사용할 기본 프로그램은 IronPython 콘솔이라고 하였지요? IronPython 콘솔 프로그램인 ipy.exe를 실행하셔야 합니다. 콘솔 창이 나타나도록 해주세요. 그리고 특별한 설명이 없어도 >>> 라는 프롬프트는 입력하지 않아야 한다는 것은 알고 계시죠?


>>> 2+2

위의 수식을 입력하고 실행하면 당연히 숫자 4를 반환할 것입니다. 이전 장에서 공부하였던 수식 계산을 다시 참조해 보세요. ^^


>>> print “Blah Blah Blah”
>>> print ‘Something Special in FePy!’

print 라고 하는 명령어는 표준 출력 장치 (특별한 언급이 없는 한 콘솔 윈도우나 콘솔 그 자체를 의미하지만 리디렉션 처리를 한다면 프린터나 혹은 다른 응용프로그램에서 사용하는 파일 핸들로도 열릴 수 있기 때문에 화면이라 하지 않고 표준 출력 장치라고 했습니다. 혼동 없으시길 바랍니다.)에 지정한 문자열을 출력하는 명령어입니다.

문자열을 사용하는 방법이 어색하지 않다는 것을 확인할 수 있습니다. C나 C++에서 해왔던 것 처럼 겹 따옴표를 사용하거나 겹 따옴표가 아닌 홑 따옴표를 사용하여 문자열로 지정하고 싶은 내용을 감싸기만 하면 되는 것입니다.


>>> x = 10

위의 구문은 x라고 하는 변수를 할당하고 그곳에 10을 대입한 것입니다. Python에서의 변수 선언은 위와 같이 극도로 단순합니다. 위에서는 정수 10을 지정했지만 정수가 아니라 일반 문자열, 소수는 물론 복소수, 각종 객체 등을 지정하거나 생성할 수 있습니다. Python은 복소수를 내부적으로 지원하므로 좀 더 복잡한 수치 계산을 필요로 하는 수학 시뮬레이션 등에서 요긴하게 사용할 수 있는 언어입니다.


>>> print x

위에서 x라는 것을 선언하였으니 print 구문을 즉시 응용해보도록 하죠. print는 문자열을 받는 것 처럼 보였지만 정확히 말하면 어떤 형식이든 객체는 다 받게 되어있습니다. 만약 숫자가 들어온다면 숫자를 문자열로 바꾸어 출력할 것이고, 문자열이만 그대로, 일반적인 객체라면 객체의 형식과 메모리 주소 같은 정보를 표현할 것입니다.

콘솔 윈도우이기때문에 설명을 하나 더하도록 하지요. 콘솔 모드에서는 프로그램의 디버깅도 해야하기 때문에 print 구문을 이용하지 않았어도 숫자의 값이나 객체의 정보가 출력되곤 합니다만 print 구문을 이용하지 않는 경우 문자열에 포함된 이스케이프 문자들을 이스케이프 처리하여 표시합니다. 즉, 줄 띄우기나 탭 등을 정확히 표현하지 않는 대신 n이나 t 같은 기호로 대신 표시한다는 뜻입니다.

기본적인 변수 선언과 화면 출력 방법은 확인하였습니다. 이제 그러면 진짜 언어 답게 쓸 수 있기 위해서 필요한 조건문과 반복문을 배워보도록 하죠.

IronPython 콘솔을 이용하는 동안 우리는 한 줄에 실행될 수 있는 명령문만을 입력해왔습니다. 하지만 지금부터 사용할 조건문이나 반복문은 한 줄에 끝나는 경우는 드뭅니다. 너무 당연한 사실이죠. 그러면 한 줄 이상을 입력할 방법이 없지 않느냐라고 궁금해하실텐데요. 그렇진 않습니다. 여러줄 입력 모드에 돌입하게 되면 제가 위에서 사용했던 >>> 프롬프트 대신 … 이라는 프롬프트로 바뀌게 됩니다. 이 상태에서 명령어를 입력하고 있는 것이라면 여러줄 모드를 의미합니다. 그리고 여러줄 입력의 끝을 알리는 것은 간단합니다. … 이라는 프롬프트가 나타난 상태에서 그냥 Enter 키를 입력하면 여러 줄 입력이 끝났으며 실행하겠다는 뜻으로 전달됩니다.

계속 이어서, 우리가 아까전에 설정한 변수 x를 활용하여 조건문을 연습해보도록 합시다. 그리고 들여쓰기 기호를 명시하기 위하여 [탭] 이라는 약물기호를 사용하겠습니다. 그대로 타이핑하지 마시고 반드시 Tab 키나 Space 키를 눌러서 띄워주십시오.


>>> if x == 4:
… [탭]print “x is 4!”
… else:
… [탭]print “x is not 4!”

위와 같이 입력한 후 실행하면 두 번째 조건으로 선택될 것입니다. 왜냐면 x의 값은 여전히 10이기 때문이겠지요. 이제부터 중요한 것을 설명하겠습니다.

여러줄에 걸쳐서 입력이 필요한 명령 구문을 사용하는 경우 반드시 그 줄의 끝에는 : 기호를 붙여야만 합니다. 그렇지 않으면 그냥 끝나는 단문으로 인식하기 때문에 실행할 수 없다는 오류를 띄우겠지요. 이렇게 여러 줄 입력 모드가 시작됩니다. 그리고 서두에서 이야기하였듯이 탭 들여쓰기가 중요하다고 하였습니다. 탭 들여쓰기가 이루어진 지점은 : 기호가 붙은 지점에 대하여 하위 세그먼트라는 의미가 됩니다. 만약 이 탭이 사라진다면 의미가 일치하지 않게되므로 잘못된 구문이 되는 것입니다. 위의 예제에서는 탭 들여쓰기를 한 번만 하였지만 앞으로 우리는 필요한 만큼 탭 들여쓰기를 계속하여 중첩 시킬 수도 있습니다.

두 개체를 비교하기 위한 연산자로 위에서는 == 연산자를 사용하였습니다. 같지 않음을 표현하기 위하여 != 연산자나 <> 연산자를 사용합니다.

이제 우리가 자주 사용하는 반복문을 배워보도록 합니다. 반복문도 여러 줄 입력을 사용해야 하므로 위에서 설명한 원리를 그대로 적용해야겠습니다.


>>> for i in range(x):
… [탭]print i

내장 함수 하나를 소개합니다. range() 함수인데 반복문을 사용할 때에도 사용하지만 오름차순으로 정렬되어있으면서 등간격으로 숫자를 채워넣은 배열을 만드는 유용한 함수입니다. 위의 결과대로라면 0부터 9까지의 값이 한줄씩 차례로 출력될 것입니다.

range() 함수에 대해서 좀 더 살펴보도록 합니다. range() 함수는 세 가지 버전의 오버로드를 가지고 있는데 아래와 같습니다.


* object range(object stop): 0부터 stop까지를 등간격 1로 채웁니다.
* object range(object start, object stop): start부터 stop까지를 등간격 1로 채웁니다.
* object range(object start, object stop, object step): start부터 stop까지를 등간격 step으로 채웁니다.

지금의 for 구문의 사용법은 C#의 foreach나 Visual Basic .NET의 For Each를 연상하시면 되겠습니다. 여기서의 for 구문은 Index 증감 연산을 기반으로하는 것이 아니라 Iteration을 기반으로 사용한 것입니다. 그래서 in 연산자를 사용하는 것이지요.

긴 설명이었지만 차분히 따라하시면서 익히면 재미있으실 겁니다. 다음 장에서는 함수에 관한 실제를 살펴보도록 하겠습니다.

댓글 남기기