메인페이지 . 바뀐페이지 .

\cat StudyMaterial

참여자: HuidaeCho

C# 기본문법

메서드의 정의
연산자
조건문
반복문
주석
토론

메서드의 정의

메서드는 다음과 같은 형태로 정의한다. C#에서는 여러개의 명령을 하나로 묶을 때 {와 }를 사용하며 하나의 명령 뒤에는 반드시 ;을 붙여야 한다. } 뒤에는 ;를 붙이지 않는다.

메서드속성 리턴할자료형 메서드이름(매개변수리스트){
	메서드가할일

	return 메서드의최종결과;
}

다음은 a부터 b까지 더한 값을 돌려주는 메서드의 예이다.

int Sum(int a, int b){
	int sum = 0;

	for(int i = a; i <= b; i++)
		sum += i;

	return sum;
}

실제로 위의 코드를 실행해 보자. 다음의 소스를 입력해서 컴파일 후 실행하면 55가 출력된다.

using System;

class TestSum{
	public static void Main(){
		Console.WriteLine(Sum(1, 10));
	}

	static int Sum(int a, int b){
		int sum = 0;

		for(int i = a; i <= b; i++)
			sum += i;

		return sum;
	}
}

연산자

조건문

C#은 if(0)이나 if(1) 처럼 bool 형식이 아닌 값에 대한 참, 거짓을 판단하지 않으며 다음과 같은 형식을 취한다.

if(조건식)
	조건식이 참일 경우 실행할 구문 또는 {} 블럭

위에서 말하는 구문에는 else 명령도 포함하고 있다. 따라서 위의 형식을 확장해 보면 다음과 같은 형식들이 가능하다.

if(조건식){
	조건식이 참일 경우 실행할 구문들
}

if(조건식){
	조건식이 참일 경우 실행할 구문들
}else{
	조건식이 거짓을 경우 실행할 구문들
}

if(조건식1){
	조건식1이 참일 경우 실행할 구문들
}else
if(조건식2){
	조건식2가 참을 경우 실행할 구문들
}else{
	조건식 1과 2 모두 거짓을 경우 실행할 구문들
}

C#에서의 switch문은 break의 생략을 허용하지 않으며 다음과 같은 형식을 취한다.

switch(정수형상수){
	case 값1:
		정수형상수가 값1을 경우 실행할 구문들
		break;
	case 값2:
		정수형상수가 값2을 경우 실행할 구문들
		break;
	default:
		정수형상수가 위의 case에서 지정한 값들과 일치하지 않을 경우 실행할 구문들
		break;
}

if와 switch는 비슷한 역할을 하지만 중요한 차이점은 switch문에서는 정수형상수의 평가를 한 번만 수행한다는 것이다. 다음의 예를 보자.

int a, b;

a = b = 0;
if(++a == 2)
	b = 1;
else
if(++a == 3)
	b = 2;

a = b = 0;
switch(++a){
case 2:
	b = 1;
	break;
case 3:
	b = 2;
	break;
}

첫번째 if문은 1==2의 참거짓을 판단해서 거짓이 된다. 따라서 두번째 if문에서 2==3을 판단하게 되는데 역시 거짓이다. 따라서 if문 이후의 a값은 2가 되고 b는 0이다. 반면, switch문에서는 ++a를 한 번만 평가하게 되므로 1과 2, 1과 3을 비교하게 된다. 따라서 switch문 이후의 a값은 1이 되고 b는 0이다.

비교대상의 값이 변하지 않을 경우에는 if문과 switch문 차이가 별로 없어 보이지만 비교대상의 평가에 많은 리소스가 필요한 경우 switch문을 사용하는 것이 속도상 빠르다. 다음을 보자.

using System;
class SpeedTest{
	static void Main(){
		IfSum();
		SwitchSum();
	}
	static void IfSum(){
		if(Sum(1, 100) == 55)
			Console.WriteLine("FALSE");
		else
		if(Sum(1, 100) == 5050)
			Console.WriteLine("TRUE");
	}
	static void SwitchSum(){
		switch(Sum(1, 100)){
		case 55:
			Console.WriteLine("FALSE");
			break;
		case 5050:
			Console.WriteLine("TRUE");
			break;
		}
	}
	static int Sum(int from, int to){
		int ret = 0;

		for(int i = from; i <= to; ++i)
			ret += i;

		return ret;
	}
}

IfSum()에서는 if문마다 Sum(1, 100)을 실행하지만 SwitchSum()에서는 한 번만 Sum(1, 100)을 실행한다. 물론 Sum(1, 100)의 값을 미리 변수에 저장한 후 if문에서 그 변수를 이용하면 되지만 이럴 경우에도 (적어도 C의 경우에는) switch가 적은 수의 기계어를 차지한다.

if문에서 또 한 가지 주의해야 할 것은 실수형의 비교이다. 실수형은 비교대상이 되는 두 변수의 정밀도에 따라서 예상치 못한 결과가 나올 수 있으므로 같은 변수형으로 캐스팅을 하거나 적당한 오차범위 내에서 비교를 하는 것이 옳다.

반복문

foreach ImproveMe

반복문에는 다음과 같은 것들이 있다.

for(초기화; 조건식; 스텝){
	실행할 구문들
}

while(조건식){
	실행할 구문들
}

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

속도면에서는 for가 제일 빠르다. for문의 처리순서는 초기화 -> 조건식 -> 실행할 구문들 -> 스텝 -> 조건식 -> 실행할 구문들 -> ...순이다. 이 때 조건식을 만족하지 못하면 for문은 종료된다.

while문과 do문의 차이점은 while문은 최초 while문을 만났을 때 조건식에 대한 평가가 이루어지는 반면 do문은 적어도 한 번은 실행할 구문들을 실행한 후 조건식에 대한 평가가 이루어진다.

반복문 내에서 continue를 만나면 그 이후의 구문들은 실행하지 않고 다음 단계의 반복으로 넘어간다. 예를 들어 for문 내에서 continue를 만나면 다음 스텝으로 넘어간다. while과 do문 내에서 continue를 만나면 다음 조건식 평가로 넘어간다. 주의할 것은 do문에서 continue를 만나면 do의 위치로 올라가는 것이 아니라 while의 위치로 내려 온다는 것이다.

반복문 내에서 break를 만나면 반복문을 종료한다.

주석

/// ImproveMe

주석에는 세 가지 종료가 있다: 한 줄 주석, 여러 줄 주석, XML 형태의 주석. 한 줄 주석은 //로 시작해서 해당 줄까지 계속되며, 여러 줄 주석은 /*로 시작해서 */까지 계속된다. 단, 여러 줄 주석은 중복을 허용하지 않는다.

토론

편집 . 바뀐부분 . 역링크 .
2020년 7월 13일 오후 11:09:16 . XHTML 1.1 . CSS 3 . 용쓴다. !
이 사이트의 모든 문서는 크리에이티브 커먼즈 라이센스를 따릅니다.