프로그래밍의 기본: 참과 거짓, 그리고 ‘FALSE’ mymaster, 2024년 06월 16일 프로그래밍을 하다 보면 ‘이게 왜 아니라는 거지?’라는 의문에 빠질 때가 종종 있습니다. 코드는 분명 논리적으로 맞는 것 같은데, 컴퓨터는 자꾸만 예상과 다른 결과를 내놓습니다. 이런 오류의 원인 중 하나가 바로 ‘참(True)’과 ‘거짓(False)’을 나타내는 방법을 제대로 이해하지 못했기 때문일 수 있습니다. 특히 FALSE는 프로그래밍 언어나 환경에 따라 다르게 표현될 수 있어 초보 개발자들이 혼란을 겪기 쉬운 개념입니다. 이 글에서는 프로그래밍에서 ‘참’과 ‘거짓’이 어떻게 사용되는지, 그리고 FALSE가 구체적으로 무엇을 의미하는지 자세히 알펴봄으로써 여러분의 혼란을 해소하고 코드 작성 능력을 한 단계 더 향상시킬 수 있도록 돕겠습니다. 1. 컴퓨터와 대화하는 법: 참과 거짓의 세계 우리가 사용하는 언어는 다양한 뉘앙스와 미묘한 표현으로 가득 차 있습니다. 하지만 컴퓨터는 이러한 인간의 언어를 있는 그대로 이해하지 못합니다. 컴퓨터는 0과 1로 이루어진 이진법 체계를 사용하며, 모든 정보를 ‘참’ 또는 ‘거짓’으로 판단합니다. 예를 들어, “오늘 날씨가 춥다”라는 문장을 컴퓨터에게 이해시키려면 먼저 ‘춥다’는 기준을 정의해야 합니다. 만약 ’10도 이하’를 춥다고 정의했다면, 컴퓨터는 현재 온도가 10도 이하인지 아닌지 판단하여 ‘참’ 또는 ‘거짓’으로 결과를 출력합니다. 1.1 조건문과 반복문: 참과 거짓으로 프로그램의 흐름 제어하기 프로그래밍에서 ‘참’과 ‘거짓’은 단순한 정보 전달을 넘어 프로그램의 흐름을 제어하는 중요한 역할을 합니다. 조건문: 특정 조건이 ‘참’인지 ‘거짓’인지에 따라 다른 코드 블록을 실행합니다. 예를 들어, 사용자의 나이가 19세 이상일 경우만 영화 예매 페이지를 보여주는 코드를 작성할 수 있습니다. age = 20 if age >= 19: print("영화 예매 페이지로 이동합니다.") else: print("19세 미만은 이용할 수 없습니다.") 반복문: 특정 조건이 ‘참’인 동안 코드 블록을 반복적으로 실행합니다. 예를 들어, 사용자가 ‘종료’를 입력할 때까지 계속해서 메시지를 입력받는 코드를 작성할 수 있습니다. while True: message = input("메시지를 입력하세요 (종료하려면 '종료' 입력): ") if message == "종료": break print("입력한 메시지:", message) 2. 프로그래밍 언어마다 다른 ‘거짓’의 표현: ‘FALSE’는 무엇일까? 대부분의 프로그래밍 언어는 ‘참’을 나타내는 TRUE와 ‘거짓’을 나타내는 FALSE를 기본적으로 제공합니다. 하지만 일부 언어에서는 FALSE 대신 0, 빈 문자열, 빈 리스트 등 다른 값을 사용하여 ‘거짓’을 표현하기도 합니다. 이러한 차이점 때문에 다른 언어로 작성된 코드를 이해하거나 다른 환경에서 코드를 실행할 때 혼란이 발생할 수 있습니다. 2.1 Python: ‘False’와 그 외 ‘거짓’으로 평가되는 값들 파이썬에서는 False를 명확하게 ‘거짓’으로 정의합니다. 하지만 False 외에도 ‘거짓’으로 평가되는 값들이 존재합니다. 숫자 0: 정수 0, 실수 0.0 등 숫자 0은 모두 ‘거짓’으로 평가됩니다. if 0: print("참") else: print("거짓") # 출력 결과: 거짓 빈 문자열: 따옴표 안에 아무 글자도 없는 ” 또는 “”는 ‘거짓’으로 평가됩니다. if "": print("참") else: print("거짓") # 출력 결과: 거짓 빈 리스트, 튜플, 딕셔너리: [], (), {}와 같이 요소가 하나도 없는 컬렉션은 ‘거짓’으로 평가됩니다. if []: print("참") else: print("거짓") # 출력 결과: 거짓 None: 값이 없음을 나타내는 None 역시 ‘거짓’으로 평가됩니다. if None: print("참") else: print("거짓") # 출력 결과: 거짓 2.2 JavaScript: ‘false’와 ‘truthy’, ‘falsy’ 개념 자바스크립트에서는 false를 ‘거짓’으로 정의하며, true를 ‘참’으로 정의합니다. 흥미로운 점은 자바스크립트는 모든 값을 ‘참’ 또는 ‘거짓’으로 평가할 수 있다는 것입니다. Truthy: true 자체 외에도 숫자 1, 문자열 ‘hello’, 배열 [1, 2, 3] 등 대부분의 값들이 ‘참’으로 평가됩니다. Falsy: false 외에도 숫자 0, 빈 문자열 ”, undefined, null, NaN 등 특정 값들은 ‘거짓’으로 평가됩니다. if (1) { console.log("1은 Truthy"); } if ("hello") { console.log("'hello'는 Truthy"); } if ([]) { console.log("빈 배열도 Truthy"); } if (0) { console.log("0은 Falsy"); } else { console.log("0은 Falsy이므로 else문 실행"); } 2.3 다른 언어에서의 ‘거짓’ 표현 방식: 주의해야 할 점 C, Java 등 다른 프로그래밍 언어에서도 각자의 방식으로 ‘참’과 ‘거짓’을 표현합니다. 어떤 언어에서는 숫자 0을 ‘거짓’으로, 0이 아닌 모든 숫자를 ‘참’으로 간주하기도 합니다. 중요한 것은 특정 프로그래밍 언어를 사용할 때 해당 언어에서 ‘거짓’으로 간주되는 값들을 정확하게 이해하고 있어야 한다는 것입니다. 3. ‘FALSE’ 함정 피하기: 정확한 비교와 타입 이해의 중요성 FALSE는 프로그래밍 언어나 환경에 따라 다르게 표현될 수 있기 때문에, 코드 작성 시 주의하지 않으면 예상치 못한 오류가 발생할 수 있습니다. 3.1 느슨한 비교 vs 엄격한 비교: 예상치 못한 결과 방지 자바스크립트와 같이 동등 연산자(==)와 일치 연산자(===)를 모두 제공하는 언어에서는 ‘거짓’ 값 비교 시 특히 주의해야 합니다. 느슨한 비교 (==): 값만 비교합니다. 예를 들어, 0 == false는 ‘참’으로 평가됩니다. 엄격한 비교 (===): 값과 타입을 모두 비교합니다. 예를 들어, 0 === false는 ‘거짓’으로 평가됩니다. ‘거짓’ 값을 비교할 때는 엄격한 비교(===)를 사용하는 것이 좋습니다. 이를 통해 의도치 않게 ‘참’으로 평가되는 상황을 방지할 수 있습니다. if (0 == false) { console.log("값만 비교하므로 참"); } if (0 === false) { console.log("값과 타입 모두 비교하므로 거짓"); } else { console.log("실행"); } 3.2 타입 변환: 명시적 변환으로 오류 최소화 프로그래밍 언어는 특정 연산을 수행할 때 자동으로 변수의 타입을 변환하는 경우가 있습니다. 이러한 암시적 타입 변환은 편리하지만, 예상치 못한 결과를 초래할 수도 있습니다. 예를 들어, 문자열 ‘0’을 조건문에서 사용하면 ‘거짓’이 아닌 ‘참’으로 평가될 수 있습니다. if '0': print("'0'은 빈 문자열이 아니므로 참") 이러한 오류를 방지하기 위해서는 명시적 타입 변환을 사용하는 것이 좋습니다. if bool('0'): print("명시적 변환 후에도 '0'은 참") 3.3 디버깅 도구 활용: ‘거짓’ 값 추적 및 오류 해결 대부분의 개발 환경은 코드를 단계별로 실행하고 변수 값을 확인할 수 있는 디버깅 도구를 제공합니다. 이러한 도구를 활용하면 ‘거짓’ 값이 예상과 다르게 처리되는 부분을 쉽게 찾아 오류를 해결할 수 있습니다. 중단점 설정: 코드 실행을 특정 지점에서 멈추도록 중단점을 설정합니다. 변수 값 확인: 중단점에서 변수 값을 확인하고 ‘거짓’ 값이 예상대로 처리되고 있는지 확인합니다. 코드 단계별 실행: 코드를 한 줄씩 실행하면서 변수 값의 변화를 추적합니다. 4. ‘FALSE’ 이해를 넘어: 좋은 코드 작성 습관 FALSE와 관련된 오류를 방지하는 것 외에도, 명확하고 효율적인 코드를 작성하기 위한 몇 가지 팁을 소개합니다. 주석 활용: 코드에 주석을 추가하여 특정 조건을 ‘참’ 또는 ‘거짓’으로 평가하는 이유를 명확하게 설명합니다. 의미 있는 변수명 사용: 변수명만으로도 변수의 용도와 ‘참’ 또는 ‘거짓’ 여부를 쉽게 파악할 수 있도록 의미 있는 변수명을 사용합니다. 코드 스타일 가이드 준수: 일관된 코드 스타일을 유지하면 코드 가독성이 향상되어 오류를 줄일 수 있습니다. FALSE는 언뜻 보기에는 간단한 개념이지만, 프로그래밍에서 매우 중요한 역할을 합니다. ‘참’과 ‘거짓’을 정확하게 이해하고 활용하는 것은 논리적이고 효율적인 코드를 작성하는 첫걸음입니다. 이 글에서 소개한 내용들을 바탕으로 여러분의 코드 품질을 한 단계 더 향상시키고 성공적인 개발 여정을 이어나가기를 바랍니다. 목차 Toggle 1. 컴퓨터와 대화하는 법: 참과 거짓의 세계1.1 조건문과 반복문: 참과 거짓으로 프로그램의 흐름 제어하기2. 프로그래밍 언어마다 다른 ‘거짓’의 표현: ‘FALSE’는 무엇일까?2.1 Python: ‘False’와 그 외 ‘거짓’으로 평가되는 값들2.2 JavaScript: ‘false’와 ‘truthy’, ‘falsy’ 개념2.3 다른 언어에서의 ‘거짓’ 표현 방식: 주의해야 할 점3. ‘FALSE’ 함정 피하기: 정확한 비교와 타입 이해의 중요성3.1 느슨한 비교 vs 엄격한 비교: 예상치 못한 결과 방지3.2 타입 변환: 명시적 변환으로 오류 최소화3.3 디버깅 도구 활용: ‘거짓’ 값 추적 및 오류 해결4. ‘FALSE’ 이해를 넘어: 좋은 코드 작성 습관 post