티스토리 뷰


말씀드린대로 Python은 IDLE이라는 GUI를 가지고 거진 모든 활동이 여기를 통해서 이뤄집니다. 강의에서는 크게 

- Text Editor

- Shell With Highlighting

- Debugger

가 내장되어 있다고 하는 일단 디버거가 있는 것만 봐도 프로그래밍시 오류를 효과적으로 찾을 수 있는 요소가 되지 않을까 생각합니다.


Python에서 형성되는 모든 것을 Object라고 합니다. 물론 지금 작성하려는 코드도 역시 하나의 Object라고 할 수 있지요. 이 Object에는 Type이라는 built-in Function이 들어 있는데 여러분들이 아시는 정수형이니 소수점형이니 하는 그런 형태를 지칭합니다. 크게 Scaler와 Non-Scaler로 나룰 수 있는데 이제 다룰 Scaler Type은 그냥 그 자체가 정의가 되는 요소입니다.

자 3이라는 Object의 Type을 알아봅시다.



다들 아시는 것처럼 정수형입니다. 위와같이 Built-in Function을 사용하면 보라색으로 표현됩니다.  



물론 bool형 Type에 대해서도 표현이 되고 이에 대한 연산도 가능합니다. 



재미있는 건 None이라는 Type도 있고 이에 대한 Type도 NoneType으로 되어 있다는 겁니다. 그런데 말그대로 아무의미가 없는 것이 아니라 보통은 임시로 데이터를 저장하는 버퍼의 역할을 수행합니다. 



지금 소개되어 잇는 Type들이 모두 Scaler Type이고 느끼시다시피 다른 어떤 걸로 분리가 될 수 없습니다.


다음으로 다룰게 Non-Scaler Type인데 가장 대표적인게 string형 변수이지요. 이때 큰 따옴표나 작은 따옴표의 차이는 없습니다. 그냥 그안에 있으면 무조건 str형 변수로 처리됩니다. 유의를 할 점이 있다면 Scaler Type도 따옴표안에 들어가면 str형 변수로 바뀐다는 겁니다. 



이런 개념에 적응이 된다면 이제 수식을 사용할 수 있습니다. 강의에서는 

expression = Sequence of Operand & Operator

라고 설명하는데 즉 Object와 Operator를 결합해서 결과를 표현하는 것이지요. 한가지 알아둘 점이 있다면 넘겨준 Object의 Type에 맞게 결과물도 나온다는 것이지요. 즉, Scaler Type끼리 연산하면 Scaler 결과값이 나오고 이 반대도 성립한다는 겁니다. 하지만 이 두개가 결합되서 연산될 수 없습니다. 이때는 Python 자체에서 SyntexError를 뿜게 되지요.



지금까지 다룬건 간단한 수식에 대한 연산이었는데 사실 프로그래밍을 하려면 일련의 코드들이 있어야겠지요, Python은 이 코드의 집함체를 Script라고 합니다. Script 자체가 곧 프로그램이 되는 것이지요. 그래서 첨부자료로 제공되는 Python Script가 있습니다.


lec02.py


python script는 확장자가 py로 되어 있으며 이걸 Shell을 통해서 여시면 다음과 같이 뜹니다.



하지만 이 script상에 있다고 해서 무조건 실행되는 shell에 보여지는게 아닙니다. 이 Script의 결과물을 아까와 같은 Shell상에 띄우기 위해서는 역시 print라는 명령어를 써야합니다.



이렇게 f5키를 누르면 다음과 같이 실행되는 것이지요. 만약 실행구문에 print명령어가 들어가 있지 않으면 그냥 아무것도 출력되지 않습니다.


이제 새로운 함수인 raw_input()이 등장하는데 이 함수는 키보드의 입력값을 받아내는 역할을 합니다. 그런데 여기서 한가지 알아둘 점이 있는데 일단 script의 주석을 지우고 실행시켜봅시다.



int와 float을 넣었는데 해당 변수를 str Type으로 받아들이고 있습니다.즉 이렇게 raw_input을 통해서 받는 값은 모두 string으로 받아들입니다. 이걸 직접 연산에 사용하고 싶다면 이전에 type을 바꿔주는 과정이 필요하겠지요.


다음으로 다룰 내용은 Conditional statement인데  참조자료에서는 다음과 같습니다.



C와 마찬가지로 조건문을 구현할 때 if / else가 있는데 python에서는 따로 Block이라는 개념이 없기 때문에 들여쓰기가 중요해집니다. 즉 기존의 C에서 block이 조건문 만족시 실행되는 동작영역이었다면 Python에서는 들여쓰기가 이 block의 역할을 대신하게 되는겁니다. 들여쓰기를 Indent라고 하는데 만약 다음과 같은 경우를 봅시다.



이렇게 되면 위와  같이 바뀌면 3으로 나눴을 때의 결과는 짝수이든 홀수이든 상관없이 나타난다는 겁니다. 이전의 코드에서는 홀수에서만 3에 대한 결과가 나타날 것이겠구요. 이러면 만약 6을 집어넣었을 때의 결과가 달라지겠지요.


 이런 형태를 보통 punctuation이라고 합니다. 굳이 직역하면 구두법인데 그렇게 된다면 C나 Java에서 표현하는 조건문이나, python에서 표현하는 조건문은 형태는 같을지 몰라도 표현 방식에 있어서는 조금 달라지겠지요. 자 첫번째 코드로 실행시켜봅니다.



조건문을 다루게 되면 나오는 개념이 바로 branch입니다. 조건문의 조건에 해당되냐 아니냐에 따라서 각각의 branch가 나눠지게 되며, 경우에 따라서는 그안에 sub-branch가 있게 되는 것이지요. 우리가 실행시키고 있는 프로그램 역시 branching Program입니다. 

 그런데 이런 게 중요할까요? 사실 이런 branch가 생기고 나면 코드의 길이가 길어집니다. 이 프로그램이 실행되면서 해당 branch에 대한 조건을 읽게 되고, 이건 실행속도에도 영향을 끼치겠지요. 또 한번씩 실행되기 때문에 전체적인 Size에도 영향이 있을 것이고요. 그래서 branch를 얼마나 효율적으로 만드느냐가 전체적인 성능을 좌우하게 됩니다.

이밖에도 Looping에 대한 개념도 나왔는데 이 부분은 다음 포스트에서 마저  나올 듯 합니다.


댓글