Meandering Trajectory

if 문의 조건절 본문

컴퓨터/GoLang

if 문의 조건절

latentis 2018. 4. 8. 01:44

C나 C++ 같은 언어에서는 다음과 같이 조건절에 변수에 값을 할당(assignment)하는 문법을 사용하는 것이 가능하다.

if (x = 10) {

...

}

이것이 가능한 이유는 이들 언어에서 할당은 표현식[각주:1](expression)이고 0이 아닌 임의의 값이 참으로 간주되기 때문이다.

이런 특성 때문에 종종 프로그래머들은 등호(==)를 넣어야 할 자리에 할당 연산자(=)를 넣는 실수를 한다. 이런 실수를 할 경우 조건이 무조건 참이 되는데다가 변수의 값마저 변경되기 때문에 심각한 오류가 발생할 수 있다. 따라서 이런 실수를 방지하기 위해 많은 프로그래머가 if 문의 조건을 다음과 같이 쓰도록 조언한다.

if (10 == x) {

...

}

상수값과 변수의 위치를 바꾼 것이다. 이렇게 쓰면 등호를 할당 연산자로 잘못 썼다고 해도 컴파일할 때 오류가 발생하므로 바로 문제를 찾을 수 있다.

if (10 = x) { /* 컴파일 에러! */

...

}

상수에 값을 할당하는 것은 불가능하기 때문이다. 상수와 변수의 위치가 바뀐 모양이 보기에는 이상하지만 치명적인 버그를 방지할 수 있다는 점에서 좋은 습관이라고 할 수 있다.


반면 Go에서는 이런 실수 자체가 불가능하다. 조건절에 반드시 결과가 불리언(bool) 타입인 표현식이 와야 하기 때문이다. 다음과 같은 코드를 컴파일하면

if x = 10 {

...

}

이런 에러가 발생한다.

syntax error: x = 10 used as value

Go의 경우 할당문은 결과값을 갖지 않는다. 설령 값을 갖더라도 if 문의 조건에는 불리언 표현식만 허용되므로 어느 쪽으로든 문법에 위배된다.


그러니까 Go에서는 조건절에 굳이 상수와 변수의 위치를 바꿔 쓸 필요가 없다. 물론 상수가 앞에 오는게 미적으로 더 보기 좋다고 생각하는 사람도 있겠지만... ^^;;

  1. 표현식은 값을 갖고 문장(statement)은 값을 갖지 않는다. [본문으로]

'컴퓨터 > GoLang' 카테고리의 다른 글

panic과 recover  (0) 2019.02.03
인터페이스 타입과 nil  (0) 2018.02.10
Go가 내 에러를 먹었어염! ㅠ.ㅠ  (0) 2017.12.02
Go 코드에서의 에러 처리  (0) 2017.11.18
new와 make  (0) 2017.11.12
Comments