Created
November 21, 2020 10:08
-
-
Save rkttu/02a0905075f06c46f65fb5523b8af2f3 to your computer and use it in GitHub Desktop.
닷넷 인터랙티브 기반 C# 기초 강좌 샘플
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"# C# 프로그래밍 익히기\n", | |
"\n", | |
"이 노트북은 닷넷 인터랙티브를 사용하여 C# 프로그래밍을 학습할 수 있도록 만들어진 주피터 노트북입니다. 계속하기 전에, 다음의 소프트웨어를 먼저 설치해주세요.\n", | |
"\n", | |
"- 최신 버전의 Anaconda\n", | |
" - 또는 직접 설치하는 경우 Python 3.8 이상에 Jupyter Notebook 설치\n", | |
"- 닷넷 5 (https://dot.net 에서 설치할 수 있습니다.)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"설치를 끝마친 후에는 셸에서 다음과 같이 명령어를 실행하여 닷넷 인터랙티브와 함께 닷넷 커널을 설치합니다.\n", | |
"\n", | |
"```bash\n", | |
"dotnet tool install \\\n", | |
" -g \\\n", | |
" --add-source \"https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json\" \\\n", | |
" Microsoft.dotnet-interactive\n", | |
"\n", | |
"dotnet interactive jupyter install\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"설치가 잘 되었는지 확인하기 위하여 다음과 같이 명령어를 실행해봅니다.\n", | |
"\n", | |
"```bash\n", | |
"jupyter kernelspec list\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"아래와 같이 닷넷 커널들이 표시되면 설치가 잘 된 것입니다.\n", | |
"\n", | |
"```bash\n", | |
" .net-csharp ~\\jupyter\\kernels\\.net-csharp\n", | |
" .net-fsharp ~\\jupyter\\kernels\\.net-fsharp\n", | |
" .net-powershell ~\\jupyter\\kernels\\.net-powershell\n", | |
" python3 ~\\jupyter\\kernels\\python3\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"## Hello, World!\n", | |
"\n", | |
"이제 처음으로 Hello, World! 문구를 C#으로 출력해보도록 하겠습니다." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Hello, World!\n" | |
] | |
} | |
], | |
"source": [ | |
"Console.WriteLine(\"Hello, World!\");" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"위의 코드에서 `Console`은 콘솔이라고 불리는 표준 입출력 장치와 통신하기 위하여 필요한 함수들을 모아놓은 클래스입니다. 나중에 다시 이야기하겠지만, 클래스는 각종 데이터와 이 데이터를 제어할 수 있는 함수들을 한데 모아놓은 자료 형식입니다. 그리고 이 `Console` 이라는 클래스 안에 있는 여러 가지 함수들 중 우리는 방금 `WriteLine` 이라는 함수를 불러본 것입니다." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"`WriteLine` 이라는 이름에서 알 수 있듯이, 표준 입출력 장치의 기능 중 출력 기능을 이용하여 우리가 지정한 문자열을 한 줄 출력하도록 코드를 실행한 것입니다.\n", | |
"\n", | |
"그리고 이 때 어떤 내용을 출력할 것인지를 전달해야 했는데, 출력할 내용은 문자들의 배열, 즉 문자열로 표기하여 인자로 전달했습니다.\n", | |
"\n", | |
"거의 모든 프로그래밍 언어에서 가장 빈번하면서도 가장 중요하게 여기는 자료형들 중 하나가 바로 문자열이며, 문자열은 쌍 따옴표로 전달하거나 출력할 문구의 앞/뒤를 감싸게 됩니다." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"## 변수 선언하기\n", | |
"\n", | |
"이제 위의 코드를 약간 변형해보겠습니다. 문자열이 하나의 데이터라면, 이 데이터를 어딘가에다가 저장하고, 불러올 수 있는 기능이 당연히 제공될 것입니다. 이 때 \n", | |
"데이터를 `변수`라고 하는 공간에 저장하고, 불러오는 것입니다." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Hello, World!\n" | |
] | |
} | |
], | |
"source": [ | |
"var message = \"Hello, World!\";\n", | |
"\n", | |
"Console.WriteLine(message);" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"앞의 코드와는 달리 이번에는 코드가 두 줄이 되었습니다. 변수를 선언하고 싶을 때는 `var` 키워드를 사용하여 지금 선언하려는 것이 변수임을 알려줍니다.\n", | |
"\n", | |
"처음의 코드와 다른 점은, 이번엔 `message` 라고 하는 변수에 `Hello, World!` 라는 문자열 데이터를 저장했고, 이것을 `Console` 이라는 클래스에 들어있는 `WriteLine` 이라는 함수에 전달했다는 것입니다.\n", | |
"\n", | |
"이번에는 `Hello, World!` 대신 `Nice to meet you!` 라는 문자열을 변수에 대신 담아서 출력해보겠습니다." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Hello, World!\n", | |
"Nice to meet you!\n" | |
] | |
} | |
], | |
"source": [ | |
"var message = \"Hello, World!\";\n", | |
"\n", | |
"Console.WriteLine(message);\n", | |
"\n", | |
"message = \"Nice to meet you!\";\n", | |
"\n", | |
"Console.WriteLine(message);" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"## 문자열 다루기\n", | |
"\n", | |
"한 번 선언한 `message` 라는 변수는 한 번 사용이 되고 난 후라도 계속해서 같은 이름에 다른 데이터를 집어넣을 수 있다는 것을 알 수 있습니다.\n", | |
"\n", | |
"그렇다면 이번에는 서로 다른 두 개의 문자열을 한 번에 표현하고 싶은데, 어떻게 할 수 있을까요?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Hello, World! Nice to meet you!\n" | |
] | |
} | |
], | |
"source": [ | |
"var message = \"Hello, World!\" + \" \" + \"Nice to meet you!\";\n", | |
"\n", | |
"Console.WriteLine(message);" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"숫자를 더할 때 사용하는 덧셈 기호를 문자열과 문자열 사이에 넣어주면, 문자열을 순서대로 이어서 저장할 수 있습니다.\n", | |
"\n", | |
"이 방법은 겉보기에는 쉬워 보이지만, 앞서 보았듯 길어지면 코드를 알아보기가 좀 힘듭니다. 더 좋은 방법이 있을까요?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Hello, World! Nice to meet you!\n" | |
] | |
} | |
], | |
"source": [ | |
"var helloWorld = \"Hello, World!\";\n", | |
"var greetings = \"Nice to meet you!\";\n", | |
"var message = $\"{helloWorld} {greetings}\";\n", | |
"\n", | |
"Console.WriteLine(message);" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"이번에는 `helloWorld` 라는 변수와 `greetings` 라는 변수에 문자열을 각각 따로 담고, `message` 변수에는 어떻게 내용을 조립해서 보여줄 것인지만 지정했습니다.\n", | |
"\n", | |
"문자열 앞에 `$` 기호를 붙인 것이 보이는데, 이렇게 문자열을 시작하면, 문자열 안에서 중괄호를 열고 닫은 부분 사이에는 다른 변수의 이름이나 한 줄 짜리 코드를 넣어 복합적으로 코드를 만들 수 있습니다.\n", | |
"\n", | |
"이런 기능을 `문자열 보간` 이라고 이야기합니다." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"celltoolbar": "Slideshow", | |
"kernelspec": { | |
"display_name": ".NET (C#)", | |
"language": "C#", | |
"name": ".net-csharp" | |
}, | |
"language_info": { | |
"file_extension": ".cs", | |
"mimetype": "text/x-csharp", | |
"name": "C#", | |
"pygments_lexer": "csharp", | |
"version": "8.0" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment