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와 같은 표현을 사용할 수 없습니다.
새 프로젝트를 생성하여 논리 연산 표현을 사용해 보아요.
[그림 1] LiteIDE에서 새 프로젝트 생성 및 소스 파일 추가
논리 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] 논리 연산 예제 실행 화면
관련 게시글
[구글 Go 하자] 16. 직관적인 사칙 연산과 비교해 보세요.
[구글 Go 하자] 17. 변수의 값을 특정 범위에서 순환하게 하기
[구글 Go 하자] 18. 자신의 값을 1 증가하거나 감소시키는 증감 연산자
[구글 Go 하자] 19. Go언어에서는 비교 연산자를 사용하는 곳이 많아요.
[구글 Go 하자] 21. 비트 단위로 연산하는 비트 연산자
'언어 자료구조 알고리즘 > 구글 Go' 카테고리의 다른 글
[구글 Go 하자] 25. 표준 입력 함수 Scanln, Scan, Scanf 사용하기 (0) | 2016.10.03 |
---|---|
[구글 Go 하자] 24. 표준 출력 함수 Println, Print, Printf 사용하기 (0) | 2016.06.03 |
[구글 Go 하자] 23. 다양한 대입 연산자, 좌항에 상수는 올 수 없어요. (0) | 2016.06.01 |
[구글 Go 하자] 22. 쉬프트 연산은 비트 단위로 자리를 이동합니다. (0) | 2016.06.01 |
[구글 Go 하자] 21. 비트 단위로 연산하는 비트 연산자 (0) | 2016.06.01 |
[구글 Go 하자] 19. Go언어에서는 비교 연산자를 사용하는 곳이 많아요. (0) | 2016.05.30 |
[구글 Go 하자] 18. 자신의 값을 1 증가하거나 감소시키는 증감 연산자 (0) | 2016.05.30 |
[구글 Go 하자] 17. 변수의 값을 특정 범위에서 순환하게 하기 (0) | 2016.05.30 |
[구글 Go 하자] 16. 직관적인 사칙 연산과 비교해 보세요. (0) | 2016.05.30 |
[구글 Go 하자] 15. 부호 연산자도 연산자 (0) | 2016.05.30 |