변수 선언
a를 변수, a에 저장된 값을 리터럴이라고 한다.
int a = 30, b = 40, c = 50; // int a, b, c; 도 가능하다.
a = b = c = 10;
데이터 형식
정수
- sbyte: 부호 있는 8bit 정수
- byte: 부호 없는 8bit 정수
- short: 부호 있는 16bit 정수
- ushort: 부호 없는 16bit 정수
- int: 부호 있는 32bit 정수
- uint: 부호 없는 32bit 정수
- long: 부호 있는 64bit 정수
- ulong: 부호 없는 64bit 정수
- char: 16bit 문자
주의) char과 string은 다르다!
char형은 문자로, 작은따옴표('')로 글자를 묶고, string형은 문자열로, 큰 따옴표("")로 글자를 묶는다.
부동소수점
- float: 4byte(7자리) ... 3.14f로 표현
- double: 8byte(15~16자리) ... 3.14로 표현
- decimal: 16byte(29자리) ... 3.14m으로 표현
오브젝트 (object)
object: 모든 데이터 형식을 담을 수 있음
모든 데이터 형식이 object 형식을 상속받았기 때문이다.
var 키워드
var를 사용하면 해당 변수의 타입을 추론하여 알아서 형식을 정해 준다.
var q = "name";
열거 형식
서로 중복되지 않는 값을 가진 상수 모음
enum DialogResult
{
YES = 10,
NO,
CANCEL,
CONFIRM,
OK
}
enum DialogResult
{
YES = 1,
NO = 2,
CANCEL = 3,
CONFIRM = 4,
OK = 5
}
// 위처럼 명시하지 않아도 아래처럼 자동으로 할당된다.
enum DialogResult
{
YES,
NO,
CANCEL,
CONFIRM,
OK
}
상수 (const)
값 재할당이 불가능한 상수, const 키워드를 통해 선언한다.
const int o = 1234;
o = 4321 // Error 발생
배열 (Array)
C#의 배열은 크기 지정이 필요하다.
int[] arr_sample = new int[5];
배열에 값 할당
Array[index] = 값;
배열의 길이
arr_sample.Length
리스트(List)
크기 지정이 필요 없는 배열 형태의 자료구조이다.
List<int> list = new List<int>();
list.Add(값);
리스트를 배열로 변환
arr_sample = list.ToArray(); // list를 array로
구조체
클래스와 비슷한 형식의 자료구조이다.
struct 구조체 이름 {
// 필드
// 메소드
}
튜플
간단한 형식의 순서가 없는 자료구조이다.
tuple = (123, 789); // 명명되지 않은 튜플
tuple - (Name: "박상현", Age: 17); // 명명된 튜플
데이터 형식 확인 (GetType())
int value = 10;
value.GetType().Name; // 속성의 이름 System.Int32 출력
value.GetType().ToString(); // 속성의 이름 System.Int32 출력
해당 형식의 기본값 확인 (default)
default(bool) // false 출력
default(int) // 0 출력
default(string) // null 출력
형 변환
숫자 -> 숫자는 가능하지만, 문자열 -> 숫자는 불가능하다.
sbyte m = 127;
int n = (int)m;
1) 정수 형식 사이의 변환: 크기가 큰 자료형의 변수를 작은 자료형에 담을 경우 오버플로우 발생 (128(int) => -128(sbyte))
2) 부동소수점 형식 사이의 변환: 정밀성의 손상 발생 (0.1(float) => 0.100001490116(double))
3) 부호있는 형식과 부호없는 형식의 변환: 언더플로우 발생 (-20(int) => 422967266(uint))
4) 부동소수점을 정수로 변환: 내림으로 됨 (0.9(float) => 0(int), 0.1(float) => 0(int))
연산자
1) 산술연산자: + - * / %
2) 증감연산자: ++ --
3) 관계연산자: < > <= >= == !=
4) 논리연산자: && || !
5) 삼항연산자: 조건 ? 참 : 거짓
6) 널 조건부 연산자(nullable): ?
7) 널 집합 연산자: ??
int? avg = null; // avg에 null 값을 허용
Console.WriteLine(avg?.ToString() ?? "없음");
// null 값을 허용하는 avg가 null이 아닐 경우, avg는 avg.ToString이고
// avg가 null일 경우, avg는 "없음"임
8) 비트연산자: << >> & | ^ ~
9) 할당연산자: = += -= *= /= %= &= |= ^= <<= >>=
입력과 출력
Console.ReadLine으로 입력받을 때
바로 숫자로 할당은 불가능하다. 무조건 string으로만 입력받을 수 있는 듯 하다.
Console.WriteLine으로 출력할 때
Console.WriteLine("{0} {1}", a, b);
Console.WriteLine($"{a} {b}");
Console.WriteLine(string.Format("{0} {1}", a, b));
위와 같이 다양한 방식으로 출력 가능하다.
String.Format() 함수
String.Format("{0,-10}DEF", "ABC"); //"ABC DEF"
String.Format("{0,10}DEF", "ABC"); //" ABCDEF"
string fmt = String.Format("{0,-20}{1,-15}{2,30");
WriteLine(fmt, "Publishr ...");
// ...
// Publisher Author Title
// Marvel Stan Lee Iron Man
// Hambit Sanghyn Park Programming
기타
- 숫자서식화: D, X, N, F, E 등
- 날짜: new DateTime(2012, 11, 3, 28, 18, 22);
'C# > 이것이 C#이다' 카테고리의 다른 글
6장. 확장메소드, this와 ref, out, params 등 키워드, string.Empty (0) | 2023.04.19 |
---|---|
5장. 값 형식과 참조 형식, 박싱과 언박싱 (0) | 2023.04.18 |
4장. 데이터의 흐름 제어: 분기문, 반복문 (0) | 2023.04.18 |
2장. C#의 클래스와 네임스페이스 (0) | 2023.04.18 |
1장. C# 자바 비교 및 차이점, Visual Studio 환경설정 (0) | 2023.04.18 |