Skip to content

Instantly share code, notes, and snippets.

@rkttu
Created November 21, 2020 10:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rkttu/02a0905075f06c46f65fb5523b8af2f3 to your computer and use it in GitHub Desktop.
Save rkttu/02a0905075f06c46f65fb5523b8af2f3 to your computer and use it in GitHub Desktop.
닷넷 인터랙티브 기반 C# 기초 강좌 샘플
Display the source blob
Display the rendered blob
Raw
{
"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