| 1. 출력문 정리 |
[C#_2]에서 했던 Console.WriteLine() 과 Console.Write() 를 상기해 보자면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!"); //줄바꿈 O
Console.Write("Hello"); //줄바꿈 X
}
}
}
였습니다.
줄바꿈의 차이였었죠.
이후 [C#_3]에서 했던 변수 형태의 출력을 사용해보면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
String str = "Hello World!";
Console.WriteLine(str);
}
}
}
의 형식으로 변수에 담아 출력하는 것 이었습니다.
| 2. 입력문 |
입력문은 두 가지로 나뉩니다.
Console.Read() 와 Console.ReadLine() 인데요. 출력문에서 모양의 차이가 있던 것처럼 여기도 같은 차이가 있는 것 같네요! 하지만 이 두 가지의 기능은 현저히 차이가 납니다.
Console.Read() 는 '문자'를 받는 입력문
Console.ReadLine()은 "문자열"을 받는 입력문
이라는 부분에서 차이가 나는데요.
우선 Console.Read()를 알아보겠습니다.
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.Write("정수를 입력해주세요 : ");
int user = Console.Read();
Console.WriteLine(user);
}
}
}
이 코드를 실행해보시면 제 설명과 다르게 무언가 어긋나 있는 것을 알 수 있습니다.

분명히 저희는 1을 입력받았고 출력 역시 1이 나와야 하는데 49라는 수가 나왔네요.
이는 '아스키 코드' 라는 것으로 컴퓨터가 자동 변환하는 것 때문인데요!
우리가 1이라고 명시한 수를 컴퓨터는 컴퓨터만의 언어인 49 라고 명시했기 때문입니다!
코드로 다시 보자면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.Write("정수를 입력해주세요 : ");
int user = Console.Read();
Console.WriteLine();
Console.Write("입력한 user의 아스키 코드 : ");
Console.WriteLine(user);
Console.Write("입력한 문자 출력 : ");
Console.WriteLine((char)user); //강제 형 변환
}
}
}

※ 1를 입력받고 컴퓨터가 아스키코드로 변환하는 것 까지 확인
이 후 강제 형변환을 통해 아스키코드 49를 문자로 변환시킨 코드와 결과
아스키 코드: https://terms.naver.com/entry.naver?docId=2270339&cid=51173&categoryId=51173
ASCII
초창기에는 다양한 방법으로 문자를 표현했는데, 호환 등 여러 문제가 발생했다. 이런 문제를 해결하기 위해 ANSI에서 ASCII(American Standard Code for Information Interchange)라는 표준 코드 체계를 제시했고
terms.naver.com
자 그럼 진짜 정수를 받고 싶다면 우리는 어떤 방식을 이용해야 할까요?
위 코드처럼 강제 형변환으로 일단 보이기는 원하는대로 보여주게 만들어도 컴퓨터가 사용하는 방식은
입력받기 ─> 아스키코드로 변환 ─> 강제형변환으로 인한 변환
이라서 우리가 원하는 '값'으로써의 역할을 하기 어렵습니다.
심지어 우리는 정수를 받거나 문자를 받을 때 한자릿수만 받는경우가 드물기도 하지요.
그래서 우리는 입력을 받을 때 문자열을 입력받는 Console.ReadLine() 을 사용할 것 입니다.
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.Write("정수를 입력해주세요 : ");
int user = int.Parse(Console.ReadLine());
Console.WriteLine();
Console.Write("내가 입력한 수 : ");//입력한 수가 그대로 나오는 것을 확인 할 수 있다.
Console.WriteLine(user);
}
}
}
위 코드에서 문자열을 입력받는 Console.ReadLine() 를 int.Parse를 사용하여
입력한 문자열을 정수로 바꾸어주는 것을 볼 수 있습니다.
(파싱에 관해서는 차후 다시 다룰 것 이기에 여기서는 넘어가도록 하겠습니다.)
| 3. 연산자 | 수식 연산자, 증감 연산자, 관계 연산자, 할당 연산자, 논리 연산자 등 |
| 3-1. 수식 연산자 |
수식 연산자에는 더하기, 빼기, 곱하기, 나누기, 나머지 를 구하는 식이 있습니다.
| 분류 | 기능 | 식 |
| + | 피연산자 끼리의 덧셈 | A + B |
| - | 왼쪽 피연산자에서 오른쪽 피연산자를 뺄셈 | A - B |
| * | 피연산자 끼리의 곱셈 | A * B |
| / | 왼쪽 피연산자를 오른쪽 피연산자로 나눗셈 | A / B |
| % | 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 나머지 | A % B |
위 표는 그 기능과 식을 정리한 것 입니다. 이를 코드로 보면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int A = 100;
int B = 10;
Console.WriteLine($"A + B : {A + B}"); //덧셈
Console.WriteLine($"A - B : {A - B}"); //뺄셈
Console.WriteLine($"A * B : {A * B}"); //곱셈
Console.WriteLine($"A / B : {A / B}"); //나눗셈
Console.WriteLine($"A % B : {A % B}"); //나머지
}
}
}
($은 문자열 보간으로 아래에서 설명하겠습니다.)
→결과

| 3-2. 증감연산자 |
증감연산자는 피연산자를 1만큼 증가시키는 증가연산자, 피연산자를 1만큼 감소시키는 감소연산자가 있습니다.
| 분류 | 기능 | 식 |
| 전위 증감 | 피연산자의 값을 1만큼 증가 | A++; |
| 피연산자의 값을 1만큼 감소 | A--; | |
| 후위 증감 | 피연산자의 값을 1만큼 증가 | ++A; |
| 피연산자의 값을 1만큼 감소 | --A; |
위 표를 코드로 보자면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a = 10;
a++;
Console.Write("전위 증가 :");
Console.WriteLine(a);
a--;
Console.Write("전위 감소 :");
Console.WriteLine(a);
--a;
Console.Write("후위 감소 :");
Console.WriteLine(a);
++a;
Console.Write("후위 증가 :");
Console.WriteLine(a);
}
}
}
이 코드의 결과는

언뜻 보면 다른게 없어보이지만 전위증감과 후위증감은 큰 차이가 있습니다.
전위증감은 우선 피연산자의 값을 증가시키거나 감소시킨 뒤 문장을 실행하고
후위증감은 문장을 먼저 실행하고 피연산자의 값을 증가시키거나 감소시킨다는 것입니다.
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a = 5;
int b = 5;
Console.WriteLine($"a - b : {a - b}");
Console.WriteLine($"--a - b: {--a - b}");
//문장 실행전에 1을 감소하고 문장을 실행시킴
a++;//a복구
Console.WriteLine();
Console.WriteLine($"a-- - b : {a-- - b}");//후위
//문장을 실행하고 1을 감소시킴
Console.WriteLine($"(a - b : {a - b}");
}
}
}

| 3-3. 관계 연산자 |
관계 연산자는 두 피연산자간의 관계를 나타내며 결과는 Boolean 값으로 도출해줍니다.
| 분류 | 기능 | 식 |
| < | 왼쪽 피연산자가 오른쪽 피연산자 보다 작으면 True 크면 False | A < B |
| > | 왼쪽 피연산자가 오른쪽 피연산자 보다 크면 True 작으면 False | A > B |
| == | 양쪽 피연산자가 서로 같으면 True 다르면 False | A == B |
| != | 양쪽 피연산자가 서로 다르면 True 같으면 False | A != B |
| >= | 왼쪽 피연산자가 오른쪽 피연산자와 같거나 크면 True 작으면 False | A >= B |
| <= | 왼쪽 피연산자가 오른쪽 피연산자와 같거나 작으면 True 크면 False | A <= B |
이를 코드로 활용해보면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a = 5, b = 10;
Console.WriteLine(a < b); // 5 < 10, True
Console.WriteLine(a > b); // 5 > 10, False
Console.WriteLine(a == b); // 5 == 10, False
Console.WriteLine(a != b); // 5 != 10, True
Console.WriteLine(a >= b); // 5 >= 10, False
Console.WriteLine(a <= b); // 5 <= 10, True
}
}
}

이렇게 boolean값을 확인할 수 있습니다.
| 3-4. 대입연산자 |
왼쪽 피연산자에 오른쪽 피연산자를 대입하는 연산자입니다.
우리가 기본적으로 알고있는 대입은 '=' 하나입니다. 변수에 값을 줄 때 사용하고있었는데요.
int a = 10;
대입연산자는 이처럼 대입해줄 때 대입과 동시에 연산을 진행하는 것을 말합니다.
| 분류 | 기능 | 식 |
| = | 오른쪽 피연산자를 왼쪽 피연산자에 할당 | A = B |
| += | 왼쪽 피연산자에 오른쪽 피연산자를 더하고 그 값을 왼쪽 피연산자에 할당 | A += B |
| -= | 왼쪽 피연산자에 오른쪽 피연산자를 빼고 그 값을 왼쪽 피연산자에 할당 | A -= B |
| *= | 왼쪽 피연산자에 오른쪽 피연산자를 곱하고 그 값을 왼쪽 피연산자에 할당 | A *= B |
| /= | 왼쪽 피연산자에 오른쪽 피연산자를 나누고 그 값을 왼쪽 피연산자에 할당 | A /= B |
| %= | 왼쪽 피연산자에 오른쪽 피연산자를 나눈 나머지를 구하고 그 값을 왼쪽 피연산자에 할당 |
A %= B |
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a = 10, b = 5;
a += b;
Console.WriteLine(a); // a = 10 + 5; 결과: 15
// (a) + (b)
a -= b;
Console.WriteLine(a); // a = 15 - 5; 결과: 10
// (a) - (b)
a *= b;
Console.WriteLine(a); // a = 10 * 5; 결과: 50
// (a) * (b)
a /= b;
Console.WriteLine(a); // a = 50 / 5; 결과: 10
// (a) / (b)
a %= b;
Console.WriteLine(a); // a = 10 % 5; 결과:0
// (a) % (b)
}
}
}

| 3-5. 논리 연산자 |
논리연산자는 위 관계연산자 처럼 그 값이 Boolean값으로 나옵니다.
종류는 3가지고 And 연산자 , Or연산자, Not 연산자 가 있습니다.
| And연산자 ( 논리곱 연산자 = && ) | ||
| A | B | A && B |
| 참(True) | 참(True) | 참(True) |
| 참(True) | 거짓(False) | 거짓(False) |
| 거짓(False) | 참(True) | 거짓(False) |
| 거짓(False) | 거짓(False) | 거짓(False) |
A와 B 모두 True 여야 결과가 True인 것을 알 수 있다.
| Or 연산자 ( 논리합 연산자 = || ) | ||
| A | B | A || B |
| 참(True) | 참(True) | 참(True) |
| 참(True) | 거짓(False) | 참(True) |
| 거짓(False) | 참(True) | 참(True) |
| 거짓(False) | 거짓(False) | 거짓(False) |
Or 연산자는 두 피연산자중 하나라도 True 라면 True이다.
| Not 연산자 ( 부정연산자 = ! ) | |
| A | !A |
| 참(True) | 거짓(False) |
| 거짓(False) | 참(True) |
Not 연산자는 피연산자가 True 라면 False를 도출하고
피연산자가 False라면 True를 도출한다.
위 표들을 코드로 보자면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a = 10, b = 5;
Console.WriteLine(a > 5 && b > 10); // True && False; 결과: False
Console.WriteLine(a >= 10 || b >= 10); // True || False; 결과: True
Console.WriteLine(!(a < b)); // !(False) 결과: True
}
}
}
로 모든 결과가 Boolean으로 도출된 것을 볼 수 있습니다.
| 3-6. 비트 연산자 |
비트연산자는 비트를 다루는데에 사용되는 연산자입니다.
논리연산자와 마찬가지로 3가지로 나뉘며 종류 역시 And 연산자, Or연산자, Not 연산자 로 같습니다.
| 비트연산자 ( & , | , ^ ) | ||
| 분류 | 기능 | 식 |
| & | 두 피연산자의 대응되는 비트에 논리곱(AND) 수행 | A & B |
| | | 두 피연산자에 대응되는 비트에 논리합(OR) 수행 | A | B |
| ^ | 두 피연산자와 대응되는 비트에 베타적 논리합(XOR) 수행 | A ^ B |
- & 연산자는 양쪽 비트가 모두 1이어야만 결과가 1이 되고, 그렇지 않으면 결과가 0이 됩니다.
- | 연산자는 양쪽 비트 중 하나라도 1이면 결과가 1이 됩니다.
- ^ 연산자는 양쪽 비트가 서로 달라야 결과가 1이 됩니다.
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a = 5, b = 10;
Console.WriteLine(a & b);
Console.WriteLine(a | b);
Console.WriteLine(a ^ b);
}
}
}
→ 결과

→이유!

사실 비트연산자는 이 이유를 알아야 왜 이 값이 나오는지 알게되는데
이 칸들을 좌측부터 128 64 32 16 8 4 2 1 의 8칸입니다. (2진수)
1로 표기되어있는 칸들의 수를 더하면 15라는 값이 나온것을 알 수 있습니다.
| 4. 문자열 보간 |
문자열 보간($) ?
문자열 보간이라는 것은 우리의 출력 코드가 평소
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string a = "one";
string b = "two";
Console.WriteLine("숫자 1은 영어로 {0}, 숫자 2는 영어로 {1}", a, b);
// 결과: 숫자 1은 영어로 one, 숫자 2는 영어로 two
}
}
}

이런식으로 작동 하고 있었다면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string a = "one";
string b = "two";
Console.WriteLine($"숫자 1은 영어로 {a}, 숫자 2는 영어로 {b}");
// 결과: 숫자 1은 영어로 one, 숫자 2는 영어로 two
}
}
}
Console.WriteLine 이후 ()의 내부 "" 의 외부에 $ 기호를 붙혀서 더욱 간편하게 사용할 수 있도록 하는 것 입니다.
- Console.WriteLine() 사용시 내부에 "" 를 넣는다
- -> Console.WriteLine(" ")
- 큰 따옴표 외부에 $를 넣는다.
- -> Console.WriteLine($" ")
- 내부에 적고싶은 문자들의 결합을 적는다.
- -> Console.WriteLine($" 숫자 1은 영어로 ")
- 변수를 적고싶다면 문자열 내부에 {} 로 경계를 만들어 넣어준다
- -> Console.WriteLine($" 숫자 1은 영어로 {a} ")
'C#' 카테고리의 다른 글
| [C#_6] 반복문(for,foreach,while,do while) (0) | 2021.09.24 |
|---|---|
| [C#_5] 조건문 (if, else, switch) (0) | 2021.09.23 |
| [C#_3] 변수, 자료형 (0) | 2021.09.12 |
| [C#_2] 콘솔 출력 (0) | 2021.09.07 |
| [C#_1] C# 설치 (0) | 2021.09.07 |