시리즈:쉽게 배우는 프로그래밍 입문/C 샵 편집하기

편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
{{:시리즈:쉽게 배우는 프로그래밍 입문}}
{{쉽게 알 수 있다 시리즈|이 문서는 정말 쉽습니다.|문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.}}
{{토막글}}
[[분류:프로그래밍 시리즈|C 샵]]
 
{{중급 프로그래밍 항목}}
 


[[마이크로소프트]]에서 [[Java]]와 [[C++]]의 장점을 합쳐서 만든 언어. <del>퓨전</del> Java와 문법이 상당히 흡사하다. 단 Java에서 가능 한 것이 C#에선 컴파일 오류 내기도 하고 C#에선 되는 것이 Java에선 다르게 동작하기도 하는 경우도 있다. 그리고 Java와는 달리 포인터도 사용이 가능하다. 단 unsafe 로 선언한 부분에서만 사용이 가능하다.
[[마이크로소프트]]에서 [[Java]]와 [[C++]]의 장점을 합쳐서 만든 언어. <del>퓨전</del> Java와 문법이 상당히 흡사하다. 단 Java에서 가능 한 것이 C#에선 컴파일 오류 내기도 하고 C#에선 되는 것이 Java에선 다르게 동작하기도 하는 경우도 있다. 그리고 Java와는 달리 포인터도 사용이 가능하다. 단 unsafe 로 선언한 부분에서만 사용이 가능하다.
12번째 줄: 17번째 줄:


콘솔 응용 프로그램 프로젝트를 생성하고 main 메소드 내에 다음 내용을 입력하고 실행해보자.
콘솔 응용 프로그램 프로젝트를 생성하고 main 메소드 내에 다음 내용을 입력하고 실행해보자.
<syntaxhighlight lang="csharp">
<source lang="csharp">
Console.Write("Hello, World!");
Console.Write("Hello, World!");
</syntaxhighlight>
</source>


== 자료형 ==
== 자료형 ==
65번째 줄: 70번째 줄:
==== if ====
==== if ====
if문은 특정 조건문이 만족되면 그 안의 코드를 실행한다.
if문은 특정 조건문이 만족되면 그 안의 코드를 실행한다.
<syntaxhighlight lang="csharp">
<source lang="csharp">
// 64Bit라면 콘솔에 64Bit!를 출력한다.
// 64Bit라면 콘솔에 64Bit!를 출력한다.
if (Environment.Is64BitOperatingSystem)
if (Environment.Is64BitOperatingSystem)
71번째 줄: 76번째 줄:
     Console.WriteLine("64Bit!");
     Console.WriteLine("64Bit!");
}
}
</syntaxhighlight>
</source>
if ... else ... 문은 특정 조건문이 만족되면 if와 else 사이의 코드를 실행하고, 아니라면 else 밑의 코드를 실행한다.
if ... else ... 문은 특정 조건문이 만족되면 if와 else 사이의 코드를 실행하고, 아니라면 else 밑의 코드를 실행한다.
<syntaxhighlight lang="csharp">
<source lang="csharp">
if (Environment.Is64BitOperatingSystem)
if (Environment.Is64BitOperatingSystem)
{
{
83번째 줄: 88번째 줄:
     Console.WriteLine("32Bit!");
     Console.WriteLine("32Bit!");
}
}
</syntaxhighlight>
</source>
if ... else if .... else와 같이 사용할 수도 있다. 이건 예제로 보자 (주석도)
if ... else if .... else와 같이 사용할 수도 있다. 이건 예제로 보자 (주석도)
<syntaxhighlight lang="csharp">
<source lang="csharp">
string username = Environment.UserName; // Windows 사용자 이름을 가져온다.
string username = Environment.UserName; // Windows 사용자 이름을 가져온다.
if (username == "LibreWiki") // username이 LibreWiki라면
if (username == "LibreWiki") // username이 LibreWiki라면
107번째 줄: 112번째 줄:
     Console.WriteLine("I don't know you."); // 이런 메세지를 출력
     Console.WriteLine("I don't know you."); // 이런 메세지를 출력
}
}
</syntaxhighlight>
</source>


==== switch ====
==== switch ====
switch 문은 변수의 값을 확인해서 그 값에 맞는 부분의 코드를 실행한다.
switch 문은 변수의 값을 확인해서 그 값에 맞는 부분의 코드를 실행한다.


<syntaxhighlight lang="csharp">
<source lang="csharp">
switch (foo)
switch (foo)
{
{
128번째 줄: 133번째 줄:
         break;
         break;
}
}
</syntaxhighlight>
</source>


위의 예제는 변수 foo의 값을 확인해서 값이 0일때와 1일때와 2일때 그리고 그 이외의 값일 때 각각 다르게 동작하도록 한 예제이다. 각 case문이 끝나는 부분은 반드시 break나 return<ref>메소드 내에서 그 메소드를 끝낼 때 사용</ref>를 사용해주어야 한다. 비교할 변수는 int 같은 정수뿐만이 아니라 string이나 enum도 사용이 가능하다. default는 해당 변수의 값이 case 부분에서 해당되는 것이 없을 경우 동작하는 부분으로 생략이 가능하다.
위의 예제는 변수 foo의 값을 확인해서 값이 0일때와 1일때와 2일때 그리고 그 이외의 값일 때 각각 다르게 동작하도록 한 예제이다. 각 case문이 끝나는 부분은 반드시 break나 return<ref>메소드 내에서 그 메소드를 끝낼 때 사용</ref>를 사용해주어야 한다. 비교할 변수는 int 같은 정수뿐만이 아니라 string이나 enum도 사용이 가능하다. default는 해당 변수의 값이 case 부분에서 해당되는 것이 없을 경우 동작하는 부분으로 생략이 가능하다.


<syntaxhighlight lang="csharp">
<source lang="csharp">
switch (foo)
switch (foo)
{
{
146번째 줄: 151번째 줄:
         break;
         break;
}
}
</syntaxhighlight>
</source>


위의 문법은 [[Java]]에서는 사용이 가능하지만 C#에서는 컴파일 오류가 발생하게 된다.
위의 문법은 [[Java]]에서는 사용이 가능하지만 C#에서는 컴파일 오류가 발생하게 된다.


<syntaxhighlight lang="csharp">
<source lang="csharp">
switch (foo)
switch (foo)
{
{
163번째 줄: 168번째 줄:
         break;
         break;
}
}
</syntaxhighlight>
</source>


C#에서는 이런 식으로 case와 case를 '''같은 줄에 사용해주어야만 오류가 발생하지 않는다.''' 이 예제는 foo의 값이 0일 때와 1일 때 같은 동작을 하도록 한 예제이다.
C#에서는 이런 식으로 case와 case를 같은 줄에 사용해주어야만 오류가 발생하지 않는다. 이 예제는 foo의 값이 0일 때와 1일 때 같은 동작을 하도록 한 예제이다.


=== 반복문 ===
=== 반복문 ===
반복문을 사용할 때 함께 쓰이는 한정자로 '''break'''와 '''continue''' 그리고 '''return'''이 있다. 이 한정자들의 특징은 다음과 같다.
반복문을 사용할 때 함께 쓰이는 한정자로 '''break'''와 '''continue''' 그리고 '''return'''이 있다. 이 한정자들의 특징은 다음과 같다.


* break: 현재 반복문을 끝내고 빠져나온다.
break : 현재 반복문을 끝내고 빠져나온다.<br/>
* continue: 현재 반복문에서 이번 루프를 끝내고 다음 루프로 넘어간다.
continue : 현재 반복문에서 이번 루프를 끝내고 다음 루프로 넘어간다.<br/>
* return: 현재 메소드를 끝내버려서 반복문도 덤으로 같이 끝난다. 반환값이 있는 메소드 내라면 반환값도 같이 써야한다.
return : 현재 메소드를 끝내버려서 반복문도 덤으로 같이 끝난다. 반환값이 있는 메소드 내라면 반환값도 같이 써야한다.


==== while ====
==== while ====
<code>while (조건) { 실행내용 }</code> 이와 같은 사용하는 반복문으로 조건을 확인해서 조건이 참이면 그 안의 내용을 실행하고 거짓이면 실행하지 않는다. 조건이 참이라서 그 안의 내용을 실행했을 경우 다 실행하거나 continue 한정자를 만나면 다시 조건을 확인해서 참이면 다시 처음부터 실행하고 거짓이면 실행하지 않는다. 이 과정이 조건이 거짓이 될 때까지 무한히 반복. 무한 루프 만들 때도 이것을 주로 이것을 사용한다.  이때는 while (true) 라고 적어주면 된다. 단 무한 루프용으로 사용시에는 반드시 break나 return을 이용해서 빠져나올 수 있는 구멍을 만들어두자. 아래 예제를 보자.
<code>while (조건) { 실행내용 }</code> 이와 같은 사용하는 반복문으로 조건을 확인해서 조건이 참이면 그 안의 내용을 실행하고 거짓이면 실행하지 않는다. 조건이 참이라서 그 안의 내용을 실행했을 경우 다 실행하거나 continue 한정자를 만나면 다시 조건을 확인해서 참이면 다시 처음부터 실행하고 거짓이면 실행하지 않는다. 이 과정이 조건이 거짓이 될 때까지 무한히 반복. 무한 루프 만들 때도 이것을 주로 이것을 사용한다.  이때는 while (true) 라고 적어주면 된다. 단 무한 루프용으로 사용시에는 반드시 break나 return을 이용해서 빠져나올 수 있는 구멍을 만들어두자. 아래 예제를 보자.


<syntaxhighlight lang="csharp">
<source lang="csharp">
int foo = 1;
int foo = 1;


196번째 줄: 201번째 줄:
     Console.WriteLine("foo의 값은 " + foo);
     Console.WriteLine("foo의 값은 " + foo);
}
}
</syntaxhighlight>
</source>


위의 예제는 처음에 foo에 1을 넣고 foo의 값이 1000보다 작은 동안 계속 반복하면서 foo의 값을 2배로 늘리고 foo의 값을 출력하는 예제이다. 그래서 최초에는 2, 그 다음 루프에서는 4, 그 다음 루프에서는 8이 출력된다. 하지만 그 다음 루프에선 foo의 값이 16이므로 첫번째 if문에 의해 continue 한정자를 만나게 되고 그 루프는 종료된다. 그리고 foo의 값은 32가 되어 32가 출력된다. 그리고 그 다음 루프에서는 64가 출력된다. 하지만 그 다음 루프에선 foo의 값이 128이 되므로 두번째 if문에 의해 break 한정자를 만나게 되고 반복문 조건에 관계 없이 그 반복문은 종료된다. 즉 위의 예제는 2, 4, 8, 32, 64가 출력되고 종료되게 된다.
위의 예제는 처음에 foo에 1을 넣고 foo의 값이 1000보다 작은 동안 계속 반복하면서 foo의 값을 2배로 늘리고 foo의 값을 출력하는 예제이다. 그래서 최초에는 2, 그 다음 루프에서는 4, 그 다음 루프에서는 8이 출력된다. 하지만 그 다음 루프에선 foo의 값이 16이므로 첫번째 if문에 의해 continue 한정자를 만나게 되고 그 루프는 종료된다. 그리고 foo의 값은 32가 되어 32가 출력된다. 그리고 그 다음 루프에서는 64가 출력된다. 하지만 그 다음 루프에선 foo의 값이 128이 되므로 두번째 if문에 의해 break 한정자를 만나게 되고 반복문 조건에 관계 없이 그 반복문은 종료된다. 즉 위의 예제는 2, 4, 8, 32, 64가 출력되고 종료되게 된다.


==== do while ====
==== do while ====
<code>do { 실행내용 } while (조건문);</code> 조건문이 false가 될때까지 실행 내용을 반복하여 실행한다. 여기까지만 들으면 "어? while문과 똑같네?"라고 느끼겠지만, 한 가지 다른 점이 있는데 바로 '''while문은 조건문이 먼저 실행되지만, do while문은 실행 내용을 먼저 실행한다'''는 점이다.
<code>do { 실행내용 } while (조건문);</code> 조건문이 false가 될때까지 실행 내용을 반복하여 실행한다. 여기까지만 들으면 "어? while문과 똑같네?"라고 느끼겠지만, 한가지 다른 점이 있는데 바로 '''while문은 조건문이 먼저 실행되지만, do while문은 실행 내용을 먼저 실행한다'''는 점이다.


말로만 들으면 이해가 어려울테니, 예시를 들어보자
말로만 들으면 이해가 어려울테니, 예시를 들어보자
{| class="wikitable" style="width: 100%;"
{{비교
! 코드 (while문 사용) !! 실행결과
|<source lang="csharp">
|-
| style="width: 50%;" | <syntaxhighlight lang="csharp">
private static int a;
private static int a;
private static bool condition(){
private static bool condition(){
221번째 줄: 224번째 줄:
}
}
}
}
</syntaxhighlight>
</source>
| style="width: 50%;" | 조건식 계산됨 (0)<br />
|조건식 계산됨 (0)<br />
실행 내용 실행됨 (1)<br />
실행 내용 실행됨 (1)<br />
조건식 계산됨 (2)<br />
조건식 계산됨 (2)<br />
233번째 줄: 236번째 줄:
실행 내용 실행됨 (9)<br />
실행 내용 실행됨 (9)<br />
조건식 계산됨 (10)
조건식 계산됨 (10)
|-
|비교전머릿말=코드 (while문 사용)
|}
|비교후머릿말=실행결과
}}


{| class="wikitable" style="width: 100%;"
{{비교
! 코드 (do while문 사용) !! 실행결과
|<source lang="csharp">
|-
| style="width: 50%;" | <syntaxhighlight lang="csharp">
private static int a;
private static int a;
private static bool condition(){
private static bool condition(){
253번째 줄: 255번째 줄:
} while(condition());
} while(condition());
}
}
</syntaxhighlight>
</source>
| style="width: 50%;" | 실행 내용 실행됨 (0)<br />
|실행 내용 실행됨 (0)<br />
조건식 계산됨 (1)<br />
조건식 계산됨 (1)<br />
실행 내용 실행됨 (2)<br />
실행 내용 실행됨 (2)<br />
266번째 줄: 268번째 줄:
실행 내용 실행됨 (10)<br />
실행 내용 실행됨 (10)<br />
조건식 계산됨 (11)<br />
조건식 계산됨 (11)<br />
|-
|비교전머릿말 = 코드 (do while문 사용)
|}
|비교후머릿말 = 실행결과
}}


실행 결과를 보자, while문은 처음에 조건식이 먼저 확인되었으나,do while문은 처음에 조건식이 확인되지 않고 실행내용이 먼저 실행되었다. 이러한 점을 보아 do while문은 '''조건과는 상관없이 무조건 한번 이상 실행되야 하는 경우'''에 사용하면 유용하다.
실행 결과를 보자, while문은 처음에 조건식이 먼저 확인되었으나,do while문은 처음에 조건식이 확인되지 않고 실행내용이 먼저 실행되었다. 이러한 점을 보아 do while문은 '''조건과는 상관없이 무조건 한번 이상 실행되야 하는 경우'''에 사용하면 유용하다.
276번째 줄: 279번째 줄:
[[파일:For문 순서도.PNG]]
[[파일:For문 순서도.PNG]]
===== 예시 코드 =====
===== 예시 코드 =====
{| class="wikitable" style="width: 100%;"
{{비교
! 코드 !! 실행결과
|<source lang="csharp">
|-
| style="width: 50%;" | <syntaxhighlight lang="csharp">
for(int i=0;i<5;i++){
for(int i=0;i<5;i++){
Console.WriteLine(i);
Console.WriteLine(i);
}
}
</syntaxhighlight>
</source>
| style="width: 50%;" | 0<br />1<br />2<br />3<br />4
|0<br />1<br />2<br />3<br />4
|-
|비교전머릿말=코드
|}
|비교후머릿말=실행 결과
}}


==== foreach ====
==== foreach ====
292번째 줄: 294번째 줄:
=== goto ===
=== goto ===


<syntaxhighlight lang="csharp">
<source lang="csharp">
     if (qux == "foo")
     if (qux == "foo")
     {
     {
312번째 줄: 314번째 줄:
Baz:
Baz:
     Console.WriteLine("Baz");
     Console.WriteLine("Baz");
</syntaxhighlight>
</source>


위는 변수 qux의 값이 foo 이면 goto문으로 Foo로 이동하여 Foo를 출력하고 Baz로 이동하여 Baz를 출력하며 qux의 값이 foo가 아니면 Bar로 이동하여 Bar를 출력하고 Baz로 이동하여 Baz를 출력하는 예제다. 그냥 이런 것이 있다는 것만 알고 넘어가자. goto문은 '''사용이 권장되지 않는다.''' <del>하지만 [[Visual Studio]] 도전과제를 딸려면 goto문을 써야한다.</del>
위는 변수 qux의 값이 foo 이면 goto문으로 Foo로 이동하여 Foo를 출력하고 Baz로 이동하여 Baz를 출력하며 qux의 값이 foo가 아니면 Bar로 이동하여 Bar를 출력하고 Baz로 이동하여 Baz를 출력하는 예제다. 그냥 이런 것이 있다는 것만 알고 넘어가자. goto문은 '''사용이 권장되지 않는다.''' <del>하지만 [[Visual Studio]] 도전과제를 딸려면 goto문을 써야한다.</del>
단, 사용해도 전혀 상관없다는 사람도 있다. 이 문법을 즐겨 쓰는 사람도 있다.


== 클래스 ==
== 클래스 ==
== 주석 ==
== 주석 ==
<syntaxhighlight lang="csharp">
<source lang="csharp">
/*
/*
작성자: 지나가던 위키니트
작성자: 지나가던 위키니트
343번째 줄: 342번째 줄:
     }
     }
}
}
</syntaxhighlight>
</source>
//는 //부터 그 뒤의 내용 한줄만 주석이 된다. /* */는 /*가 시작하는 부분부터 */가 나오는 곳까지 모두 주석이 된다. 클래스나 변수 위에 있는 /// 같은 곳에 입력한 주석은 비주얼 스튜디오 내에서 해당 변수에 마우스를 올리면 저 주석 내용이 표시되게 된다. 클래스나 메소드 같은 곳 위에 /// 를 입력하면 비주얼 스튜디오가 알아서 해당 주석 템플릿을 만들어주니 주석 내용만 입력만 해주면 된다.
//는 //부터 그 뒤의 내용 한줄만 주석이 된다. /* */는 /*가 시작하는 부분부터 */가 나오는 곳까지 모두 주석이 된다. 클래스나 변수 위에 있는 /// 같은 곳에 입력한 주석은 비주얼 스튜디오 내에서 해당 변수에 마우스를 올리면 저 주석 내용이 표시되게 된다. 클래스나 메소드 같은 곳 위에 /// 를 입력하면 비주얼 스튜디오가 알아서 해당 주석 템플릿을 만들어주니 주석 내용만 입력만 해주면 된다.


== 예외처리 ==
== 예외처리 ==
<syntaxhighlight lang="csharp">
<source lang="csharp">
try
try
{
{
360번째 줄: 359번째 줄:
     // try 문이 끝나거나 catch 문이 끝나면 실행될 내용
     // try 문이 끝나거나 catch 문이 끝나면 실행될 내용
}
}
</syntaxhighlight>
</source>


위와 같이 예외처리할 부분은 try catch 문으로 묶어준다. finally는 생략 가능. catch 문에 있는 ex 파라메타는 오류 발생 시 그 오류 정보를 담고 있는 변수로 Message 프로퍼티에 오류 내용이 텍스트로 적혀 있다.
위와 같이 예외처리할 부분은 try catch 문으로 묶어준다. finally는 생략 가능. catch 문에 있는 ex 파라메타는 오류 발생 시 그 오류 정보를 담고 있는 변수로 Message 프로퍼티에 오류 내용이 텍스트로 적혀 있다.


== 람다 ==
== 람다 ==
<syntaxhighlight lang="csharp">
<source lang="csharp">
var func=delegate(string x){Console.WriteLine(x);}
var func=delegate(string x){Console.WriteLine(x);}
func("Hello, World!");
func("Hello, World!");
</syntaxhighlight>
</source>
위과 같이 무명 메소드를 사용할 수 있다. 이 무명 메소드는 대리자가 필요하긴 한데 메소드 하나 더 만들기 아까울때 사용하면 좋다.
위과 같이 무명 메소드를 사용할 수 있다. 이 무명 메소드는 대리자가 필요하긴 한데 메소드 하나 더 만들기 아까울때 사용하면 좋다.


또한 위와 같이 말고 아래의 같이 람다 식을 사용할 수 있다. 람다식은 한줄짜리를 쓸때 유용하다.
또한 위와 같이 말고 아래의 같이 람다 식을 사용할 수 있다. 람다식은 한줄짜리를 쓸때 유용하다.
<syntaxhighlight lang="csharp">
<source lang="csharp">
var func=x => x*x;
var func=x => x*x;
Console.Write(func(5));
Console.Write(func(5));
</syntaxhighlight>
</source>


== LINQ ==
== LINQ ==


{{각주}}
{{각주}}
[[분류:프로그래밍 시리즈|C 샵]]
리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다.
취소 편집 도움말 (새 창에서 열림)

| () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |}