0️⃣ 우선 C#이란
C#은 Microsoft 사에서 개발한 객체지향형 프로그래밍 언어로 Windows 애플리케이션 및 웹 애플리케이션 개발에 사용된다.
비슷한 언어로는 Java, C++, 그리고 Dart가 있다! Dart 90%에 Kotlin 10% 조금 섞은 게 C#이라고 하니 아마 내가 새로 배우기에도 크게 어렵지 않을 거라 생각한다. 두근두근 신나는 마음으로 C# 공부를 시작해보자. (사실 C#보다 유니티라는 툴 자체에 익숙해지는 게 더 어려울 것 같다.) Dart를 기준으로 설명할 것이기 때문에 왕초보가 보기엔 바로 이해하기에 어려울 수 있다는 점 미리 고지한다.
~ C#으로 만드는 프로그램 ~
- 윈도우 프로그램: 윈도우에서 돌아가는 건 다 만듦
- ex) Visual Studio, 주식 매매 프로그램 등
- 유니티 콘텐츠: 2D, 3D, AR, VR 등 유니티 엔진을 사용하여 만든 콘텐츠
- ex) 어몽어스, 포켓몬 GO, 할로우나이트 등
- 웹앱: 웹 프레임 워크, 앱 프레임 워크
- ex) Microsoft 공식 사이트, Stack Overflow
- ex) Xamarin 등 크로스 플랫폼 언어
C#으로 생각보다 훨씬 많은 프로그램을 구현할 수 있다는 걸 알 수 있다. 물론 나의 목적은 유니티를 배우기 위함이지만! C#을 배워두면 이래저래 할 수 있는 게 많다고 하니 관심 있는 개발자라면 한 번 쯤 배워보는 것도 좋을 것 같다.
1️⃣ 타입 추론과 상수 선언 명령어
데이터 타입을 보기 전에 우선 상수를 선언하는 명령어에 대해 알아보자.
| 분류 | Dart / Kotlin | C# | 특징 |
| 타입 추론 | var | var | Dart와 Kotlin은 var 사용을 지양하지만, C#은 적극 권장되는 편 |
| 컴파일 상수 | const | const | 컴파일 시점에 값이 확정 (완전 불변) |
| 런타임 상수 | final / val | readonly | 실행 중에 값이 할당되지만, 이후 수정 불가 |
const와 final에 대해서 공부해둔 글이 있다! 매우 상세하게 해뒀으니까 한 번 읽어보면 큰 도움이 된다.
Dart의 final과 const의 차이, 네트워크 관점에서 바라보기
0️⃣ Prefer const with constant constructors Flutter 개발을 하다 보면 IDE에서 정말 지겹게 보는 경고문이 있다. 사실 이제는 자주 안 보지만, 어쩌다 한 번씩 까먹게 되면 파란 밑줄이 생기면서 아래와 같
kkevido.tistory.com
C#도 Dart/Kotlin처럼 컴파일 상수, 런타임 상수가 명확히 나뉘어져 있는데 큰 차이점이라고 한다면 var 사용을 지양하지 않는다는 점이다. 특히 긴 클래스를 생성할 때 자주 사용하는 편인데 이 부분에 대해서는 다음에 List와 Array의 차이점에 대해 공부할 때 기재해보겠다.
2️⃣ 데이터 타입
프로그래밍을 하려면 데이터 타입부터 알아야 한다. 앞서 말했듯이 모든 데이터 타입은 Dart(그리고 약간의 Kotlin)를 기준으로 설명하겠다. 실제로 내가 기재한 데이터 타입보다 많은 타입이 있지만 주로 사용하거나 알고리즘을 할 때 꼭 알아야하는 데이터 타입 위주다.
int number = 1;
long longNumber = 10000000000L;
// 일반적으로는 int를 많이 사용함.
1. 정수형 (Integer)
- int
- 32비트의 정수형 숫자 (-21억 ~ +21억)
- Dart의 int는 플랫폼마다 다르지만 64비트임
- long
- 64비트의 정수형 숫자
- 숫자 뒤에 L을 붙여 long 타입인 것을 명시
- Dart에서는 long이 없고, Kotlin의 long과 같음
- byte
- 8비트의 숫자 (0~255)
- 메모리를 아끼기 위한 숫자 타입으로 RGB 색상 값을 다루거나 네트워크 전송용으로 많이 사용
double doubleNumber = 1.0;
float floatNumber = 1.0f;
Console.WriteLine(a); // 0.3333333 (7자리에서 끝남)
Console.WriteLine(b); // 0.333333333333333 (15자리까지 나옴)
// 보통 실무에서는 float을 더 많이 씀.
2. 실수형 (Floating-point)
- double
- 64비트의 실수형 숫자
- Dart의 double과 동일
- float
- 32비트의 실수형 숫자
- 숫자 뒤에 f를 붙여 float 타입인 것을 명시
- Dart에서는 float이 없고, Kotlin의 float과 같음
- decimal
- 금융권 계산용이라고 함
char text = 'K';
string text2 = "kkevi";
string message = $"Hello {text2}";
3. 문자형과 문자열 (Character & String)
- char
- 작은 따옴표를 써서 딱 한 글자만 들어가는 글자 (유니코드)
- Dart에서는 char가 없고, Kotlin의 char와 같음
- string
- 큰 따옴표를 써서 들어가는 일반적인 글자
- Dart나 Koltin과 다르게 소문자 s로 시작하는 string으로 써야 함.
- 문자열을 변수로 집어넣을 땐 $ 표시가 큰 따옴표 바깥으로 나와있고 중괄호를 생략할 수 없음.
- string은 char의 배열로 이해하면 쉽다.
자세한 설명은 예전에 내가 따로 Kotlin을 공부하며 익혀뒀던 Char와 String의 차이를 적어둔 글을 보자. 좀 어렵긴 한데 큰 맥락은 통한다.
2024.05.09 - [Kotlin] - Kotlin 문법 : Char와 String (with. 프로그래머스)
Kotlin 문법 : Char와 String (with. 프로그래머스)
❓ 자연수 뒤집어 배열로 만들기자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 💡 풀이class Solution { fun solution(n: Lon
kkevido.tistory.com
bool isNext = false;
bool isPrev = true;
4. 불리언 (Boolean)
- bool
- true, false 값을 나누는 데이터 타입
- Dart와 Kotlin의 bool과 100% 똑같음
3️⃣ Dart 코드와 직접 비교해보기!
그렇다면 이제 Dart 코드와 어떤 점이 유사하고 어떤 점이 다른지 한 번 비교해보자.
// Dart 코드
class Player extends Character {
String name = "Kkevi";
Future<void> jump() async {
print("점프 준비!");
await Future.delayed(Duration(seconds: 1));
print("점프!");
}
}
// C# 코드
class Player : Character {
string name = "Kkevi";
async Task Jump() {
Console.WriteLine("점프 준비!");
await Task.Delay(1000);
Console.WriteLine("점프!");
}
}
- Class를 상속 받을 때 extends 대신 : 을 사용
- String 대신 string을 사용
- 비동기 함수는 Future 대신 Task로 시작
- 함수 이름은 대문자로 시작함
❗ 출처
참고 사이트1 : https://velog.io/@yoneeki1177/C-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95
