상수를 왼쪽에 쓰는 이유…

@codemaru · May 30, 2012 · 6 min read

if(A == 10)
{
    // 뭔가 멋진 동작
}

흔한 C언어 비교 구문입니다. C언어 코딩 컨벤션 중에 위와 같은 구문에서 if문의 상수 위치를 변경해서 사용하는 것이 있습니다. 아래와 같이 말이죠.

if(10 == A)
{
    // 뭔가 멋진 동작
}

이런 것을 강제하는 회사도 있는데, 전 개인적으로 이 표기법을 굉장히 증오합니다. 잘못 알려진 헝가리언 표기법 만큼이나 싫어합니다. 그런데 중요한 것은 위와 같은 방식에는 그 나름의 논리적인 이유가 있어서 저렇게 한다는 겁니다. 그런데 맥락도 모르고 그냥 상수를 왼쪽에다 쓰는 건줄 알고 사용하는 개발자들이 있습니다. 아래처럼 말이죠.

if(10 >= A)
{
    // 뭔가 멋진 동작
}

정말 이건 아닙니다. 이건 아니예요. 우선 왜 if문의 상수를 왼쪽에다 쓰는지 그 이유를 알아봅시다. C언어의 경우 대입 연산자도 표현식으로 if문에 사용할 수 있습니다. 대입 연산자의 경우에 대입된 값이 if문 평가에 사용되죠. 즉, 아래 코드가 완전 합법적인 C 코드라는 말이죠.

if(A = 10)
{
    // 뭔가 멋진 동작
}

개발자가 의도한건 저런건 아니었겠죠. 왜냐하면 저건 사실 아래와 동일한 코드이기 때문에 if문을 쓸 필요가 없습니다.

A = 10;
// 뭔가 멋진 동작

여기서 개발자가 한 실수는 사소한 타이핑 실수입니다. ‘==’ 를 써야 할 자리에 ‘=’를 쓴거죠. 그러면서 구문 자체가 완전 엉뚱해져 버린 겁니다. 엄청난 코드 더미에서 이런 실수가 하나 있다면 잡는게 쉽진 않겠죠. 그래서 앞서 말한 상수를 왼쪽에다 적는 컨벤션이 나온 겁니다. if(10 = A) 이렇게 실수로라도 쓰면 컴파일 오류가 나거든요. 이런 사소한 타이핑 실수를 방지하기 위해서 상수를 왼쪽에다 쓰는 겁니다.

자 그럼 이제 if(10 >= A)를 살펴봅시다. 이건 정말 의미 없는 짓입니다. if(10 >= A)를 타이핑하려고 했던 개발자가 실수로 if(10 = A)로 타이핑을 할까요? 별로 가능성이 없습니다. 그러니 이런 표현식에는 애초에 굳이 상수를 왼쪽에다 쓸 필요가 없는거죠.

끝으로 제가 이 표현식을 왜 증오하는지를 조금 설명드리겠습니다. 코드는 컴퓨터가 읽는게 아니라 사람이 읽는 겁니다. if(10 == A)라는 구문을 만난다고 생각해봅시다. 10은 A와 같다라고 보통은 읽힐 겁니다. 눈에 10이 먼저 들어오니까요. 그런데 우리가 원래 하려고 했던 생각은 대체로 A는 10과 같다일겁니다. 즉, 한번 꼬여서 머릿속에 들어온다는 거죠. if(10 >= A)가 되면 좀 더 심해집니다. 당연히 원래 의도는 A는 10보다 작거나 같다를 의도했겠지만 실제 식은 10은 A보다 크거나 같다가 되었습니다. 머리에서 한번 더 생각해야하고 번역 작업이 들어간다는 거죠. 그래서 전 이런 표현식을 싫어합니다. 아주 많이.

진짜 끝으로 한 가지 이야기만 더 하겠습니다. 이건 C언어 이야깁니다. 파이썬 코드를 if 10 == A:와 같이 작성할 필요는 정말 전혀 없습니다. 왜냐하면 파이썬에서는 if A = 10: 자체가 오류가 나는 구문이기 때문입니다. 그러니 머릿속에서 생각나는대로 구현하면 됩니다. 젭알 그걸 한번 더 꼬아서 쓸 필요는 없어요.

진짜 진짜 끝으로 사족을 하나 더 달자면 요즘 컴파일러는 정말 기똥차게 좋습니다. if(A = 10) 같은 구문은 경고 레벨만 올려도 잡을 수 있고, 정적 분석 도구를 사용한다면 지나치다 싶을 정도로 친절한 설명을 들을 수 있습니다. 그러니 우리가 고생하면서 꼬아서 쓸 필요가 없습니다. 선조들이 돌도끼로 사냥했다고 우리도 돌도끼로 사냥할 필요는 없잖아요.

좋은 도구를 사용해야 레벨업이 편합니다. 현실 세계에서도 말이죠.

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중