제어문 소개 및 if/else 문
우리의 삶은 수많은 선택과 반복적인 일로 이루어져 있습니다. 프로그래밍 또한 이와 유사하게 다양한 선택과 반복을 필요로 합니다.
- 조건문: 여러 갈래의 선택 중 하나를 선택하려면 조건문을 사용합니다.
- 반복문: 자주 반복되는 일을 처리하려면 반복문을 사용합니다.
이번 강의에서는 이러한 선택과 반복을 다루는 핵심 키워드들을 학습합니다. 이들을 통틀어 제어문이라고 부르며, 프로그래밍의 기본 구성 요소 중 하나입니다.
> // 제어문: if, else, for, foreach, while, do, break, continue, goto
1. 제어문
제어문(Control Statement, Loop)은 프로그램의 실행 순서를 제어하거나 프로그램의 내용을 반복하는 등의 작업을 처리할 때 사용되는 구문으로 조건문과 반복문으로 구분합니다. 우선 제어문을 간단히 먼저 정리해 본 후 하나씩 살펴보도록 하겠습니다. 다음 내용은 지금은 그냥 읽고 넘어가세요. 뒤에서 차례대로 배웁니다.
- 순차문: 기본적으로 모든 실행문은 순서대로 실행됩니다.
- 조건문(선택문 : Selection/Decision, Conditional Statements): 조건문은 조건의 참(true) 또는 거짓(false)에 따라 서로 다른 명령문을 실행할 수 있는 구조를 지닙니다. 조건문은
if
문과switch
문으로 구분할 수 있습니다. 조건문은 다른 말로 분기문 또는 비교판단문이라고도 합니다. - 반복문(Iteration/Looping Statement, Loop): 반복문은 특정 명령문을 지정된 수만큼 반복해서 실행하고자 할 때나 조건식이 참(true)일 동안 반복시킬 때 사용됩니다. 반복문은
for
문(구간 반복),do
문(선행 반복),while
문(조건 반복),foreach
문(배열 반복)으로 구분할 수 있습니다. - 점프문: C#에서 사용되는 기타 제어문으로는
break
문과continue
문 그리고goto
문이 있습니다.break
문은 반복문 내에서 반복을 중지하는 구문이고continue
문은 반복문 내에서 그 다음 반복문으로 이동하는 구문이고 마지막으로goto
문은 C#에서 자주 사용하지 않지만 레이블(레이블명과 콜론(:
)으로 만듦)로 지정된 곳으로 직접 이동시키는 구문입니다.
순차문: 순서대로 실행하기
프로그램은 기본적으로 순서대로 실행됩니다. Main
메서드 시작부터 끝 지점까지 코드가 나열되면 순서대로 실행 후 종료됩니다.
그림: 순차문 흐름
다음 코드처럼 국어점수와 영어점수의 총점과 평균을 구하는 예제를 살펴보겠습니다. 모든 로직은 순서대로 실행되어 그 결과가 출력됩니다. 지금까지 우리가 해오던 방식입니다. 이러한 순서를 변경할 수 있는 구조가 있는데 이번 강의부터 살펴볼 제어문의 내용입니다.
이번에는 프로그램 코드가 순서대로 실행되는 모양을 살펴보겠습니다.
코드: SequenceDemo.cs
using System;
class SequenceDemo
{
static void Main()
{
int kor = 100;
int eng = 90;
int tot = 0;
double avg = 0.0;
tot = kor + eng; // 총점 구하기
avg = tot / 2.0; // 평균 구하기
Console.WriteLine("총점: {0}", tot);
Console.WriteLine("평균: {0:F1}", avg);
}
}
총점: 190
평균: 95.0
순서대로 변수를 선언하고 총점과 평균을 구하고 그 값을 출력하는 형태로 순서대로 실행하고 있습니다. 이처럼 프로그램은 기본적으로 Main
메서드에서 순서대로 실행하게 되어 있습니다.
조건문: if
문과 가지치기
프로그램의 흐름을 여러 가지 갈래로 가지치기(Branching)를 할 수 있는데, 이 때에는 if
문이 사용됩니다.
if
문은 조건을 비교해서 판단하는 구문으로, if
, else if
, else
의 3가지가 있습니다. if
키워드 다음에 괄호를 사용하여 조건문을 기록합니다.
if
문의 기본 형태는 다음과 같습니다.
if (조건식)
{
// 조건문의 조건을 만족할 때 실행할 실행문들...
}
if
문은 if (조건식) 실행문;
모양인데 괄호안의 *조건식(논리식)*이 참이면 *실행문(문장)*을 실행하는 형태입니다.
if
문은 다음과 같이 중괄호가 없는 형태로도 사용됩니다. 이런 경우를 단문(Single Statement)이라고 하는데 하나의 실행문으로만 이루어진 경우에는 중괄호를 생략할 수 있습니다.
if (조건식)
실행문;
NOTE
C#에서 if
문을 사용할 때, 실행할 코드가 단 한 줄만 있는 경우 중괄호 {}
를 생략할 수 있습니다. 그러나 이런 생략은 코드의 가독성을 저하시킬 수 있고, 유지 보수 과정에서 실수를 일으킬 가능성을 높일 수 있으므로, 특히 여러 개발자가 협업하는 환경에서는 중괄호를 사용하여 명확하게 코드 블록을 정의하는 것이 권장됩니다. 또한, 나중에 추가 코드를 입력할 때 실수를 방지할 수 있으므로, 가독성과 안정성을 위해 중괄호를 생략하지 않는 것이 좋은 습관입니다.
제어문의 흐름을 그림으로 표시하면 다음과 같습니다. 이러한 그림을 순서도(FlowChart)라고 합니다. 참고로, 이 강의에서는 순서도는 따로 설명하지 않습니다.
그림: 순서도로 표시해 본 제어문
4. if
문을 사용하여 하나의 조건 처리
자, 그럼 처음으로 if
문을 사용해보겠습니다.
If.cs 파일의 클래스 이름인 If
는 반드시 대문자로 시작해야 합니다. 그렇지 않으면 if
문의 if
키워드와 혼동이 되어 에러가 발생합니다. 물론, 다른 이름으로 프로젝트와 클래스 이름을 지정해도 됩니다.
코드: If.cs
using System;
class If // 클래스 이름은 다른 이름 사용 가능
{
static void Main()
{
int score = 60;
// score가 60 이상이면 "합격" 출력
if (score >= 60)
{
Console.WriteLine("합격");
}
}
}
합격
if
문의 괄호에는 조건식이 들어옵니다. (score >= 60)
식의 결과가 참이면 "합격"을 출력하는 실행문을 실행하고 조건식의 결과가 거짓이면 아무것도 실행하지 않습니다. 이처럼 if
문은 조건식이 참이면 실행하고 그렇지 않으면 아무것도 실행하지 않는 구조를 가지고 있습니다.
단문과 복문
이번에는 if
문의 여러 가지 모양을 볼 수 있는 단문과 복문을 사용해보겠습니다.
코드: SingleMultiple.cs
> //[1] 단문: 3가지 스타일
> if (1 == 1) Console.WriteLine("단문 1");
단문 1
> if (1 == 1)
. Console.WriteLine("단문 2");
단문 2
> if (1 == 1)
. {
. Console.WriteLine("단문 3");
. }
단문 3
>
> //[2] 복문: 반드시 중괄호 사용
> if (1 == 1)
. {
. Console.WriteLine("복문 A");
. Console.WriteLine("복문 B");
. }
복문 A
복문 B
위 샘플 코드처럼 if (조건식)
문장 형태는 한 줄로 쓰거나 바로 그 다음 줄에 작성할 수 있습니다. 조건식 다음에 줄 바꿈을 할 때 복문이면 반드시 블록 기호인 중괄호({}
)가 있어야 합니다.
참고: if
문에 대한 코드 조각
Visual Studio에서 C# 코드를 작성할 때에 if
를 입력 후 탭을 두 번 입력하면 자동으로 if
문 코드 조각이 제공됩니다. if
문 및 앞으로 나올 else
, for
, do
, while
등의 주요 명령어에 대한 코드 조각을 다 제공하고 있습니다.
if
탭 탭else
탭 탭for
탭 탭
if
문을 비교 연산자와 함께 사용하기
조건문인 if
문은 말 그대로 조건을 판단하기에 비교 연산자와 함께 자주 사용됩니다.
코드: IfDemo.cs
using System;
class IfDemo
{
static void Main()
{
int x = 10;
if (x == 10)
{
Console.WriteLine($"x는 {x}입니다.");
}
if (x != 20)
{
Console.WriteLine($"x는 20이 아닙니다.");
}
}
}
x는 10입니다.
x는 20이 아닙니다.
비교 연산자의 결과가 참이면 if
문을 수행하고 거짓이면 if
문을 수행하지 않고 다음으로 진행합니다.
if
문을 사용하여 문자열 비교하기
문자열을 비교할 때 대소문자를 구분합니다. 이 때문에 if
문으로 문자열 비교할 때 주의해야 합니다.
이번에는 if
문을 사용하여 문자열을 비교해 보도록 하겠습니다. 다음 내용을 C# Interactive에 입력한 뒤 실행해보세요.
코드: StringCompare.cs
> string s1 = "Hello.";
> string s2 = "Hello.";
>
> s1 == s2
true
>
> if (s1 == s2) // s1과 s2가 같으면 true
. {
. Console.WriteLine("Same.");
. }
Same.
두 변수의 값이 같으면 "Same."을 출력하고 같지 않으면 아무것도 출력하지 않습니다.
!
(NOT) 연산자를 if
문의 조건식에서 사용하기
if
문의 조건식의 결과가 거짓이 아니면 즉, 참이면 실행문을 실행하는 모양을 살펴보겠습니다.
코드: IfNot.cs
using System;
class IfNot
{
static void Main()
{
bool bln = false;
if (!bln)
{
Console.WriteLine("bln: false -> ! -> true");
}
}
}
bln: false -> ! -> true
"~가 아니라면 ~를 실행해라"는 의미로 if
문과 !
(NOT) 연산자는 짝을 이뤄 많이 사용됩니다.
중첩 된 if
문: IfNested.*
if
문 안에는 또 다른 if
문을 넣을 수 있습니다. 이러한 모양을 중첩 된 if
문이라고 합니다.
하나의 조건이 만족하고 또 다른 조건이 만족할 때 어떤 일을 진행해야 한다면 중첩 된 if
문을 사용할 수 있습니다.
이번에는 중첩 된 if
문을 사용해보겠습니다.
코드: IfNested.cs
// 중첩 된 if 문
using System;
class IfNested
{
static void Main()
{
string name = "C#";
int version = 12;
if (name == "C#") // 첫 번째 조건
{
if (version == 12) // 두 번째 조건
{
Console.WriteLine($"{name} {version}");
}
}
}
}
C# 12
name
과 version
에 들어 있는 값이 if
문의 조건식에 맞으면 최종적으로 "C# 12" 문자열이 출력되는 예제입니다. 여러 개의 조건을 만족하고자 할 때에는 이처럼 여러 개의 if
문으로 묶어서 비교할 수 있는데 이를 중첩 된 if
문이라고 합니다.
코드: IfNested.js
// 중첩 된 if 문
var name = "JavaScript";
var version = 2023;
if (name == "JavaScript") {
if (version == 2023) {
console.log(name + " " + version);
}
}
JavaScript 2023
if
문으로 한번에 여러 개의 조건을 처리하기
논리 연산자를 if
문과 함께 사용하면 하나의 if
문으로 여러 개의 조건을 처리할 수 있습니다.
코드: IfAnd.cs
> int number = 1234;
>
> //[A] 2개의 조건이 모두 만족하면
> if (number == 1234 && number >= 1000)
. {
. Console.WriteLine("맞습니다.");
. }
맞습니다.
>
> //[B] 2개의 조건 중 하나라도 만족하면
> if (number == 1234 || number <= 1000)
. {
. Console.WriteLine("하나라도 참이면 참");
. }
하나라도 참이면 참
이번 예제에서 살펴본 것처럼 if
문의 조건식에 &&
연산자와 ||
연산자를 사용하여 하나 이상의 조건을 함께 처리할 수 있습니다.
참고: 인라인 out
변수와 if
문으로 형식 변환하기
이번 예제는 미리보기 형식의 예제로, 현재 시점에서는 이해가 가지 않아도 전혀 상관없으니, 편한 마음으로 읽고 넘어갑니다.
out
키워드는 인라인 out 변수라 불리는 out var
형태의 코드로 문자열에서 특정 값으로의 변환되는 값을 담는 변수를 자동으로 선언해 주는 기능을 제공합니다. 말이 조금 어려운데요. 바로 예제로 out var
를 사용해보겠습니다. 참고로, out var
구문은 C# 7.0 버전에 처음 소개되었습니다.
코드: OutVariable.cs
using System;
class OutVariable
{
static void Main()
{
// [1] C# 6.0까지의 사용 방법: 변수를 미리 선언
int r;
if (int.TryParse("안녕", out r))
{
// "안녕"은 int 형으로 변환이 불가능하기에 이 코드는 실행되지 않음
Console.WriteLine("{0}", r);
}
// [2] C# 7.0 이후로의 out var 방식
if (int.TryParse("1234", out var result))
{
// "1234"는 int 형식으로 변환이 가능하기에 result 선언과 동시에 1234가 저장됨
Console.WriteLine(result); // 1234
}
Console.WriteLine(result); // 1234 : if문에서 밖에서도 사용 가능
}
}
1234
1234
int.TryParse()
, double.TryParse()
형태의 형식 변환 메서드는 자주 사용됩니다. 문자열로 입력받은 자료를 특정 형식으로 변환이 가능하다면 바로 해당 변수를 선언 후 코드 내에서 사용할 수 있도록 편리함을 제공하는 기능이 바로 out var
코드입니다. 저도 처음에는 이게 필요할까 했는데 막상 사용해보니 편리해서 자주 쓰는 편입니다.
5. if
문 요약
프로그래밍의 시작은 순차적으로 무언가를 처리하는데 있습니다. 그런 이후 특정 조건에 따라서 서로 다른 조건을 처리해야할 필요성이 있어 if
문과 같은 제어문이 만들어졌습니다. 가장 기본적인 if
문을 시작으로 나머지 조건문과 반복문들을 계속해서 학습해나가도록 하겠습니다.
6. else
문을 사용하여 두 방향으로 분기하기
이번 강의는 if
문과 함께 사용해서 두 방향으로 분기하는 else
문을 다룹니다.
> // if ~ else 문: 만약 조건식이 참이면 if 문을 실행하고 그렇지 않으면 else 문을 실행
7. else
문
else
문을 사용하면 if
문의 조건이 거짓일 때 원하는 실행문을 실행할 수 있습니다. else
문은 단독으로 사용될 수 없고 if
문 다음에 else
문이 오는 구조입니다.
if
문의 조건이 거짓일 때 else
문이 실행됩니다. if
문은 else
문과 함께 사용되고 모양은 다음과 같습니다.
// 만약 조건식이 참이면 `실행문1`을 실행해라.
// 그렇지 않으면 `실행문2`를 실행해라.
> if (조건식)
. {
. // 조건식이 참일 때 실행할 실행문1;
. }
. else
. {
. // 조건식이 거짓일 때 실행할 실행문2;
. }
>
조건식이 참이면 실행문1을 실행하고, 조건식이 거짓이면 실행문2를 실행합니다.
이번에는 코드로 else
문의 사용 모양을 살펴보겠습니다.
코드: ElseNote.cs
> if (1 != 1)
. {
. //Console.WriteLine("조건식이 거짓이기에 현재 문장이 실행되지 않습니다.");
. }
. else
. {
. Console.WriteLine("조건식이 거짓이기에 현재 문장이 실행됩니다.");
. }
조건식이 거짓이기에 현재 문장이 실행됩니다.
위 샘플 코드처럼 조건식이 참이면 첫번째 문장이 실행되고 조건식이 거짓이면 두번째 문장이 실행되는 구조입니다.
if else
문을 순서도로 표현해 보면 다음과 같습니다.
그림: 순서도로 표현해 본 if else 문
CAUTION
else
에는 조건을 쓸 수 없습니다.
8. else
문을 사용하여 두 개의 조건 처리하기
이번에는 else
문을 사용해보겠습니다. Visual Studio 편집기에서 else
입력 후 탭을 두 번 입력하면 자동으로 else
문의 중괄호가 생성됩니다.
코드: Else.cs
using System;
class Else
{
static void Main()
{
int score = 59;
if (score >= 60)
{
Console.WriteLine("합격");
}
else
{
Console.WriteLine("불합격");
}
}
}
불합격
score
변수에는 59가 할당된 상태이기에 (score >= 60)
조건식이 거짓이 되므로 else
문이 실행되어 불합격
이 출력됩니다.
조건이 같은지 다른지 확인하기
조건이 같은지를 물어보는 모양은 다음과 같습니다.
코드: IfElse.cs
> double pi = 3.14;
>
> if (pi == 3.14)
. {
. Console.WriteLine("pi는 3.14입니다."); // 참일 때 실행
. }
. else
. {
. Console.WriteLine("pi는 3.14가 아닙니다."); // 거짓일 때 실행
. }
pi는 3.14입니다.
더 큰 수를 출력하는 프로그램
다음은 2개의 수를 입력한 후 그 중에서 큰 수를 출력하는 프로그램입니다.
코드: GreaterThanEqual.cs
// 2개의 수를 입력한 후 그 중에서 큰 수를 출력하는 프로그램
using System;
class GreaterThanEqual
{
static void Main()
{
Console.Write("첫 번째 수: ");
int first = Convert.ToInt32(Console.ReadLine());
Console.Write("두 번째 수: ");
int second = Convert.ToInt32(Console.ReadLine());
if (first >= second)
{
Console.WriteLine("큰 값: {0}", first);
}
else
{
Console.WriteLine("큰 값: {0}", second);
}
}
}
첫 번째 수: 3
두 번째 수: 5
큰 값: 5
(first >= second)
조건식이 만족하면 first
변수의 값이 더 큰 값이고, 조건을 만족하지 않으면 second
변수의 값이 더 큰 값이 됩니다.
두 수의 차이를 양의 정수로 구하기
이번에는 두 수의 차이를 양의 정수로 구하는 방법을 알아보겠습니다.
코드: NumDifference.cs
> //[?] 두 수의 차이를 양의 정수로 구하기
> int first = 3;
> int second = 5;
> int diff = 0;
>
> if (first > second)
. {
. diff = first - second; // first 변수가 더 큼
. }
. else
. {
. diff = second - first; // second 변수가 더 큼
. }
>
> Console.WriteLine($"{first}와 {second}의 차이: {diff}");
3와 5의 차이: 2
단수히 두 수의 차이를 구하려면 첫 번째 변수에서 두 번째 변수의 값을 빼면 됩니다. 하지만, 차이를 양의 정수로 구하려면 두 수 중에서 큰 값을 먼저 계산한 후 큰 값에서 작은 값을 빼면 양의 정수가 구해집니다.
대소문자 구분하기
다음 코드는 if else
문으로 입력 문자에 대한 대소문자를 구분해서 알려주는 프로그램입니다.
코드: CharTest.cs
using System;
class CharTest
{
static void Main()
{
// 콘솔로부터 문자 하나 입력 받기
Console.WriteLine("영문 대문자 또는 소문자 하나를 입력하세요.");
char c = Convert.ToChar(Console.ReadLine());
if (c >= 'A' && c <= 'Z')
{
Console.WriteLine($"{c}는 대문자입니다.");
}
else
{
Console.WriteLine($"{c}는 소문자입니다.");
}
}
}
영문 대문자 또는 소문자 하나를 입력하세요.
a
a는 소문자입니다.
이 예제는 사용자로부터 입력받은 영문자가 대문자인지 소문자인지 판별하여 출력하는 코드입니다. 사용자가 대문자를 입력하면 "대문자입니다."라는 메시지를, 소문자를 입력하면 "소문자입니다."라는 메시지를 출력합니다.
9. 중첩된 else
문
다음은 콘솔로부터 하나의 문자를 입력 받은 후 입력된 문자가 'y'이면 "Yes"를 출력하고 'n'이면 "No"를 출력하고 기타 나머지 문자가 입력되면 "Cancel"을 출력하는 프로그램입니다.
코드: ElseNested.cs
// 하나의 입력된 문자에 따라서 'y'이면 "Yes"를, 'n'이면 "No"를,
// 나머지는 모두 "Cancel"을 출력하는 프로그램
using System;
class ElseNested
{
static void Main()
{
Console.Write("문자를 입력하세요. (y/n/c): ");
char input = Convert.ToChar(Console.ReadLine());
if (input == 'y')
{
Console.WriteLine("Yes");
}
else
{
if (input == 'n')
{
Console.WriteLine("No");
}
else
{
Console.WriteLine("Cancel");
}
}
}
}
문자를 입력하세요. (y/n/c): y
Yes
if else
문 안에 또 다른 if else
문을 두어서 하나 이상의 조건을 반복해서 처리하는 내용을 살펴보았습니다. 조건식에는 &&
연산자와 ||
연산자를 사용해서 여러 조건을 처리할 수도 있고 if
문 자체를 여러 번 사용해서 여러 조건을 처리할 수 있습니다.
상장 수여 프로그램
사용자로부터 입력되는 점수에 따라서 서로 다른 상장을 수여하는 프로그램을 작성해 보겠습니다.
코드: IfElseScoreGrade.cs
using System;
class IfElseScoreGrade
{
static void Main()
{
Console.Write("점수: ");
int score = Convert.ToInt32(Console.ReadLine());
string grade = "";
if (score >= 90)
{
grade = "금메달";
}
else
{
if (score >= 80)
{
grade = "은메달";
}
else
{
if (score >= 70)
{
grade = "동메달";
}
else
{
grade = "노메달";
}
}
}
Console.WriteLine($"{grade}을 수상하였습니다.");
}
}
점수: 90
금메달을 수상하였습니다.
if~else
문을 3번 중첩해서 사용하여 4개의 조건을 구하는 프로그램을 만들어 보았습니다.
10. else if
문(다중 if 문, 여러 개의 조건식을 처리)
앞서 if else
문을 여러 개 사용하여 중첩해서 다중으로 조건을 처리할 수 있습니다. 이번에는 중첩하지 않고 여러 조건을 처리할 수 있는 else if
문을 사용해 보겠습니다. else if
문의 모양은 다음과 같습니다.
if (조건식1)
{
실행문1;
}
else if (조건식2)
{
실행문2;
}
…
else
{
실행문n;
}
조건식1이 참이면 실행문1을 실행하고, 그렇지 않고, 조건식2가 참이면 실행문2를 실행하고, 이를 원하는 조건만큼 반복하며 원하는 조건이 나오지 않으면 최종적으로 실행문n을 수행합니다.
else if
문 부분을 여러 개 두어서 더 많은 조건을 처리할 수 있는 구조입니다.
다중 if
문의 순서도 모양은 다음과 같습니다.
그림: 다중 if
문을 순서도로 표현
else if
문 사용하기
이번에는 else if
문을 사용해보겠습니다.
코드: IfElseIfElse.cs
> int number1 = 10;
> int number2 = 20;
>
> if (number1 > number2) // 조건 처리 1
. {
. Console.WriteLine("number1이 더 큽니다.");
. }
. else if (number1 < number2) // 조건 처리 2
. {
. Console.WriteLine("number2가 더 큽니다.");
. }
. else
. {
. Console.WriteLine("둘 다 같습니다.");
. }
number2가 더 큽니다.
첫 번째 if
문에서 첫 번째 조건을 처리한 후 조건을 만족하지 않으면 두 번째 else if
문의 조건을 따집니다. 두 번째 else if
문의 조건이 참이면 실행하고 그렇지 않으면 else
문을 실행하는 구조입니다.
양수, 음수, 0을 판단하는 프로그램
양수인지 음수인지 아니면 0인지를 판단하는 프로그램은 다음과 같이 작성할 수 있습니다.
코드: PositiveNegativeZero.cs
//[?] 정수를 양의 정수, 0, 음의 정수로 판단하기(else if)
using System;
class PositiveNegativeZero
{
static void Main()
{
int number = -10; //[1] 원하는 정수 데이터 입력
if (number > 0) //[A] 양수 판단
{
Console.WriteLine($"{number}은 양수입니다.");
}
else if (number < 0) //[B] 음수 판단
{
Console.WriteLine($"{number}은 음수입니다."); // *
}
else
{
Console.WriteLine($"{number}은 0입니다.");
}
}
}
-10은 음수입니다.
[1]
번 코드 영역에 입력한 데이터가 -10
이기에 [B]
번의 else if
문이 실행됩니다.
else if
문을 사용한 성적 결과를 나타내는 프로그램
이번에는 else if
문을 사용하여 성적 결과를 나타내는 프로그램을 작성해보겠습니다.
코드: ElseIf.cs
using static System.Console;
class ElseIf
{
static void Main()
{
int score = 59;
if (score >= 90)
{
WriteLine("A");
}
else if (score >= 80)
{
WriteLine("B");
}
else if (score >= 70)
{
WriteLine("C");
}
else if (score >= 60)
{
WriteLine("D");
}
else
{
WriteLine("F");
}
}
}
F
여러 개의 else if
문을 사용하여 다중으로 조건을 처리하고 마지막의 else
문을 기본값으로 사용하는 다중 if
문의 사용 예입니다.
점수에 따른 학점 계산 프로그램
사용자로부터 입력되는 점수에 따른 학점을 계산하는 프로그램을 작성해 보겠습니다. 단, 점수는 반드시 정수로 입력해야 합니다.
코드: ScoreGrade.cs
// if else 구문을 사용한 점수에 따른 학점 계산 프로그램
using System;
class ScoreGrade
{
static void Main()
{
int score = 0;
char grade = 'F';
Console.WriteLine("당신의 점수는? ");
score = Convert.ToInt32(Console.ReadLine());
if (score >= 90)
{
grade = 'A';
}
else if (score >= 80)
{
grade = 'B';
}
else if (score >= 70)
{
grade = 'C';
}
else if (score >= 60)
{
grade = 'D';
}
else
{
grade = 'F';
}
Console.WriteLine($"점수: {score}점");
Console.WriteLine($"학점: {grade}학점");
}
}
당신의 점수는?
100
점수: 100점
학점: A학점
이 프로그램은 사용자로부터 점수를 입력받아 해당 점수에 맞는 학점을 계산하고 출력합니다. if else
구문을 사용하여 점수 범위에 따른 학점을 판별하며, 간단하게 점수와 학점을 연결하는 예제로 활용할 수 있습니다.
11. 조건문(if 문)을 사용한 조건 처리 전체 정리
if
문을 사용하는 예제를 통해서 C# 프로그래밍 언어의 조건 처리를 위한 3가지 스타일과 기법을 정리해보겠습니다.
코드: IfElseAll.cs
using System;
class IfElseAll
{
static void Main()
{
//int a = 3;
Console.Write("정수 입력: _\b");
int a = Convert.ToInt32(Console.ReadLine());
//[1] if문
if (a % 2 == 0) // 짝수라면...
{
Console.WriteLine("짝수");
}
//[2] else문
if (a % 2 != 0) // 홀수
{
Console.WriteLine("홀수");
}
else
{
Console.WriteLine("짝수");
}
//[3] else if문
if (a % 3 == 0)
{
Console.WriteLine("3의 배수");
}
else if (a % 5 == 0)
{
Console.WriteLine("5의 배수");
}
else if (a % 7 == 0)
{
Console.WriteLine("7의 배수");
}
else
{
Console.WriteLine("3, 5, 7의 배수가 아닌 수");
}
}
}
콘솔에서 4를 입력했을 때의 실행 결과:
정수 입력: 4
짝수
짝수
3, 5, 7의 배수가 아닌 수
콘솔에서 13을 입력했을 때의 실행 결과:
정수 입력: 13
홀수
3, 5, 7의 배수가 아닌 수
소스에 대한 추가 설명입니다.
- [1]
if
문 : 입력된 숫자 값을 2로 나누었을 때 나머지가 0과 같으면(즉, 짝수이면) 메시지가 출력되고, 그렇지 않으면 다음 구문으로 넘어갑니다. - [2]
else
문 : 입력된 숫자 값을 2로 나누었을 때 나머지가 0과 다르면, 즉, 홀수이면 첫 번째 문장(홀수)을 수행하고 그렇지 않으면 두 번째 문장(짝수)을 수행합니다. - [3]
else if
문 : 입력된 숫자 값을 3으로 나누었을 때 나머지가 0이면(즉, 3의 배수이면) 첫 번째 문장을 수행하고, 그렇지 않고 입력된 숫자 값을 5로 나누었을 때 나머지가 0이면(즉, 5의 배수이면) 두 번째 문장을 수행하고, 그렇지 않으면 나머지 문장을 수행합니다.if
문과 같은 조건문은 어떤 문제를 해결함에 있어서 해당 데이터를 필터링(걸러냄)하는 역할을 주로 합니다. 주어진 데이터에서 짝수만 걸러낸다든가, 오늘 작성된 글만 검색한다든가 등등의 역할을 수행할 때도if
문이 사용됩니다.
12. 기본 데이터 형식의 TryParse 메서드를 통해서 형식 변환이 가능한지 판단하기
if ~ else
문과 TryParse()
메서드를 함께 사용하면 특정 형식으로 변환이 가능한지 체크를 할 수 있습니다. 이 내용도 지금은 몰라도 되는 내용이니 간단히 실행해 보고 넘어가도 됩니다.
다음 코드를 C# Interactive에서 단계별로 실행해보세요.
코드: TryParseDemo.cs
> string data = "1234";
> int result;
> if (int.TryParse(data, out result))
. {
. Console.WriteLine("변환 가능: {0}", result);
. }
. else
. {
. Console.WriteLine("변환 불가");
. }
변환 가능: 1234
> double d;
> if (Double.TryParse(data, out d))
. {
. Console.WriteLine("변환 가능: {0}", d);
. }
변환 가능: 1234
TryParse()
메서드는 특정 형식으로 변환이 가능하면 true
를 반환합니다.
참고로, C# 7.0 이후로는 out var
형식을 지원하기에 다음 코드와 같이 미리 변수를 선언할 필요없이 if
문에 out var r
형식으로 r
변수를 직접 만들어 사용할 수 있습니다.
코드: ConvertClass.cs
> if (double.TryParse("3.14", out var r))
. {
. WriteLine($"{r}: {r.GetType()}"); // 3.14: System.Double
. }
. else
. {
. WriteLine("변환 불가");
. }
3.14: System.Double
> r
3.14
만약, 변환이 가능하면 r
변수에는 변환된 값이 저장되고 그렇지 않으면 기본 데이터 형식이 저장됩니다.
13. 장 요약
C#에서 제공하는 조건문인 if
문과 else
문의 조합은 프로그래밍에 필수적으로 많이 사용되는 구문들입니다. 이번 장에서 여러 가지 모양으로 사용법들을 모두 소개한 것 같습니다. 이를 바탕으로 추가적인 제어문을 학습해 나가도록 하겠습니다.
참고 예제: C 언어 if
문으로 절댓값 구하기
절댓값은 어떤 수의 부호와 상관없이 그 수의 크기만을 나타내는 값입니다. 이번 예제에서는 C 언어의 if
문을 사용하여 사용자로부터 입력받은 정수의 절댓값을 구하는 프로그램을 작성해 보겠습니다.
코드: if_absolute_value.c
// if_absolute_value.c
// 예제: if 문으로 절댓값 구하기
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
int num; // 입력값
int abs; // 절댓값
int _; // 버림(Discards)
//[1] 입력
printf("정수 하나를 입력하세요: "); _ = scanf("%d", &num);
//[2] 처리: 절댓값(Absolute Value) 구하기
if (num < 0)
{
abs = -num;
}
else
{
abs = num;
}
//[3] 출력
printf("%d의 절댓값: %d\n", num, abs);
return 0;
}
정수 하나를 입력하세요: -21
-21의 절댓값: 21
이 예제는 if
문을 활용하여 입력된 정수가 음수일 경우 부호를 바꾸어 절댓값을 구하는 과정을 보여줍니다. 간단한 조건문을 이용해 수학적인 개념을 프로그래밍에 적용하는 데 효과적인 예시로 사용될 수 있으며, 초보자에게도 이해하기 쉬운 코드 구조로 되어 있습니다.
퀴즈
다음 코드 조각 중 if 조건문을 올바르게 사용한 예는?
if (int x = 10) { Console.WriteLine("x는 10입니다."); }
if (x == 10) Console.WriteLine("x는 10입니다.");
if x == 10 { Console.WriteLine("x는 10입니다."); }
if (x = 10) Console.WriteLine("x는 10입니다.");
정답: 2
해설:
- 1번은 조건문 내에서 변수를 선언하려고 하고 있습니다. 이것은 C#에서 허용되지 않는 문법입니다.
- 2번은 올바른 if 조건문의 형식을 가지고 있습니다.
x == 10
은 x가 10과 같은지 비교하는 조건입니다. - 3번은 조건을 괄호로 묶지 않았기 때문에 올바르지 않습니다.
- 4번은
x = 10
이라는 할당 연산을 사용하였습니다. if 조건문에서는 비교 연산==
을 사용해야 합니다.
C# if 조건문 퀴즈
퀴즈 1
int a = 10;
if (a == 10)
Console.WriteLine("Hello");
Console.WriteLine("World");
출력 결과는 무엇인가?
a. Hello
b. World
c. HelloWorld
d. 출력되는 결과가 없다
정답: c. HelloWorld
퀴즈 2
int num = 5;
if (num > 3)
if (num < 10)
Console.WriteLine("A");
else
Console.WriteLine("B");
출력 결과는 무엇인가?
a. A
b. B
c. AB
d. 출력되는 결과가 없다
정답: a. A
퀴즈 3
int value = 0;
if (value == 0)
Console.WriteLine("True");
else
Console.WriteLine("False");
출력 결과는 무엇인가?
a. True
b. False
정답: a. True
퀴즈 4
int x = 10, y = 20;
if (x != 0 && y > x)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
출력 결과는 무엇인가?
a. Yes
b. No
정답: a. Yes
퀴즈 5
char ch = 'A';
if (ch == 'B')
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");
출력 결과는 무엇인가?
a. Equal
b. Not Equal
정답: b. Not Equal
퀴즈 6
int val = 5;
if (val == 5)
;
else
Console.WriteLine("Five");
출력 결과는 무엇인가?
a. Five
b. 출력되는 결과가 없다
정답: b. 출력되는 결과가 없다
퀴즈 7
int i = 10, j = 5;
if (i > 7 && j == 5)
Console.WriteLine("Condition met");
출력 결과는 무엇인가?
a. Condition met
b. 출력되는 결과가 없다
정답: a. Condition met
퀴즈 8
int num = 3;
if (num == 3)
Console.WriteLine("Three");
else if (num == 4)
Console.WriteLine("Four");
else
Console.WriteLine("Unknown");
출력 결과는 무엇인가?
a. Three
b. Four
c. Unknown
정답: a. Three
퀴즈 9
int a = 5, b = 10;
if (a == b)
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");
출력 결과는 무엇인가?
a. Equal
b. Not Equal
정답: b. Not Equal
퀴즈 10
if (true)
Console.WriteLine("One");
if (false)
Console.WriteLine("Zero");
if (true)
Console.WriteLine("Minus One");
출력 결과는 무엇인가?
a. OneZeroMinus One
b. OneMinus One
c. ZeroMinus One
d. One
정답: b. OneMinus One
1.1 if
문 퀴즈 및 연습문제
1.1.1 퀴즈
(1) if
문을 사용하여 message
의 값이 "Yes"
일 때 문자열을 출력하는 올바른 방법을 고르세요.
a.
if message == "Yes"
{
Console.WriteLine("맞습니다.");
}
b.
if message == "Yes";
{
Console.WriteLine("맞습니다.");
}
c.
if (message == "Yes")
{
Console.WriteLine("맞습니다.");
}
d.
if (message == "Yes");
{
Console.WriteLine("맞습니다.");
}
정답: c
if
문은 괄호()
안에 조건식을 작성해야 합니다. 또한 조건식 뒤에는 세미콜론(;
)을 붙이면 안 됩니다.
(2) if
문을 사용하여 국어 점수(kor
)가 90 이상이거나 영어 점수(eng
)가 90 이상일 때를 검사하는 올바른 방법을 고르세요.
a.
if (kor >= 90 && eng >= 90)
b.
if (kor <= 90 && eng <= 90)
c.
if (kor >= 90 || eng >= 90)
d.
if (kor <= 90 || eng <= 90)
정답: c
if
문의 조건식에서 "이거나 또는" 조건을 표현할 때는||
연산자를 사용하고, "이고 그리고" 조건을 표현할 때는&&
연산자를 사용합니다.
1.1.2 연습문제: if
조건문 사용하기 – 음수 판별
다음 소스 코드를 완성하여 **"-1234은(는) 음수입니다."**가 출력되도록 하세요.
코드
using System;
class IfPractice
{
static void Main()
{
int number = -1234;
if (number < 0)
{
Console.WriteLine($"{number}은(는) 음수입니다.");
}
}
}
실행 결과
-1234은(는) 음수입니다.
정답
number < 0
해설
-1234는 음수이므로 if
문의 조건식이 true
가 되려면 number < 0
을 사용해야 합니다.
1.1.3 IfExam.cs
와 IfExam.java
C# 코드 (IfExam.cs
)
using System;
class IfExam
{
static void Main()
{
int age = Convert.ToInt32(Console.ReadLine());
if (age < 14)
{
Console.WriteLine("만 14세 미만 어린이는 부모님의 동의가 필요합니다.");
}
}
}
실행 결과
13
만 14세 미만 어린이는 부모님의 동의가 필요합니다.
Java 코드 (IfExam.java
)
public class IfExam {
public static void main(String[] args) {
int age = 13;
if (age < 14) {
System.out.println("만 14세 미만 어린이는 부모님의 동의가 필요합니다.");
}
}
}
실행 결과
만 14세 미만 어린이는 부모님의 동의가 필요합니다.
1.2 else
문 퀴즈 및 연습문제
1.2.1 퀴즈
(1) if
문에 대한 설명으로 올바른 것을 모두 고르세요.
a. if
문의 코드는 조건식이 거짓일 때 실행된다.
b. else if
문은 여러 번 사용할 수 있다.
c. else if
문은 단독으로 사용할 수 없다.
d. else
는 else if
문 앞에 올 수 있다.
정답: b, c
if
문의 코드는 조건식이 참일 때 실행됩니다.
else if
문은 여러 번 사용할 수 있으며, 단독으로 사용할 수 없습니다.
else
문은else if
문 앞에 올 수 없습니다.
(2) 다음 코드의 실행 결과로 올바른 것을 고르세요.
using System;
class ElseQuiz
{
static void Main()
{
int number = 7;
if (number % 2 == 0)
{
Console.WriteLine("짝수");
}
else
{
Console.WriteLine("홀수");
}
}
}
a. 짝수
b. 홀수
c. 7
d. 아무것도 출력되지 않는다.
정답: b
number
변수에는7
이 들어 있습니다.(number % 2 == 0)
조건식은(7 % 2 == 0)
이므로 거짓입니다.
따라서else
문이 실행되어"홀수"
가 출력됩니다.
1.2.2 연습문제: else
사용하기
다음 소스 코드를 완성하여 **"거짓"**이 출력되도록 하세요.
코드
using System;
class ElsePractice
{
static void Main()
{
bool bln = false;
if (bln)
{
Console.WriteLine("참"); // bln == true
}
else
{
Console.WriteLine("거짓"); // bln == false
}
}
}
실행 결과
거짓
정답
false
해설
if
조건문에서 불리언 변수 bln
을 사용했습니다. **"거짓"**이 출력되려면 if
조건이 false
여야 하므로 bln
변수는 false
로 설정해야 합니다.
만약 bln
변수가 true
로 설정되면 **"참"**이 출력됩니다.