11. 관계형 연산자와 논리 연산자 사용하기
이번 강의는 두 변수의 관계를 따지는 관계형 연산자(비교 연산자)와 참 또는 거짓의 논리를 따지는 논리 연산자의 2가지 연산자에 대해서 학습합니다.
> // 관계형 연산자: < 작음, <= 작거나 같음, > 큼, >= 크거나 같음, == 같음, != 다름
> // 논리 연산자: && 논리곱, || 논리합, ! 논리부정
NOTE
박용준 강사의 강의에서는 관계형
연산자와 비교
연산자는 동일한 표현 방법입니다. Microsoft 공식 문서에는 주로 관계형 연산자로 표현하지만 전체적으로는 비교 연산자와 동일하게 표현합니다.
미리보기 강의: 관계형 연산자(Relational Operator) 의사 코드로 표현
11.1. 관계형 연산자
관계형 연산자(비교 연산자;Relational Operator, Comparative Operator)는 두 항이 큰지, 작은지 또는 같은지 등을 비교하는데 사용되며, 관계형 연산자의 결괏값은 논리 데이터 형식인 참(True) 또는 거짓(False)으로 출력됩니다.
관계형 연산자의 종류는 다음과 같습니다.
< (작음), <= (작거나 같음), > (큼), >= (크거나 같음), == (같음), != (다름(같지 않음))
아래 코드는 C# Interactive에서의 관계형 연산자의 실행 모습입니다.
코드: RelationalOperator.cs
> // 3이 5보다 작은지?
> 3 < 5
true
> // 3이 5보다 큰지?
> 3 > 5
false
다음은 관계형 연산자의 사용 예입니다.
표: 관계형 연산자
관계형 연산자 사용하기
두 변수의 관계를 비교해보는 관계형 연산자를 사용해보겠습니다. 다음 내용을 C# Interactive에 입력한 뒤 실행해보세요.
코드: OperatorRelational.cs
> // 관계형 연산자(비교 연산자;Relational Operator, Comparative Operator)
> // 관계형 연산자: < 작음, <= 작거나 같음, > 큼, >= 크거나 같음, == 같음, != 다름
> int x = 3;
> int y = 5;
> x == y
false
> x != y
true
> x > y
false
> x >= y
false
> x < y
true
> x <= y
true
C#에서 두 개의 데이터를 비교할 때 사용되는 비교 연산자 중에서 ==
연산자는 데이터가 같은 같은 확인합니다. 같으면 참(true
)을 다르면 거짓(false
)의 데이터인 bool
형식의 데이터가 반환됩니다. 나머지 관계형 연산자도 그 의미에 맞게 논리 형식의 결과가 주어집니다.
==
연산자를 사용해 문자열 값 비교하기
비교 연산자 중에서 등호 기호 2개를 사용하는 ==
연산자는 왼쪽 항과 오른쪽 항의 값이 같은지를 물어봅니다. 같으면 참을 다르면 거짓을 반환합니다. 다음 코드는 문자열을 비교하는 식인데 "AAA"와 "aaa"는 서로 다른 문자열로 인식하기에 결괏값은 False
가 출력됩니다.
이번에는 대소문자를 구분하여 문자열을 구분하는 기능을 사용해보겠습니다.
코드: DoubleEqual.cs
> Console.WriteLine("AAA" == "aaa"); // False
False
비교 연산자로 숫자뿐 아니라 문자열도 비교할 수 있습니다. 문자열은 그 값 자체를 비교할 때에도 대소문자를 구분합니다.
C#은 ==
, !=
등의 관계형 연산자 없이는 프로그램을 작성할 수가 없습니다. 다른 연산자도 마찬가지로 사용할 때 연산자 기호는 띄어쓰기를 하면 안 되며, 연산자와 피연산자 사이에는 공백을 하나 두는 방식을 추천합니다.
11.2. 논리 연산자 사용하기
논리 연산자(Logical Operator)는 논리곱(AND), 논리합(OR), 논리부정(NOT)의 조건식에 대한 논리 연산을 수행합니다. 연산의 결과 값은 참(True) 또는 거짓(False)의 부울(bool) 형식으로 반환되어 불리언(Boolean) 연산자라고도 합니다. 논리 연산자도 비교 연산자와 마찬가지로 결괏값은 참 또는 거짓 값을 반환합니다.
논리 연산자의 종류
논리 연산자의 종류는 다음과 같습니다.
표: 논리 연산자
논리표(진리표) : Truth Table
A항(식)과 B항(식)의 값에 따른 3가지 결과의 논리표(진리표, Truth Table)는 다음과 같이 표시할 수 있습니다.
표: 논리표
논리 AND 연산자(&&) 사용하기
논리 AND 연산자는 둘 다 참일 때에만 참을 반환합니다. 다음 내용을 먼저 살펴보세요.
코드: AndOperator.cs
> //[A] 둘 다 참일때에만 참
> Console.WriteLine(true && true); // True
True
> //[B] 하나라도 거짓이면 거짓
> Console.WriteLine(true && false); // False
False
AND 연산자인 &&
연산자를 프로젝트 기반 코드로 사용해 보겠습니다.
***코드: LogicalAnd.cs ***
// 논리 연산자: && -> 논리 AND: 양쪽 다 모두 참일 때에만 참
using System;
class LogicalAnd
{
static void Main()
{
// && 연산자: AND
Console.WriteLine($"true && true -> {true && true} "); // true
Console.WriteLine($"true && false -> {true && false} "); // false
Console.WriteLine($"false && true -> {false && true} "); // false
Console.WriteLine($"false && false -> {false && false}"); // false
}
}
true && true -> True
true && false -> False
false && true -> False
false && false -> False
실행 결과처럼 &&
연산자는 둘 다 참일 때에만 참을 반환해줍니다.
논리 OR 연산자(||) 사용하기
OR 연산자인 ||
연산자를 사용해 보겠습니다.
코드: OrOperator.cs
> // 하나라도 참이면 참
> false || true
true
> // 둘 다 거짓일때에만 거짓
> false || false
false
OR 연산자의 4가지 유형을 살펴보겠습니다.
코드: LogicalOr.cs
// 논리 연산자: || -> 논리 OR: 하나라도 참이면 참
using System;
class LogicalOr
{
static void Main()
{
// || 연산자: OR
Console.WriteLine($"true || true -> {true || true} "); // true
Console.WriteLine($"true || false -> {true || false} "); // true
Console.WriteLine($"false || true -> {false || true} "); // true
Console.WriteLine($"false || false -> {false || false}"); // false
}
}
true || true -> True
true || false -> True
false || true -> True
false || false -> False
실행 결과처럼 ||
연산자는 하나라도 참이면 참을 반환하고 둘 다 거짓일 때에만 거짓을 반환해줍니다.
참고: 단락 평가(Short-Circuiting Evaluation)
C#의 단락 평가는 AND 연산과 OR 연산 시 일부 연산의 결과에 따라 전체 연산 결과가 결정되도록 하는 기능을 지칭합니다. 이에는 두 가지 주요 유형이 있습니다.
(연산식1 && 연산식2)
: 만약연산식1
이 거짓(False)이라면,연산식2
의 결과와 관계 없이 전체 결과는 거짓(False)입니다.(연산식1 || 연산식2)
:연산식1
이 참(True)이라면,연산식2
의 결과에 관계 없이 전체 결과는 참(True)입니다.
연산식1
의 결과로 전체 결과가 이미 결정된다면, 연산식2
를 평가할 필요가 없습니다.
논리 NOT 연산자(!) 사용하기
NOT 연산자인 !
연산자를 사용해 보겠습니다. 먼저 다음 코드를 살펴보세요.
> (1 == 1)
true
> !(1 == 1)
false
> (1 != 1)
false
> !(1 != 1)
true
프로젝트 기반 코드로 다음 내용을 입력한 후 실행해 보세요. NOT 연산자는 항이 하나인 단항 연산자입니다.
코드: LogicalNot.cs
// 논리 연산자: ! -> 논리 NOT: 참이면 거짓, 거짓이면 참으로 변환
using System;
class LogicalNot
{
static void Main()
{
// ! 연산자: NOT
Console.WriteLine($"!true -> {!true} "); // false
Console.WriteLine($"!false -> {!false} "); // true
}
}
!true -> False
!false -> True
실행 결과처럼 !
연산자는 조건식의 결과를 반대로 바꾸어 줍니다.
논리 부정 연산자
논리 NOT 연산자 또는 논리 부정 연산자로 불리는 !
연산자를 다시 한번 사용해 봅시다.
코드: LogicalNegation.cs
//[?] 논리 부정 연산자: !
using System;
class LogicalNegation
{
static void Main()
{
var bln = false;
Console.WriteLine(!bln); // true
Console.WriteLine(!!bln); // false
Console.WriteLine(!(!(!bln))); // true
}
}
True
False
True
!
(느낌표) 연산자는 bool
형식 변수의 값을 반대로 변경합니다. true
값이면 false
로 false
값이면 true
로 변경해 줍니다.
논리 연산자 세가지 모두 함께 사용하기
간단하게 2개의 변수를 이용해서 논리 연산을 하는 프로그램을 작성해 보겠습니다.
다음 내용을 이력한 후 실행해 보세요.
코드: LogicalOperator.cs
using static System.Console; // System.Console까지 생략 가능
class LogicalOperator
{
static void Main()
{
var i = 3;
var j = 5;
var r = false;
r = (i == 3) && (j != 3); // r = true && true => true
WriteLine(r); // true
r = (i != 3) || (j == 3); // r = false || false => false
WriteLine(r); // false
r = (i >= 5); // r => false
WriteLine("{0}", !r); // false <-> true
WriteLine(false && true); // false
WriteLine((1 == 1) || (1 != 1)); // true
WriteLine(!(1 == 1)); // true -> false
}
}
True
False
True
False
True
False
웹 사이트의 로그인 페이지 등을 작성하다 보면 아이디도 정확(True)하고 암호도 정확(True)할 때에만 로그인을 처리해야 할 경우와 같을 때에는 AND(&&
) 연산을 수행해야 하고 로그인 후에 관리자 또는 회원만 게시판에 글을 작성하도록 처리할 경우에는 OR(||
) 연산이 주로 사용됩니다.
노트: 디버거 사용하기
C#에서 코드 분석을 쉽게 하려면 F10(프로시저 단위 실행) 또는 F11(한 단계씩 코드 실행)을 적절히 사용하면 도움이 됩니다. 이에 대한 내용은 강의 부록의 디버거 사용하기를 참고합니다. 다음 링크를 클릭해도 됩니다.
디버깅 모드에서 (i == 3)
과 같은 조건식에 마우스 커서를 올려보면 true
, false
의 값을 알려줍니다.
강의에서 따로 디버그 기능을 언급하지 않는다 하더라도 예제를 분석할 때마다 사용하기를 권장합니다.
장 요약
지금까지 값을 비교하는 관계형 연산자와 논리적인 참 또는 거짓을 다루는 논리 연산자에 대해 다루어 보았습니다.
정보처리산업기사 실기 시험 기출 문제 - 복합 논리 연산식
문제
다음 C# 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.
소스 코드 파일명: ComplexLogicalOperations.cs
using System;
class ComplexLogicalOperations
{
static void Main()
{
int a = 5, b = 10, c = 15, d = 30, result;
result = a * 3 + b > d || c - b / a <= d && 1 == 1 ? 1 : 0;
Console.WriteLine(result);
}
}
입력 예시
이 프로그램은 입력을 받지 않습니다.
출력 예시
1
해설
이 프로그램은 변수 a
, b
, c
, d
및 result
에 대한 복합 논리 연산식을 이용하여 최종적으로 result
의 값을 결정하고 출력합니다.
int a = 5, b = 10, c = 15, d = 30, result;
는 정수 변수a
,b
,c
,d
및result
를 선언하고 초기화합니다.result = a * 3 + b > d || c - b / a <= d && 1 == 1 ? 1 : 0;
연산을 분석합니다:a * 3 + b > d
연산은5 * 3 + 10 > 30
, 즉25 > 30
이므로 거짓(false
)입니다.c - b / a <= d && 1 == 1
연산은15 - 10 / 5 <= 30 && true
, 즉15 - 2 <= 30 && true
로,13 <= 30
은 참(true
)입니다.- C#에서는
&&
연산이||
연산보다 우선 순위가 높으므로,&&
연산이 먼저 평가됩니다. 하지만 여기서는 전체 조건이 참이므로, 최종 결과는 참(true
)입니다. - 조건 연산자 (
? :
)를 사용하여true
일 경우1
을, 거짓일 경우0
을result
에 할당합니다.
Console.WriteLine(result);
는result
의 값인1
을 출력합니다.
이 프로그램은 복합 논리 연산자(||
, &&
)와 관계 연산자(>
, <=
)를 사용하여 복잡한 조건을 평가하고, 이를 통해 최종적인 불리언 결과를 도출합니다. 이 예제는 조건 연산의 우선 순위와 논리 연산의 결과를 이해하는 데 도움을 줍니다. C#에서는 이러한 비트 및 조건 연산을 통해 복잡한 논리를 간결하게 표현할 수 있습니다.
1.1 퀴즈
(1) &&
연산자의 결과로 올바른 것을 모두 고르세요.
a. true && true
의 결과는 false
b. false && false
의 결과는 false
c. false && true
의 결과는 true
d. true && false
의 결과는 false
정답: b, d
&&
(AND) 연산자는 두 값이 모두true
일 때만 결과가true
가 됩니다.
나머지는 모두false
가 됩니다.
(2) ||
연산자의 결과로 올바른 것을 모두 고르세요.
a. true || true
의 결과는 false
b. false || false
의 결과는 false
c. false || true
의 결과는 false
d. true || false
의 결과는 true
정답: b, d
||
(OR) 연산자는 둘 중 하나라도true
이면true
가 됩니다.
두 값이 모두false
일 때만false
가 됩니다.
(3) 논리값의 결과를 뒤집는 연산자로 올바른 것을 고르세요.
a. ?
b. ^
c. !
d. @
정답: c
논리 부정(NOT) 연산자인
!
은 논리값을 반대로 변환합니다.
예:!true
→false
,!false
→true
(4) 첫 번째 값만으로 결과가 확실하여 두 번째 값을 검사하지 않는 연산식을 모두 고르세요.
a. true && false
b. false && true
c. true || false
d. false || true
정답: b, c
단락 평가(short-circuit evaluation)
&&
연산자는 첫 번째 값이false
이면 결과가 무조건false
이므로 두 번째 값을 검사하지 않습니다.||
연산자는 첫 번째 값이true
이면 결과가 무조건true
이므로 두 번째 값을 검사하지 않습니다.
1.2 연습문제: 논리 연산자 사용하기
다음 소스 코드를 완성하여 출력 결과가 모두 "True"
가 나오도록 하세요.
코드
using System;
class LogicalOperatorPractice
{
static void Main()
{
bool bln1 = true;
bool bln2 = false;
Console.WriteLine("[1] {0}", bln1 && bln1); // [1] True
Console.WriteLine("[2] {0}", bln1 || bln2); // [2] True
}
}
실행 결과
[1] True
[2] True
정답
[1] && 또는 ||
[2] ||
해설
- [1]
bln1
이true
이므로bln1 && bln1
과bln1 || bln1
모두true
가 됩니다. - [2]
bln2
는false
이지만,bln1 || bln2
에서는bln1
이true
이므로 결과는true
가 됩니다.