저는 컴퓨터공학을 전공해서 여러 프로그래밍 언어를 접해봤고, C#과 어느정도 유사한 C++을 주로 사용해왔습니다. 게다가C#도 사용해본 경험이 있습니다. 그래도 다시 한번 기초를 다지고 C# 문법에 더욱더 익숙해지고자 오늘은 C#의 기초 문법에 대해 공부해보겠습니다!
C++에서 콘솔창에 Hello, World!를 출력하려면 아래와 같이 작성한다.
Cout << "Hello, World!;
실행 결과)
Hello, World!
그러나 C#에서는 System namespace에 존재하는 Console 클래스의 Write() 함수 또는 WirteLine() 함수를 사용한다. Wirte() 와 WriteLine() 의 차이는 줄 바꿈 여부의 차이이다.
Console.WriteLine("Hello, World");
Console.Write("Hello, World");
실행 결과)
Hello, World!
Hello, World!
첫째 줄에 Console.WriteLine() 를 사용했기 때문에 줄 바꿈이 일어나 각자 다른 줄에 출력되는 것을 확인 할 수 있다. 물론 문자열뿐만 아니라 숫자와 연산값도 출력할 수 있다.
Console.WriteLine(1);
Console.WriteLine(2+3);
Console.Write(4*5);
실행 결과)
1
5
20
1. 숫자끼리의 타입 캐스팅은 형변환할 변수 앞에 괄호로 변수형을 명시해주면 된다.
ex) float -> int
int x = 10; float y = 10.0f; int z = x + (int)y;
2. 다른 자료형에서 string 타입으로의 형변환은 뒤에 .ToString()을 붙이면 된다.
ex) int -> string
int x = 10; string xStr = x.ToString(); // "10"ex) float -> string
int y = 10.5f; string yStr = y.ToString(); // "10.5"ex) float -> string
int myBool = true; string boolStr = myBool.ToString(); // "true"
3. 문자에서 다른 자료형으로 형변환할 때는 여러가지 방법이 존재한다.
<Convert 클래스 이용>
Convert 클래스를 통해 각각의 자료형으로 변환하는 방법이다.
ex) string -> int
string iStr = "10"; int x; x = Convert.ToInt32(iStr); // x : 10ex) string -> bool
string bStr = "true"; bool b; b = Convert.ToBoolean(bStr); // b : true
<Parse() 함수 사용>
ex) string -> int
string iStr = "10"; int x; x = int.Parse(iStr); // x : 10ex) string -> bool
string bStr = "true"; bool b; b = bool.Parse(bStr); // b : true
Convert와 Parse()를 이용한 형변환은 형변환할 수 없는 값을 형변환 하려고 할때 에러가 발생한다.
ex) string -> int
string iStr = "10xxxx"; int x; x = int.Parse(iStr); // x : ???? 에러 발생ex) string -> bool
string bStr = "testtset"; bool b; b = bool.Parse(bStr); // b : ???? 에러 발생
따라서 위와 같은 상황에 대처하기 위해 TryParse()라는 함수가 존재한다.
<TryParse() 함수 사용>
ex) string -> int
string iStr = "10"; int x; bool isSuccess; isSuccess = int.TryParse(iStr, out x); // isSuccess : trueex) string -> bool
string bStr = "testtset"; bool isSuccess; isSuccess = bool.TryParse(bStr, out b); // isSuccess : false
기존 방법과 다른 점은 반환값으로 캐스팅한 값이 아니라 bool 타입 값을 받아 형변환이 성공했는지 유무를 알려준다.
| 기호 | 사용법 | 설명 | 이름 |
|---|---|---|---|
| & | a&b | a와 b비트가 일치하는것을 계산 | And 연산자 |
| | | a|b | a와 b비트 중 하나만 일치해도 계산 | Or연산자 |
| ^ | a^b | a와 b비트가 다른것만 계산 | Xor 연산자 |
| << | a<<b | a의 비트를 왼쪽으로 b만큼 이동 | 시프트 연산자 |
| >> | a>>b | a의 비트를 오른쪽으로 b만큼 이동 | 시프트 연산자 |
비트연산은 복잡한 계산을 최적화할 때 사용합니다. 한가지 예를 들면 시프트 연산은 2의 거듭제곱수에 대한 곱셈과 나눗셈을 최적화할 때 사용할 수 있습니다.
x << n 은 x * 2^n과 동일x >> n은 x / 2^n과 동일자주 사용하지 않는 만큼 가끔 까먹는 문법이라서 다시 한번 되새기고자 한다.
<구성>
do { // 실행 내용 } while(조건);
do-while문의 가장 큰 특징은 조건과 상관없이 일단 실행 내용을 한번 실행한 후 이후 조건에 따라 반복하는 것이다.
int i = 999; do { Console.WriteLine(i); i++; } while(i <= 10);
실행 결과)
999
위와 같이 조건이 i가 10보다 작거나 같을 때 반복이고 i가 999로 초기화 되어 있어도, 일단 한번은 실행되기 때문에 999가 출력되는 것을 확인할 수 있다.
<선언과 생성>
string[] game = new string[3];
string[] game = {"lol", "maplestroy", "darksoul"};
위와 같이 선언하고 생성할 수 있다.
2번째 줄 같이 바로 초기화를 하면 데이터의 개수가 곧 배열의 크기가 된다.
C++과 같이 string game[3]; 같은 문법으로 선언 및 생성이 불가능 하니 주의하자!foreach문은 배열을 순회할 때 for문 대신 사용하는 문법이다.
<구성>
foreach(변수타입 반복변수 in 배열) { // 실행 내용 }
조건식을 쓰지 않고 해당 배열의 처음부터 끝까지 순회할 때 사용하는 방식이다.
string[] games = new string[3] {"lol", "maplestory", "darksoul"}; foreach(string game in games) { Console.WriteLine(game); }
실행 결과)
lol
maplestory
darksoul