Language/C#

C# 공부정리 - 기초문법 2 (변수, 조건문, 반복문)

Tarel 2022. 12. 31. 19:32

 

지역변수

선언 된 변수는 그 {} 안에서만 유효하다는 특징이 있다.

int a;
{
	int b;
	int a;		// 이건 애러!!
}
{
	int b;
}

b = 10;			// 이것도 애러

위 식을 보자

맨 처음 int a가 선언되었다.

그리고 괄호 안의 int a는 사용이 불가능 한데 이미 사용중인 이름이기 때문이다.

반면 아래 따로 격리된 괄호 안에서는 b를 사용할 수 있다.

 

그리고 괄호 밖에 벗어나있는 b는 애러라고 뜬다.

위의 두 int b는 어디까지나 그 괄호 안에서만 유효하기 때문에

가장 밖의 공간에서는 int b가 선언된 적이 없으므로 사용이 불가능 한 것이다.

 

다른 괄호 안에 있기 때문인데 이를 지역변수라고 한다.

 

분기문(branch)

if 문(조건문)

if문은 가장 중요하면서도 자주 사용하는 분기문이다.

C# 뿐만 아니라 다른 언어에서도 흔하며 어디서나 자주 쓰기 때문에 이건 꼭 알고 넘어갈 필요가 있다.

if (조건식) {
	실행문
}

형태는 위와 같다.

조건식이 true이면 실행문을 실행하고 false면 실행하지 않는다.

if (조건식){
	실행문
}else {
	실행문
}

비슷한 형태의 if ~ else 문이다.

만약 조건식이 false라면 else에 있는 실행문을 실행하는 것이다.

 

if (조건식){
	실행문 1
}else if (조건식){
	실행문 2
}else {
	실행문 3
}

또 비슷한 형태의 if ~ else if ~ else 문이다.

만약 첫번째 조건식이 false라면 그 아래 else if의 조건식을 본다.

그 조건식이 true라면 실행문 2를 실행하고

만약 false라면 실행문 3을 실행한다.

 

else if는 계속 줄줄이 달아줄 수 있다.

bool a = true;

if (a){
	Console.WriteLine("참이다.")
}else {
	Console.WriteLine("거짓이다.")
}

조건식 안에 a가 들어가 있는데, 이 a는 true다.

때문에 '참이다.'가  출력되고 '거짓이다.' 는 출력되지 않는다.

 

int a = 12;
int b = 8;

if (a > 10 && b < 10){
	Console.WriteLine("참이다.")
}else {
	Console.WriteLine("거짓이다.")
}

두번째 예시문이다.

if문의 조건문을 보면 a는 10보다 크기 때문에 참이다.

그리고 b는 10보다 작기 때문에 참이다.

그리고 이 두 개의 식이 둘 다 참이므로

if문의 조건식은 참이된다.

 

고로 '참이다.'가 출력된다.

 

switch문

체감상 그렇게 자주 쓰는것 같지는 않지만

만약 조건식이 여러개 있을 경우, switch문을 쓰기도 한다.

형태는 아래와 같다.

switch(조건식)
{
	case 조건:
	실행문 1
	break;
    
	case 조건:
	실행문 2
	break;

	case 조건:
	실행문 3
	break;
    
	....
}

보시다시피 case는 얼마든지 붙을 수 있고

case가 끝날 때는 반드시 break를 넣어줘야 한다.

 

예시를 만들어보자

int num = 10;

switch(num / 10)
{
	case 10:
	case 9:
		Console.WriteLine("잘했어")
		break;

	case 8:
		Console.WriteLine("8점")
		break;
	case 7:
		Console.WriteLine("7점")
		break;
	default:
		Console.WriteLine("몰라")
		break;
}

num은 10이고 num을 10으로 나누었을 때,

그 값이 10이거나 9면 "잘했어"를 출력하고

8이면 "8점", 7이면 "7점"을 출력하라는 알고리즘이다.

 

맨 위 case 10을 보면 아무것도 없고 바로 case 9로 넘어가는데

이는 만약 (num / 10)의 값이 10이거나 9이면 Console.WriteLine("잘했어")를 실행하라는 의미다.

 

맨 아래 default는 위의 조건들 중 어느것도 해당하는게 없을 경우

실행하는 부분이다.

 

반복문

반복문에는 for문, while문, do~while문이 있으며 기본적인 형태는 아래와 같다.

 

for(초기식, 조건식, 증감식){
	실행문
}



while(조건식){
	실행문
}



do{
	실행문
}while(조건식);

while문은 조건식 안의 내용이 참이면 실행문에 적힌 내용을 계속 반복하는 문이다.

 

while과 do~while은 사실상 거의 같으나 한 가지 차이가 있다면

do ~ while은 조건과 상관없이 무조건 한 번은 실행한다는 차이점이 있다.

while은 시작하기전에, 조건이 안맞으면 아예 실행 자체를 안한다.

 

for문은 초기식과 증감식이 있는데

이는 반복 조건용으로 사용한다고 보면 된다.

for (int i = 1; i < 10; i++){
	실행문
}

보통 위와 같이 사용한다.

i라는 변수가 초깃값 1로 선언이 되고

i가 10보다 작으면 실행문을 실행한다.

그리고 실행문을 한 차례 다 실행했으면

증감문의 i++를 따라, i 값이 1 증가한다.

 

즉, 반복할 수록 i 값이 1씩 계속 증가하게 되는데, 어느 순간 i < 10을 만족하지

않는 순간이 오고 이 때가 되면 반복을 중단한다고 생각하면 된다.

 

for문은 중첩이 가능하다.

그러나 그다지 좋은 방법은 아니기 때문에 너무 많이 중첩하는 것은 지양하는 것이 좋다.

for (int i = 1; i < 10; i++){
	실행문 1

	for (int j = 1; j < 10; j++){
		실행문2
	}
    
	실행문 3
}

중첩된 for문의 예시, 2~3번 중첩 정도는 할 수 있지만, 너무 많이 중첩하면 그만큼

최적화 효율이 떨어지니 지양할 것

 

무한 반복

while과 for문을 적당히 응용하면 무한 반복을 만들 수 있다.

while과 for문으로 무한 반복을 만드는 방법은 다음과 같다.

while(true){
	실행문
}



for(;;){
	실행문
}

while의 경우, 조건문에다가 그냥 true를 넣어버리면 말 그대로 무한히 반복하게 된다.

for문의 경우, 초기문, 조건문, 증감문을 그냥 빈값으로 넣어버리면 된다.

 

이러한 무한 반복은 왜쓸까 궁금할 수 도 있는데

저렇게 세팅했다고 무조건 무한반복을 하는 것은 아니고

무한 반복문을 중간에 탈출 할 수 있도록 코드를 구성하면 된다.

 

즉, 정확히 얼마나 반복해야하는지 알 수 없을 때 사용할 수 있다고 보면 된다.

 

이것에 대해선 다음 문단에서 다루겠다.

 

점프문(break, continue, goto)

break문은 가장 중요하고 또 자주사용될 문으로 반복문을 완전히 끝내는 역할을 한다.

continue는 이하의 내역을 스킵하고 다음 반복으로 넘어가는 역할을 하며

goto는 반복문 내에서 특정 명령을 수행하는 역할을 한다.

 

아래 break 예제를 보자

int a = 1;

while(true){
	a++;
	if (a > 10){
		break;
	}
}

a는 1로 시작하고 무한반복문 내에서 a값은 1씩 무한히 증가한다.

그러다가 a가 10을 넘어가는 순간 break가 실행되면서

반복문이 종료되게 된다.

 

이번엔 continue 예제를 보자

 

int a = 1;
int b = 1;
while(true){
	a++;
	if (a == 5){
		continue;
	}
	b = a + b
}

a는 1씩 무한히 증가하고 b는 a값과 b 값을 더한만큼 증가한다.

그런데 a가 5가 될 때, continue가 실행된다.

이 경우, a가 5가 되었을 때, 바로 밑의 b = a + b가 실행되지 않고

다시 반복문의 첫 부분으로 돌아간다.

즉,

a + b는 아래 순서대로 진행이 된다.

2 + 1

3 + 3

4 + 6

6 + 10

7 + 16......

왼쪽 항은 1씩 증가하는데 여기서 5는 continue에 의해 스킵된 것이다.

 

이번엔 goto 예제를 보자

for(int i = 0; i < 10 ; i++){
	if(i==5)
	{
		goto AA;
	}
	if(i==7)
	{
		goto BB;
	}
}
AA:
	Console.WriteLine("AA를 실행")
BB:
	Console.WriteLine("BB를 실행")

i가 0에서 시작해, 1씩 증가하여 10이 될 때까지 반복하는 for문이다.

 

여기서 i가 5가 되는 순간, 반복문 밖의 AA를 실행하며

i가 7이 되는 순간, 반복문 밖의 BB를 실행하게 된다.