사용자 입력, 연산자

이정현
∙∙조회 2

20260928 사용자 입력, 연산자

사용자 입력

  • Console.ReadLin()은 문자열을 반환하기 때문에 이를 상황에 따라 다른 데이터 형으로 바꿔야 할 필요가 있다. 이때 사용하는 것이 데이터형.Parse() 혹은 Convert.데이터형() 가 있다.

int.Parse와 Convert.ToInt32 의 차이

항목int.ParseConvert.ToInt32
받는 것문자열만거의 모든 타입
값이 없을 때오류0을 반환
실수 문자열 "3.7"을 정수로오류오류
실수 값 3.7을 정수로직접 받을 수 있음반올림 하여 4 반환

TryParse

Parse의 경우 매개변수를 받은 후 형변환을 시도 했을 때 변경수 없는 문자열을 받으면 프로그램을 멈춘다. TryParse를 사용하면 변환을 시도하고 성공 여부를 bool로 알려주며 실패해도 프로그램이 멈추지 않는다.

out 멤버변수(출력용 매개변수)

TryParse에서도 사용하는데 성공 여부를 확인 하는 것은 별개로 결과를 받을 변수 옆에 적는다.

csharp
//예시
int output = 0;
string data = "123";
// 변환 성공여부를 result에 저장하고 변환에 대한 결과값을 output에 저장한다.
bool result = int.TryParse(data, out output);

Console.Read와 Console.ReadLine 차이점(버퍼 개념 - 입력버퍼)

  • 입력버퍼에 데이터 보유 여부에 따라 사용자 입력을 기다리기도 하고 기다리지 않기도 한다.
  • ReadLine은 입력버퍼를 모두 읽어오지만 Read는 실행할 때 마다 입력버퍼에서 한글자씩 가져온다.

GetType

값이 어떤 타입인지 확인 할 수 있다. 타입의 이름은 .NET 이름으로 나온다.

csharp
//예시
int number = 10;
Console.WriteLine($"10      → {number.GetType()}");
// 10      → System.Int32 이런식으로 출력된다.

연산자 설명

  • 용어정리
    • 연산자: 연산을 지시하는 기호
    • 피연산자: 연산의 대상이 되는 값(리터럴, 변수 다 가능하다)
    • 식: 계산해서 하나의 값이 되는 코드 단위. 리터럴 혹은 변수 하나만 있어도 식이다.
    • 식과 문에 대한 설명(식 설명할 때 같이 나옴)

피연산자에 따라 나눈 갈래

갈래피연산자예
단항연산자1개-x, !flag, x++
이항연산자2개a + b, a > b, a && b
삼항연산자(조건연산자)3개조건 ? 값1 : 값2

산술연산자

연산자의미예결과
+덧셈7 + 310
-뺄셈7 - 34
*곱셈7 * 321
/나눗셈의 목7 / 32
%나눗셈의 나머지7 % 31
  • 정수를 나눌경우 소수점이 버려지므로 정수를 나누어 %를 표현하고 싶다면 1 / 2 * 100가 아니라 1 * 100 / 2로 * 100의 순서를 앞으로 옮겨서 작성할것.
  • 정수를 0으로 나누면 프로그램이 오류를 내면서 멈춤. 실수를 0으로 나눌경우 무한대나 NaN이 나올 수 있으며 decimal의 나눗셈은 예외가 발생한다.
  • 몫과 나머지로 자릿수 분해를 할 수 있다.
csharp
using System;

int number = 3749;

int thousands = number / 1000;        // 3749 ÷ 1000 의 몫
int hundreds = number / 100 % 10;     // 백의 자리
int tens = number / 10 % 10;          // 십의 자리
int ones = number % 10;               // 일의 자리

Console.WriteLine($"{number} 의 각 자리");
Console.WriteLine($"천: {thousands}");
Console.WriteLine($"백: {hundreds}");
Console.WriteLine($"십: {tens}");
Console.WriteLine($"일: {ones}");
Console.WriteLine($"자릿수 합: {thousands + hundreds + tens + ones}");

  • 나머지로 값을 일정 범위 안에 가둘 수 있다.
csharp
using System;

int step = 0;

Console.WriteLine($"0 % 4 = {0 % 4}");
Console.WriteLine($"1 % 4 = {1 % 4}");
Console.WriteLine($"2 % 4 = {2 % 4}");
Console.WriteLine($"3 % 4 = {3 % 4}");
Console.WriteLine($"4 % 4 = {4 % 4}");
Console.WriteLine($"5 % 4 = {5 % 4}");

step = 11;
Console.WriteLine($"11 을 4로 나눈 나머지: {step % 4}");

  • 피연산자가 숫자인지 문자열인지가 결과를 가름
Mermaid
렌더링 중...

할당 연산자

= 이 표시는 수학의 등호가 아니라 오른쪽에 있는 값을 왼쪽의 변수에 넣는다는 뜻이다. 순서는 오른쪽을 먼저, 그 다음 왼쪽 순으로 이어진다.

Mermaid
렌더링 중...

복합 연산자

count = count + 1처럼 자기 자신을 계산해 다시 할당하는 형태는 자주 필요하다. 이것을 짧게 쓸 수 있는 연산자가 복합 할당 연산자이다.

복합 할당같은 뜻
x += yx = x + y
x -= yx = x - y
x *= yx = x * y
x /= yx = x / y
x %= yx = x % y
물론 복합 할당과 연산 후 할당이 완전이 같지는 않다. 복합 할당은 형 변환을 같이 진행하기 때문에 계산 결과를 왼쪽 변수의 타입으로 되돌리는 변환을 자동으로 진행한다.
csharp
using System;

byte level = 250;

level += 5;   // 실제로는 level = (byte)(level + 5)
Console.WriteLine(level);

// level = level + 5;   // 컴파일 오류: 계산 결과가 int 라서 byte 에 못 들어감

  • 주의사항 : 오른쪽 값이 왼쪽 타입으로 변환 될 수 있는 경우에만 가능하다. 이 경우는 명시적으로 변환을 해야 한다.

증감 연산자

++와 -- 값을 정확히 1만 늘리거나 줄일 때 사용한다.(char에도 사용할 수 있다. 사용시 코드값이 1 늘어나거나 줄어든다.)

  • 전위와 후위 : 증감연산자는 변수의 앞에도, 뒤에도 붙일 수 있음. 앞에 붙이는 것을 전위, 뒤에 붙이는 것을 후위 라고 함. 이 둘의 차이는 반환하는 값이 다름.

    표기이름식의 값
    ++x전위1 늘린 뒤의 값
    x++전위1 늘리기 전의 값
Mermaid
렌더링 중...
csharp
//전위 예시
int i = 3;
int j = ++i; // i를 4로 만든 뒤, 4를 j에 넣음

//후위 예시
int k = 3;
int l = ++k; // 현재 값 3을 남겨 두고 x를 4로 만든 뒤, 남겨 둔 3을 y에 넣음

예시의 두 경우 모두 i, k변수 모두 값은 4가 됨. 다른것은 다른변수(j, l)에 들어간 값임. 증감식을 하면서 값을 사용하는 일이 없으면 전위, 후위 결과가 동일함.

관계 연산자

두 값의 관계를 따져 참인지 거짓인지를 알려주는 연산자임. 결과는 언제나 bool타입임.

연산자의미예결과
==같음3 == 3true
!=다름3 != 5true
>큼5 > 3true
>=크거나 같음5 >= 5true
<작음3 < 5true
<=작거나 같음3 <= 3true
  • 문자열 비교: 문자열도 ==, !=로 비교할 수 있다. 글자 하나하나 같은지를 확인하며 대소문자는 다른 글자로 취급함.
  • 실수 비교: 실수는 ==로 비교하면 예상과 다른 결과가 나올 수 있다. 실수는 근사치로 담기 때문이다.
    • 실수비교는 두 값의 차이가 일정 이하로 나는지를 확인하는 식으로 진행한다. (0.3 - (0.1 + 0.2) < 0.01) 이런식으로..

논리 연산자

세가지 논리 연산자가 있다. bool값을 조합해 새로운 bool값을 만드는 연산자인다.

연산자이름참이 되는 조건
&&AND양쪽이 모두 참
``
!NOT피연산자가 거짓, 피연산자가 1개인 단항연산자

단락 평가(뒤쪽 식이 누락되는 상황)

&&와 ||는 결과가 정해지면 남은 조건을 계산하지 않음. 이것을 단락 평가라고 함.

연산자왼쪽이오른쪽은
&&false계산하지 않음(결과는 이미 false)
||true계산하지 않음(결과는 이미 true)
Mermaid
렌더링 중...

단락평가는 오른쪽 조건 계산이 위험할 때 왼쪽에서 걸러 내는 데 씀. 위험한 조건을 오른쪽에, 그것을 막는 조건을 왼쪽에 둠으로써 왼쪽 조건을 통과하지 못하면 오른쪽 조건계산을 실행하지 못하게 하는 것. 예시로 count가 0이면 count로 나누는 조건을 계산할 때 문제가 발생하므로 다음과 같이 왼쪽에 조건을 추가하는 식.count > 0 && total / count > 3

조건 연산자

조건 연산자? : 는 조건을 보고 두 값 중 하나를 골라 반환하는 연산자임. 피연산자가 3개라서 삼항 연산자라고도 부름. 조건 ? 조건이 참일 때의 값 : 조건이 거짓일 때의 값

Mermaid
렌더링 중...
  • 주의사항
    1. 문자열 보간에서 사용시 괄호로 감싸야함. 감싸지 않으면 : 뒤가 서식지정으로 해석되어 컴파일 오류가 발생함
    2. ?뒤와 :뒤의 값은 같은 타입이거나, 한쪽이 다른 쪽으로 변환될 수 있어야 함.
    3. 조건 연산자는 값을 고르는 것만 함. 실행할 문장을 고를 수는 없음
    • 예시: hp > 0 ? Console.WriteLine("생존") : Console.WriteLine("사망");이 경우 컴파이 오류

연산자 우선순위

한 식에 연산자가 여럿이면 우선순위가 높은 것부터 계산한다.

우선 순위연산자갈래
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)

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