본문 바로가기

C#

C# 기초 (변수, 예약어, 연산자, 반복문, 조건문등)

반응형

C# 문법 기초

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
1. 기본 자료형 (Primitive data type)
int , longshortbytefloatdoublecharbool 등
기존 java와 크게 다르지 않은 타입들로 이루어졌다.
- 메모리 낭비를 하지 않기 위함도 있고, decimal 처럼 크고 오차가 허용되지 않는 명확한 수가 필요할 수 있음
 
int n = 5;
char c = 'c';
String str = "hello";
float f = 5.2f;
double d = 10.55;
bool b = false;
 
* 이스케이프 시퀀스
' \ (역슬래시)로 시작하는 특수문자 표현.'
\t : TAB 문자표현
\n : 개행 문자표현
 
string txt = "\tHello\nWorld";
Console.WriteLine(txt);
//결과
//        Hello
//World
 
string txt = @"\tHello\nWorld";
//결과
//\tHello\World
@ 를 앞에 붙이면 역슬래시를 이스케이프 시퀀스로 판단하지 않음.
 
(String 과 string 차이가 없음. C#의 예약어인 string 이 System.String 으로 변환해서 쓴다고 함)
 
2. 형변환
명시적 형변환, 암시적 형변환이 있음 (casting)
크기가 작은 자료형을 큰 자료형으로 바꿀때는 명시하지 않아도 자동으로 바꿈.
반대로 크기가 큰 자료형을 작은 자료형으로 바꿀때는 데이터손실이 발생하니까 굳이 바꾸려면 개발자가 명시해야함
ushort u = 65;
char c = (char)u;
Console.WriteLine(c); //출력 결과: A
 
byte b = 250;
short s = b;
Console.WriteLine(s); //출력 결과: 250
 
* 변수명 지정할 때, 숫자가 먼저 나올 수 없고 예약어는 변수명으로 사용 불가, 한글 변수도 되나 권장하지 않음.
특수문자는 _(언더스코어)문자만 시작 문자로 사용가능.
 
3. 변수 (메모리 스택,힙 / 값을 가리키는 변수,참조 형식을 가리키는 변수)
프로그램은 기본적으로 하나의 스레드를 가지고, 스레드마다 전용으로 사용할 수 있는 장소가 메모리에 할당됨.
그 영역이 스택(Stack)
프로그램에서 필요에 의해 메모리를 사용하겠다하면 사용할 수 있는 저장소가 힙(Heap)
메모리는 유한하기 때문에 사용한 후에 사용하지 않겠다고 메모리 해제를 해줘야 하는데
C#은 자바처럼 가비지컬렉션이 해제 처리해줌.
 
int n = 6;
여기서 n이라는 변수는 6이라는 값을 가리키기 때문에 스택영역에 직접 6이 들어간다.
* 값형식은 다 스택에 들어감 ex) byteintlongdoublebool 등 기본형타입
 
String txt = "hello";
여기서 txt라는 변수는 스택영역에, "hello" 라는 문자열리터럴은 힙영역에 생성된다.
* 참조형식은 리터럴이 힙영역에 할당되고 변수는 스택영역에 할당되어 그 힙영역 주소를 가지고 참조함.
+ 기본형 외에 배열, 클래스, object 등이 참조형식임
 
int n = 5;
int m = n;
이라고 했을 때는 n,m 각각 자기만의 메모리를 할당받고 5라는 값을 각각 가지고 있지만
string txt1 = "C#";
string txt2 = txt1;
이라고 했을 때는 힙영역에 "C#"이라는 리터럴을 만들어놓고 스택영역에 txt1, txt2가 같은 주소를 참조함. (*주의)
 
const 예약어로 상수를 정의할 수 있음
const int pi = 3.14;
pi = 1// 컴파일 에러 상수를 변경할 수 없음.
const int maxN = Math.Max(1,3);// 불가 컴파일러가 미리 그 값을 알아야 함.
 
4. 연산자
기본적인 연산자는 다른 프로그래밍 언어와 동일
+ - * / % ++ -- > < || && 등 생략.)
 
5. 배열
선언 int [] products = new int[5] {1,2,3,4,5};
int [] products = new int[] {1,2,3,4,5};
인덱스는 0부터 시작하는 것도 똑같고 다차원 배열 가능하고 가변배열도 가능.
가변배열 잘 사용 안함.
 
6. 조건문
if(조건식)
    구문;
int value = 5;
if(value <= 255){
    Console.WriteLine("byte 변환 가능");
}
else if(value <= 65535){
    Console.WriteLine("ushort 변환 가능");
}
else{
    Console.Write("int 타입");
}
switch문은 if문의 특수한 형태로 봐도 무방.
여러 조건을 판단할 때 조건식이 상수라면 switch문이 코드가 보기 좋을 때가 있음.
 
7. 반복문
forforeachwhiledo/while 제공.
for(int i=1;n<=9;n++){
    Console.WriteLine(n);
}
다른 프로그래밍 언어와 유사하기 때문에 설명은 생략.
int[] arr = new int[]{1,2,3,4,5};
foreach(int element in arr){
    Console.WriteLine(element);
}
// foreach문은 처음부터 끝까지 모든 요소를 순회하면서 반복할 때 사용.
// for문을 간략화 했다. 느낌.
 
while(조건식)
    구문;
* 조건식이 '참이면' 구문 실행 (나중에 헷갈릴 수도 있음)
int n =1;
int sum=0;
while(n<= 1000){
    if(n%2 == 0){
        sum += n;
    }
    n++;
}
// 1~1000까지 숫자중에서 짝수만 더하는 코드
do/while 도 다른 언어와 유사하기에 생략.
 
8. 점프문
continuegotobreakreturnthrow 가 있다.
continue; 는 반복문에서 즉각적으로 다음 순회차례(조건식)로 넘어가는 문장.
break; 는 반복문을 즉각적으로 탈출하는 역할
goto는 쓰지말것. 가독성이 떨어짐.
 
 
 


* 기본적으로 자바나 C,C++등 프로그래밍 언어를 접했다면 쉽게 이해할 수 있는 기초 내용

반응형