할당 연산자와 증감 연산자 사용하기
이번 강의는 변수에 값을 대입하는 할당 연산자와 변수의 값을 증가 또는 감소시키는 증감 연산자에 대해서 정리합니다.
> // 할당 연산자와 증감 연산자: =, +=, -=, *=, /=, %=, ++, --
할당 연산자(Assignment Operator)
할당 연산자는 변수에 값을 대입할 때 사용되며, 대입 연산자로도 불립니다. 수학에서 =
기호는 "같음"을 의미하지만, C#에서는 오른쪽의 값 또는 식의 결과를 왼쪽 변수에 저장하는 역할을 합니다.
할당 연산자의 종류
C#에서 사용되는 주요 할당 연산자는 다음과 같습니다.
=, +=, -=, *=, /=, %=
할당 연산자의 사용 예
연산자 | 예시 | 설명 |
---|---|---|
= |
A = B |
변수 A 에 변수 B 의 값을 대입합니다. |
+= |
A += B |
A = A + B 와 동일하며, A 에 B 를 더한 값을 다시 A 에 저장합니다. |
-= |
A -= B |
A = A - B 와 동일하며, A 에서 B 를 뺀 값을 다시 A 에 저장합니다. |
이러한 연산자는 코드를 간결하게 작성할 수 있도록 도와줍니다.
할당 연산자 사용하기
지금까지 우리가 사용해 온 변수 선언 후 초기화할 때 사용한 =
연산자가 바로 데이터를 할당하는 할당 연산자입니다.
코드: AssignmentOperator.cs
> //[?] 할당(대입) 연산자: 변수에 특정 값으로 초기화하면 자동 유추에 의해서 형식이 결정됨
> var name = "C#"; // name 변수에 문자열을 대입합니다.
> var version = 13.0; // version 변수에 숫자를 대입합니다.
> $"{name} {version}"
"C# 13"
대입되는 값에 따라서 자동으로 유추되어 name
변수는 string
형식으로, version
변수는 double
형식으로 변수가 선언됩니다.
변숫값 서로 바꾸기
프로그래밍을 하다보면 변수의 값을 서로 변경할 필요가 있을 수 있습니다. 이러한 경우에는 일반적으로 임시 변수를 하나 더 두고 이곳에 먼저 나온 데이터를 임시 보관하는 식으로 데이터를 바꿀 수 있습니다. 다음 코드를 살펴보세요. 소스는 SwapDemo.cs 파일에서 볼 수 있습니다.
(1) i
와 j
에 각각 100과 200을 넣고 출력해 봅니다.
> var i = 100;
> var j = 200;
> $"처음: {i}, {j}"
"처음: 100, 200"
(2) i
와 j
의 값을 변경하려면 임시 변수인 temp
를 두고 i
의 값을 저장합니다. 그런 다음 i
에 j
를 대입 후 마지막으로 j
에 temp
를 대입합니다. 이런 과정을 거치면 두 변수의 데이터가 변경됩니다.
> var temp = i; //[A] 임시 변수에 i 값 담기
> i = j; //[B] i 값에 j 값으로 덮어쓰기
> j = temp; //[C] j에 i 값이 담겨 있던 temp값으로 덮어쓰기
> $"변경: {i}, {j}"
"변경: 200, 100"
변수의 값을 1 증가시키기
이번에는 변수의 값을 1 증가시키는 코드를 만들어보겠습니다.
코드: IncrementNumber.cs
> //[?] 정수형 변수의 값을 1씩 증가
> int num = 10;
> num = num + 1; // 1 증가
> num
11
변수의 값을 1 감소시키기
이번에는 변수의 값 감소 기능을 사용해보겠습니다.
코드: DecrementNumber.cs
> //[?] 정수형 변수의 값을 1씩 감소
> int num = 10;
> num = num - 1; // 1 감소
> num
9
대입 연산자 축약형 사용하기
대입 연산자는 +=
형태로 축약형으로 사용할 수 있습니다. 이와 같은 축약 표현을 복합 할당 연산자라고 합니다.
이번에는 x = x + 2;
형태를 x += 2;
형태로 축약해서 사용할 수 있는 숏컷 연산자인 +=
연산자를 사용해보겠습니다.
코드: ShortcutOperator.cs
> int x = 3;
> int y = 3;
>
> x = x + 2; // 기본형
> y += 2; // 축약형
>
> $"x: {x}, y: {y}"
"x: 5, y: 5"
기본형과 축약형은 모두 동일하게 x
변수와 y
변수에 2를 더해서 저장하는 기능을 합니다.
+=
과 -=
연산자 사용하기
A += B
와 같은 연산은 단지 A = A + B
와 같은 구문을 줄여서 사용하는 목적이 큽니다. 이처럼 C#에서는 개발자가 최소한의 입력으로 동일한 효과를 보여줄 수 있는 풍부한 연산자를 제공합니다.
이번에는 +=
연산자와 -=
연산자를 사용해보겠습니다.
코드: ShortcutOperatorDemo.cs
> int a = 3;
> int b = 5;
>
> b += a; // 누적: b변수에 a변수의 값을 누적
> b
8
>
> b -= a; // 가감: b에서 a를 뺀 후 다시 b에 할당
> b
5
할당 연산자 중에는 +=
연산자 말고도 -=
, *=
, /=
, %=
등을 제공합니다.
증가, 감소 연산자 사용하기
변수의 값을 1 증가시키거나 1 감소시키는 연산자가 있습니다. 증가 또는 감소 연산자라고 하여 줄여서 증감 연산자(Increment/Decrement Operator)라고도 합니다. ++
연산자는 증가 연산자이고 --
연산자는 감소 연산자입니다. 증감 연산자는 정수형 변수의 값을 1 증가 또는 1감 소하는 기능을 하는 단항(Unary) 연산자이며, 증감 연산자가 변수 앞에 위치하느냐 뒤에 위치하느냐에 따라 연산 처리 우선순위가 결정됩니다.
증감 연산자의 종류는 다음과 같습니다.
연산자 | 설명 |
---|---|
++(증가 연산자) | 변수 값에서 1을 더합니다. |
--(감소 연산자) | 변수 값에서 1을 뺍니다. |
증감 연산자 중 증가 연산자 사용하기
증가 연산자는 하나의 변수의 값을 1씩 증가시키는 연산자로 알려져 있으며, 반대로 변수의 값을 1씩 감소시키는 연산자를 감소 연산자라고 합니다. 이 두 연산자를 합쳐 일반적으로 증감 연산자라고 부릅니다.
이번 섹션에서는 증가 연산자의 사용 방법에 대해 알아보겠습니다.
코드: IncrementOperator.cs
> //[?] 증가 연산자: 정수 자료형 변수의 값을 1 증가
> int num = 100;
> ++num; // 1 증가
> num
101
증감 연산자 중 감소 연산자 사용하기
이번에는 감소 연산자를 사용해보겠습니다.
코드: DecrementOperator.cs
> //[?] 감소 연산자: 정수 자료형 변수의 값을 1 감소
> int num = -100;
> --num; // 1 감소
> num
-101
전위 증감 연산자와 후위 증감 연산자
증감 연산자의 위치에 따라 연산 처리 우선순위가 달라집니다. 변수 앞에 있을 경우, 먼저 변수 값을 증가시킨 후 해당 값을 사용합니다. 반면 변수 뒤에 있을 경우, 먼저 해당 값을 사용하고 나서 변수 값을 증가시킵니다.
표: 전위 증감 연산자와 후위 증감 연산자
구 분 | 설 명 | 사용 예 |
---|---|---|
전위(Prefix) 증감 연산자 | 정수형 변수의 앞에 연산자가 위치하여 변수 값을 미리 증감 후 다른 연산을 수행합니다. | ++a; --b; |
후위(Postfix) 증감 연산자 | 정수형 변수의 뒤에 연산자가 위치하여 연산식(대입)을 먼저 실행 후 나중에 변수의 값을 증감합니다. | a++; b--; |
전위 증감 연산자 사용하기
전위 증감 연산자를 사용해 보겠습니다. 앞에 붙는 증감 연산자는 해당 라인에서 실행 우선순위가 가장 높습니다.
코드: PrefixOperator.cs
> // 전위(Prefix) 증감 연산자: 우선순위가 높음
> int i = 3;
> int j = ++i;
> j
4
++i
형태로 앞에 붙는 경우에는 i
의 값을 우선적으로 1증가 시켜줍니다. 위 예제에서는 i
의 값이 3에서 4로 증가된 후 이 값이 j
에 할당되어 j
의 값이 4가 됩니다.
후위 증감 연산자 사용하기
후위 증감 연산자는 해당 라인에서 대입 연산자보다 우선순위가 낮습니다.
코드: PostfixOperator.cs
> // 후위(Postfix) 증감 연산자: 우선순위가 낮음
> int x = 3;
> int y = x++;
> y
3
> x
4
x++
형태로 뒤에 증가 연산자가 붙어서 x
의 값이 3이 먼저 y
에 할당된 후 증가가 되기에 y
변수에는 3이 대입된 상태가 됩니다.
즉, 다음 3개의 구문은 모두 동일한 기능을 합니다.
a = a + 1; a += 1; ++a;
장 요약
이번 강의는 할당 연산자인 =
, +=
, -=
, *=
, /=
, %=
과 증가 또는 감소 연산자인 ++
와 --
를 다루어 보았습니다. 계속해서 비교 연산자와 논리 연산자를 알아보겠습니다.
1.1 퀴즈
(1) 다음 중 number = number + 3;
과 의미가 같은 표현을 고르세요.
a. number = 3;
b. number += 3;
c. number =+ 3;
d. number = ++3;
정답: b
number += 3;
은number = number + 3;
을 축약한 표현입니다.
(2) 변수 number
의 값을 1 증가시키는 올바르지 않은 코드를 고르세요.
a. number++;
b. number += 1;
c. ++number;
d. number + 1;
정답: d
number + 1;
은 단순한 연산일 뿐, 증가된 값을 변수에 저장하지 않으므로number
의 값은 변하지 않습니다.
(3) 다음 코드 실행 후, 변수 y
의 값은 얼마인가요?
Int32 x = 3;
Int32 y;
y = x++;
정답: 3
증가 연산자(
++
)가 후위(postfix) 위치에 있으므로x
의 원래 값을 먼저y
에 할당한 후 증가합니다.
y = 3
- 이후
x
는4
가 됨
(4) 다음 코드 실행 후, 변수 y
의 값은 얼마인가요?
int x = 3;
int y;
y = --x;
정답: 2
감소 연산자(
--
)가 전위(prefix) 위치에 있으므로x
를 먼저 감소한 후,y
에 할당합니다.
x
가2
로 감소y = 2
1.2 연습문제: 증가, 감소 연산자 사용하기
다음 소스 코드를 완성하여 3과 6이 각 줄에 출력되도록 하세요.
코드
// 연습문제: 증가, 감소 연산자 사용하기
using System;
class IncrementDecrementPractice
{
static void Main()
{
int number1 = 3; //[1]
int number2 = 5; //[2]
int result1 = 0;
int result2 = 0;
number1--;
result1 = ++number1;
++number2;
result2 = number2--;
Console.WriteLine(result1); // 3
Console.WriteLine(result2); // 6
}
}
실행 결과
3
6
정답
[1] 3
[2] 5
해설
결과값을 기준으로 코드를 역순으로 분석하면 다음과 같습니다.
result1 = ++number1;
에서result1 = 3
이므로,number1
은 2에서 증가한 값입니다.number1--;
실행 전에number1 = 3
이어야 합니다.
result2 = number2--;
에서result2 = 6
이므로,number2
는 감소하기 전6
이어야 합니다.++number2;
실행 후number2 = 6
이 되어야 하므로, 원래 값은5
입니다.