Sunday, August 26, 2012

변수 지정과 연산의 순서(Assignment and order of evaluation)

프로그래밍을 처음 배우는 대부분의 학생들이 겪는 2가지 어려움은 대개 변수의 지정과 연산의 순서라고 볼수 있습니다.
(역자 주: 여기서 말하는 연산은 일반적으로 쓰이는 사칙 연산보다도 더 큰 개념을 의미합니다. 여기서는 컴퓨터, 혹은 컴파일러가 정보를 처리할때 행하는 연산을 의미합니다.)

변수 지정

다음 몇줄은 대부분의 프로그래밍 언어에서 제작된 대부분의 프로그램에서 대부분의 학생들이 마주칠 다른 몇줄들과 상당히 유사합니다.
    a = 10;
이 줄의 의미는 "a의 값이 10이 되도록 하라"는 의미입니다. 역시 다음에 나오는 줄 또한 "b의 값이 20이 되게 하라" 입니다:
    b = 20;
그렇다면, 다음 줄은 무엇을 의미하는 것일까요?
    a = b;
다들 알고 계신다고 생각합니다만 안타깝게도 위의 한줄은 수학에서의 등호를 의미하는것이 아닙니다. 위 표현은 "a는 b와 같다"를 의미하는 것이 아닙니다!  앞에서의 두줄의 논리를 이번에도 적용한다면 "a의 값이 b가 되게 하라"라는 의미가 됩니다. a의 값이 b가 되게 하란 말은 즉 "a의 값이 b와 같은 값을 가지게 하라"라는 의미와 같습니다.

차이를 이해 하시겠습니까? 수학에서 잘 알려진 = 문자는 프로그래밍에서는 전혀 다른 의미를 가집니다: 등호의 왼쪽의 값이 등호 오른쪽의 값을 가지게 합니다.

연산의 순서

프로그램은 정해진 순서대로 연산을 수행합니다. 앞에서 본 3줄의 코드는 프로그램에서 다음의 순서를 가집니다.
    a = 10;
    b = 20;
    a = b;
위 세줄은 전체적으로 다음과 같은 의미를 가집니다: "a의 값이 10이 되게 한 다음 b의 값이 20이 되게 한다. 그 다음 a의 값이 b와 같은 값을 가지게 한다.". 이와 같이 위 세줄을 컴파일러가 처리한다면 a와 b의 값 모두 20이 됩니다.

연습문제

밑에 보이는 세줄의 코드는 a와 b의 값을 교환하는 코드입니다. a와 b의 초기값이 각각 1과 2라고 한다면, 연산이 끝난 뒤에는 각각 2와 1이 될것입니다. 독자분들은 각자 아래와 같은 논리를 생각 해 봅시다.
        c = a;
        a = b;
        b = c;
    

No comments:

Post a Comment