오늘의 복습

공재원
∙∙조회 9

연산자와 식

  • 연산자는 연상을 지시하는 기호이고, 피연산자는 그 연산의 대상이 되는 값이다.
부분이름
+연산자
3, 5피연산자
3 + 5식
=연산자 (할당)

피연산자 개수로 나눈 갈래

  • 연산자는 피연산자를 몇 개 받는지로도 분류한다.
갈래피연산자예
단항 연산자1개-x, !flag, x++
이항 연산자2개a + b, a > b, a && b
조건 연산자3개조건 ? 값1 : 값2
  • 피연산자가 3개인 연산자는 C#에 하나뿐이라 삼항 연산자라고도 부른다.

산술 연산자

연산자의미예결과
+덧셈7 + 310
-뺄셈7 - 34
*곱셈7 * 321
/나눗셈의 몫7 / 32
%나눗셈의 나머지7 % 31

단항 부호 연산자

  • +와 -는 값 하나 앞에 붙여 부호를 나타내기도 한다.
csharp
using System;

int value = 8;

Console.WriteLine(+value);   // 그대로
Console.WriteLine(-value);   // 부호를 뒤집음
Console.WriteLine(-(-value));  // 두 번 뒤집으면 원래 값
diff
8
-8
8

⚠️ 단항

  • 는 변수의 값을 바꾸지 않음. -value는 뒤집은 새 값을 만들어 낼 뿐이고, value

자체는 그대로임. 변수를 바꾸려면 value = -value;처럼 다시 넣어야 함.

문자열 연결 연산자

  • +는 문자열도 이어 붙인다.
  • 문자열과 다른 타입을 이어 붙이게 되면 다른 쪽도 문자열로 바뀌어 이어 붙여진다.
Mermaid
렌더링 중...

할당 연산자

  • =는 "같다"가 아니다.
  • =는 수학의 등호가 아닌 오른쪽 값을 왼쪽 변수에 넣는다는 뜻이다.
  • 할당도 값을 만들어 낸다.

값 교환 (스왑)

  • 두 변수의 값을 서로 바꾸는 것을 스왑이라고 한다. 단 임시 변수가 하나 필요하다.

⚠️ 임시 변수 없이 i = j; j = i; 로 적으면 교환이 되지 않음. 첫 줄에서 i의 원래 값이 덮여 사라지므로 둘 다 같은 값이 됨.

복합 할당 연산자

  • count = count + 1처럼 자기 자신을 계산해 다시 넣는형태는 매우 자주 나온다. 이것을 짧게 쓰는 연산자가 복합 할당 연산자다.
복합 할당같은 뜻
x += yx = x + y
x -= yx = x - y
x *= yx = x * y
x /= yx = x / y
x %= yx = x % y

복합 할당은 형 변환을 품고 있다.

  • x += y가 x = x + y와 완전히 같지는 않다.
    복합 할당은 계산 결과를 왼쪽 변수의 타입으로 되돌리는 변환을 자동으로 넣어 준다.
    그래서 긴 표기로는 컴파일되지 않는 코드가 짧은 표기로는 컴파일된다.

작은 정수 타입에 복합 할당으로 값을 쌓을 때는 범위를 넘지 않는지 확인해야 함. 오류도 경고도 나지 않기 때문임.

한편 복합 할당이 아무 타입이나 받아 주는 것은 아님. 오른쪽 값이 왼쪽 타입으로 갈 수 있는 경우에만 성립함.

누적

  • 복합 할당의 대표적인 용도는 값을 쌓아 가는 것이다.

증감 연산자

  • ++ 와 -- 값을 정확히 1만 늘리거나 줄이는 일은 빈번해서 전용 연산자가 있다.

전위와 후위

  • 증감 연산자는 변수 앞, 뒤에 붙일 수 있다. 변수가 1 늘어난다는 점은 같지만, 그 식의 값이 다르다.
표기이름식의 값
++x전위1 늘린 뒤의 값
x++후위1 늘리기 전의 값

관계 연산자

  • 두 값의 관계를 따져서 참인지 거짓인지를 알려주는 연사자다. 결과는 언제나 bool로 나타난다.
연산자의미예
==같음3 == 3
!=다름3 != 5
>큼5 > 3
>=크거나 같음5 >= 5
<작음3 < 5
<=작거나 같음3 <= 5

결과는 값이므로 변수에 담을 수 있다.

= 와 == 를 혼동하지 않기

연쇄 비교는 할 수 없다.

수학에서 쓰는 0 < x < 10 같은 표기는 C#에서 쓸 수 없음.

0 < x가 먼저 계산돼 true가 되고, 그다음 true < 10을 계산하려 하는데 bool과 숫자는 크기를 비교할 수 없기 때문임. 두 조건을 논리 연산자로 묶어야 함.

문자열도 ==와 !=로 비교가 가능하다. 단 대소문자는 다른 글자로 취급한다.

실수는 ==로 비교하면 예상과 다른 결과가 나올 수 있다. 값이 정확히 담기지 않는 경우가 있기 때문이다.

논리 연산자

  • bool값을 조합해 새로운 bool값을 만드는 연산자다.
연산자이름참이 되는 조건
&&AND양쪽이 모두 참
||OR하나라도 참
!NOT피연산자가 거짓
  • &&로 이어 붙일수록 참이 되기 어려워진다.
  • ||로 이어 붙일수록 참이 되기 쉬워진다.
  • !는 관계 연산자로 바꿔 쓸 수 있는 경우가 많기 때문에 읽기 쉬운 쪽을 고르면 된다.
Mermaid
렌더링 중...

단락 평가로 위험한 계산을 막기

  • 단락 평가는 오른쪽 조건이 위험할 때 왼쪽에서 걸러 내는 데 쓰인다.

위험한 조건을 오른쪽에, 그것을 막는 조건을 왼쪽에 두는 것이 요령임.

조건 연산자

  • 조건 연산? :는 조건을 보고 두 값 중 하나를 고르는 연산자다.
    피연산자가 3개라서 삼항 연산자라고도 부른다.
Mermaid
렌더링 중...

문자열 보간 안에서 낱말 하나만 바꿔야 할 때 유용하다.

⚠️ 문자열 보간 안에서 조건 연산자를 쓸 때는 괄호로 감싸야 함. 감싸지 않으면 : 뒤가 서식 지정으로 해석되어 컴파일 오류가 남.

?뒤와 : 뒤의 값은 같은 타입이거나, 한쪽이 다른 쪽으로 변환이 가능해야 한다.

이어 붙이기

  • 조건 연산자의 값 자리에 다시 조건 연산자를 넣을 수 있다. 보통 여러 갈래를 표현 할 때 사용한다.

: 뒤에 다음 조건이 오는 구조임. 조건 연산자는 오른쪽에서 왼쪽으로 묶임.
앞쪽 조건이 먼저 검사되므로 범위가 좁은 조건을 앞에 두어야 함.

세 갈래를 넘기면 읽기 어려워 짐으로 조건 연산자의 이점이 사라진다.

✅ 조건 연산자는 두 갈래에서 값 하나를 고를 때 쓰는 것이 가장 알맞음. 갈래가 여럿이거나 각 갈래에서 여러 문장을 실행해야 하면 다른 문법이 더 맞음.

연산자 우선 순위

  • 한 식에서 연산자가 여럿이라면 우선순위가 높은 것부터 계산 한다.
순위연산자갈래
1()괄호
2x++ x--후위 증감
3++x --x +x -x !x (타입)x단항
4* / %곱셈류
5+ -덧셈류
6< > <= >=크기 비교
7== !=같음·다름
8& · |비단락 논리 (&가 |보다 높음)
9&&논리 AND
10||논리 OR
11? :조건
12= += -= *= /= %=할당

순위가 같으면 결합 방향이 순서를 정한다.

갈래방향예해석
산술·비교·논리왼쪽 → 오른쪽10 - 2 - 3(10 - 2) - 3
할당오른쪽 → 왼쪽x = y = 5x = (y = 5)
조건오른쪽 → 왼쪽a ? b : c ? d : ea ? b : (c ? d : e)

괄호로 넣으면 계산 순서가 코드에 그대로 드러나므로 우선순위를 따질 필요가 없어진다.

✅ 괄호는 실행 속도에 영향을 주지 않음. 계산 순서가 조금이라도 헷갈리면 괄호를 넣는 편이 항상 나음.