Introduction

코드 리뷰하다가, 가끔 만나는 포인터 접근, 이러한 접근을 잘못하면 크래쉬가 나기 쉽다. 이러한 사실을 알고 있음에도, 포인터 접근에 대한 계산이 가끔 잘 안될 때가 있다. 오늘 그러한 계산이 잘 안되는 코드를 발견하여 정리해 둔다.

Content

크다 와 작다는 같다 보다 왜 더 이해 하기 어려울까?

우선 작다 또는 크다의 의미를 if 문을 통해 생각해 보면 다음과 같다.

if ( 1 > 2 ) 는 거짓이다. 왜냐하면 1이 2보다 작은데 크다고 했기 때문이다.
if ( 2 > 2 ) 는 거짓이다. 왜냐하면 2는 2보다 크지는 않기 때문이다.
if ( 3 > 2 ) 는 참이다. 왜냐하면 3은 2보다 더 크기 때문이다.

그러므로 크다 또는 작다의 반대는 >= 이거나 <= 이 된다.

그러면 같다 는 어떨까?

if ( 1 == 2 ) 는 거짓이다. 왜냐하면 1과 2는 안같기 때문이다.
if ( 2 == 2 ) 은 참이다. 왜냐하면 1과 2는 같기 때문이다.
if ( 3 == 2 ) 는 거짓이다. 왜냐하면 3과 2는 안같기 때문이다.

그러므로 같다 의 반대는 != 로 표현 할 수 있다.

이 처럼 크다와 작다는, 큰 것도 아니고 작은 것도 아닌 "상태"가 있어 애매모호해 지므로, 판단하는데 뇌를 더 써야만 한다. 하지만 같다는 둘 중 하나만 생각하면 되므로, 이해가 빠르다. 아마도 실제 생활에서 크다와 작다라는 개념보다, 같다와 틀리다 라는 개념을 더 많이 사용해서 그럴 수도 있다.(실제 생활에선 난수가 많아서 예를 찾기가 힘드네..)

그러므로, 항상 두 가지 상태에서 한 가지를 고르는 코드가 더 이해하기가 쉽다는 뜻이다.

case 1은, 크다 or 작다 개념이 들어 있는 코드이고, case 2는 같다, 틀리다 개념이 들어 있는 코드이다.


Digression

아마도 이런 실수 한 두번쯤 경험 했을 것이다. ...

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. Favicon of https://www.ikpil.com 농사를 짓는 게임 프로그래머 최익필 2010.01.13 01:53 신고  Addr  Edit/Del  Reply

    추가 여담
    .. 훈련을 통해서 어떠한 경우에서건 헷갈리지 않는게 더 좋다. 나는 이렇게 생각했다.

  2. 곰토리 2012.07.25 11:51  Addr  Edit/Del  Reply

    if ( 2 == 2 ) 은 참이다. 왜냐하면 1과 2는 같기 때문이다. => if ( 2 == 2 ) 은 참이다. 왜냐하면 2과 2는 같기 때문이다.

    오탈자 확인 바랍니다 :)