[Go 언어] 20. Go언어의 논리 연산의 피연산자는 bool 형식만 올 수 있어요.

안녕하세요. 언제나 휴일, 언휴예요.

이번 게시글에서는 Go 언어의 논리 연산을 살펴보아요. Go 언어에서는 논리 연산에는 논리 AND(&&), 논리 OR(||), 부정(!)을 제공합니다.

Go 언어에서 3<4와 같은 비교 연산의 결과는 bool 형식 값인 true입니다. 그리고 3<2<4와 같은 표현은 문법 에러를 발생합니다. 3<2<4 표현에서 3<2 부분의 연산 결과는 bool 형식 false이며 false<4와 같은 표현은 문법에 맞지 않기 때문입니다. 이럴 때 논리 연산을 사용하여 표현합니다.

C언어와 C++에서는 정수 값이 0이면 거짓으로 취급하고 0이 아니면 참으로 취급하여 3<2<4와 같은 표현을 사용할 수 있지만 Go 언어에서는 사용할 수가 없어요. 하지만 C언어와 C++에서 3<2<4의 연산 결과는 거짓이 아닌 참이어서 개발자의 생각과 다른 값을 갖는 표현이예요. 3<2 표현은 거짓이며 결과값은 0입니다. 따라서 0<4를 수행하므로 결과가 참이 나오는 거예요. 이러한 특징은 개발자를 편하게 하는 것이 아니라 버그가 발생할 확률을 높이는 결과를 가져옵니다.

Go 언어에서는 이러한 문제점을 해결하기 위하여 정수 값을 논리 값으로 사용하지 못하게 하고 있습니다. 따라서 3<2<4와 같은 표현을 사용할 수 없습니다.

새 프로젝트를 생성하여 논리 연산 표현을 사용해 보아요.

[그림 4] LiteIDE에서 새 프로젝트 생성 및 소스 파일 추가

[그림 1] LiteIDE에서 새 프로젝트 생성 및 소스 파일 추가

// Example 논리 연산 개요
package main
 
import "fmt"
 
func main() {
    fmt.Println("true&&true  =", true && true)
    fmt.Println("true&&false =", true && false)
    fmt.Println("false&&true =", false && true)
    fmt.Println("false&&false=", false && false)
       
    fmt.Println("true||true  =", true || true)
    fmt.Println("true||false =", true || false)
    fmt.Println("false||true =", false || true)
    fmt.Println("false||false=", false || false)
   
    fmt.Println("!false =", !false)
    fmt.Println("!true =", !true)
   
    fmt.Println("(2 < 3) && (3 < 4)", (2 < 3) && (3 < 4))
}

논리 AND는 두 개의 피연산자가 모두 true 일 때만 연산 결과가 true입니다.

  • 논리 AND (&& 연산자)
    fmt.Println("true&&true  =", true && true)
    fmt.Println("true&&false =", true && false)
    fmt.Println("false&&true =", false && true)
    fmt.Println("false&&false=", false && false)

출력 결과는 다음과 같아요.

true&&true = true
true&&false = false
false&&true = false
false&&false= false

논리 OR는 두 개의 피연산자 중에 하나만 true여도 연산 결과는 true입니다.

  • 논리 OR (|| 연산자)
    fmt.Println("true||true  =", true || true)
    fmt.Println("true||false =", true || false)
    fmt.Println("false||true =", false || true)
    fmt.Println("false||false=", false || false)

출력 결과는 다음과 같습니다.

true||true = true
true||false = true
false||true = true
false||false= false

논리 부정은 피연산자가  true일 때는 결과는 false이며, false일 때 결과는 true입니다.

  • 논리 부정(! 연산자)
    fmt.Println("!false =", !false)
    fmt.Println("!true =", !true)

출력 결과는 다음과 같습니다.

!false = true
!true = false

만약 수식 표현 2<3<4와 같은 표현을 사용하고 싶다면 (2<3) && (3<4)처럼 비교 연산 결과를 피연산자로 논리 연산을 수행하세요.

  • (2<3)&&(3<4)
    fmt.Println("(2 < 3) && (3 < 4)", (2 < 3) && (3 < 4))

출력 결과는 다음과 같습니다.

(2 < 3) && (3 < 4) true
[그림 2] 논리 연산 예제 실행 화면