큐펭스토리
파이썬 강의, 프로그래밍 문제 풀이, 지식 공유 및 정리용
프로그래밍 언어, 명령어 ( Instruction )
명령어 ( instruction ) 에 대한 설명이 빠진 채로 글이 진행되고 있는 것 같아 추가한다.


우리는 프로그래밍 언어로 컴퓨터랑 소통한다. 이러한 프로그래밍 언어는 다양한 명령어들의 집합으로 이뤄져 있다. 프로그램을 사람의 언어로 읽으려고 할 때 서술어에 관련된 부분을 명령어라고 생각하면 쉽다.

더하라 : add

종료하라 : exit

이러한 예시들이 있다. 각 프로그래밍 언어마다 기본적으로 제공하는 명령어의 이름, 종류, 기능은 조금씩 다를 수 있다. 따라서 해당 언어에서 제공되는 정확한 명령어를 숙지할 필요가 있다.




앞서 말했듯, 프로그램은 명령어들의 나열로 짜여져 있다. 순차적으로 실행되는 명령어들이 각각 정해진 규칙에 의해 컴퓨터를 동작시키는 것이다. 아래에 1부터 10까지의 숫자를 더해서 결과를 알려주는 프로그램 예시를 들고 왔으니 살펴보자. (모바일 화면에서 깨질 수도 있다. )


1
2
3
4
5
6
sum = 0
n   = 0
while n<10 :
    n   = n+1
    sum = sum+n
print sum

cs


오른쪽 순서도는 프로그램의 흐름을 순서도로 나타낸 것이고, 왼쪽은 그에 해당하는 파이썬 코드이다.

START에서부터 프로그램은 시작된다. 실제 파이썬의 경우 전처리 과정에 필요한 많은 것들이 이때 이뤄진다. ( 응용 프로그램 단계에서는 크게 중요하지 않으니 넘어가자. )

- 1줄에서는 0이라는 숫자를 새로 만들어서 변수 sum[각주:1] 에 저장한다. 이제부터 sum이라는 변수로 무언가를 연산시킨다면 숫자 0이 불려올 것이다.

- 2줄에서는 0이라는 숫자를 새로 만들어서 변수 n 에 저장한다. sum과 마찬가지로 n 이라는 변수를 이용한 연산은 숫자 0이 불린다.

- 3줄에서는 변수 n 이 10보다 작은지 검사한다. 검사 결과가 참이라면 4줄로 가고, 거짓이라면 6줄로 간다. 파이썬 코드의 while 반복문으로 이를 구현할 수 있다. n<10을 검사한 뒤 결과가 참이라면 4,5줄의 프로그램 블록을 실행하고서 n<10을 재검사하고, 결과가 거짓이라면 6줄의 프로그램 블록으로 곧장 가버린다. 들여쓰기로 프로그램 블록을 나눈 것이다.

- 4줄에서는 n+1을 연산해서 변수 n에 새로 저장한다. 4줄 실행 전까지 n 이 0이었다면 4줄을 실행하고 나면 n은 1이 될 것이다.

- 5줄에서는 sum+n을 연산해서 변수 sum에 새로 저장한다. 5줄 실행 전까지 sum 이 0이고 n이 1이었다면 5줄을 실행하고 나면 sum 은 1이 될 것이다. 이후 3줄로 간다.

- 6줄에서는 sum 값을 가져와서 화면에 출력시킨다.

END를 만나 프로그램은 끝난다. 파이썬을 위해 들고왔던 많은 것들을 정리한다.


따라서 위 프로그램은 n이 0부터 10까지 변하게 되고 sum에는 1+2+3+..+10 이 저장되면서 최종적으로 55를 출력하고 종료한다.




프로그램의 동작은 결과적으로 동일할지라도 다른 명령어를 사용할 수도 있고, 명령어의 순서가 달라질 수도 있다. 더 빠른 프로그램 (시간 효율이 좋은 프로그램) 이 될 수도 있고, 더 적은 메모리를 사용하는 프로그램 (메모리 효율이 좋은 프로그램) 이 될 수도 있다. 똑같은 동작을 하는 프로그램들을 여럿 살펴보자.


1
2
3
4
5
# ver 2
sum = 0
for n in [1,2,3,4,5,6,7,8,9,10]:
    sum = sum + n
print sum
cs


ver2: while 반복문을 for 반복문으로 바꾼 것이다. 변수 n을 1부터 10까지 하나씩 변화시키면서 4줄의 sum = sum + n을 반복적으로 실행시킨다. 10까지 더하고나면 반복문이 끝났으므로 5줄로 넘어가서 sum을 출력시킨다.


1
2
3
4
5
# ver 3
sum = 0
for n in xrange(111):
    sum = sum + n
print sum
cs


ver3: for문을 돌릴때 xrange를 사용해서 1부터 11-1=10까지 돌리라는 명령을 구현할 수 있다.

cf) xrange(a,b)는 [a, a+1, a+2, ..., b-1]를 순회할 수 있게 만들어준다. (단, a,b는 정수)


1
2
3
4
5
# ver 4
sum = 0
for n in xrange(111):
    sum += n
print sum
cs


ver4: sum = sum + n 이란 명령어를 4줄과 같이 바꿀 수 있다. 변수를 갱신할 때 선호하는 쪽을 선택해서 사용할 수 있다.




필요한 경우, 프로그래머가 명령어를 새로 정의해서 쓸 수 있다. 함수, 메소드[각주:2] 등의 이름으로 불리는 것들을 정의해서 새로운 명령어를 사용한다. 함수 사용과 관련해서 자세한 설명은 다음 글에서 새로 쓰도록 하겠다. 지금은 맛만 보자.


1
2
3
4
5
6
7
8
# ver 5
def sum10():
    sum = 0
    for n in xrange(111):
        sum += n
    print sum
sum10()
sum10()
cs


ver5: sum10() 이란 함수를 새로 정의해서 ver4 기능을 집어넣었다. 7,8줄에서 이렇게 함수를 실행시키면 55를 출력하게 한 번씩 총 두번 출력할 것이다.


1
2
3
4
5
6
7
# ver 6
def sum_n( n ):
    sum = 0
    for i in xrange(1, n+1):
        sum += i
    return sum
print sum_n( 10 )
cs


ver6: sum_n( n )이란 함수는 숫자를 받아서 1부터 그 숫자까지 더하는 기능을 하게 된다. 7줄에서 sum_n( 10 )의 결과를 받아서 print 55 를 실행시키는 것이다.





기능이 명확한 명령어들을 잘 정의해서 사용하면 동일한 동작으로 하는 프로그램일지라도 훨씬 간결명료하게 표현할 수 있다. 너무 많은 동작을 한 번에 묶으면, 다양한 문제들에서 사용하기 어렵다. 코드 재사용의 입장에서도 불리한 것이다. 동작과 기능을 적절히 분류 분리해서 프로그래밍하는 능력이 요구된다. 이것들을 구분해서 적재적소에 쓰는 능력은 지금 초보 단계에선 이해하기 어려우므로, 지금은 건너뛰고 강의를 진행하면서 좀 더 자세히 설명하도록 하겠다.

  1. 파이썬 키워드로 sum을 제공하기 때문에 사실은 좋지 않은 변수명이다. [본문으로]
  2. 명령어 / 함수 / 메소드 등 혼란을 줄 수 있는 용어들을 구분없이 사용해서 헷갈릴 수 있지만 지금은 그냥 넘어가자. 지금은 그냥 컴퓨터가 알아들을 수 있도록 하는 단어/문장 정도로 이해하고 사용할 수 있으면 된다. [본문으로]
  Comment ,     Trackback