2022.07.25
기초를 다시 다지는 마음으로 C# 단기 프로젝트를 시작했습니다.
프로젝트 TODO
- C#의 기초를 담은 MK문법으로 기술서 작성
- 마크다운 문법 공부 ( 추후 ReadMe 작성의 도움 )
- C#의 문법 구조를 공부하면서 함께 쓸 수 있는 자료구조 공부
Chpater 1 - 1 C# 과 객체지향
What Is C# ?
가장 먼저 C#에 대해 간단하게 알아보도록 합시다. C 와 C++의 강점, 비주얼 베이직의 편의성을 결합하여 만든 객체지향 프로그래밍 언어입니다. 닷넷을 기반으로 하여 웹 프로그래밍, 데이터 베이스 프로그래밍, 서버 - 클라이언트 개발, 사물인터넷 (IoT) 와 같은 거의 모든 프로그래밍에서 사용되는 강력한 언어입니다.
객체지향이란 ?
C#에 꼬리표 처럼 따라오는 객체지향성 입니다. 객체지향이란 필요한 데이터를 추상화시켜 상태와 행동을 가진 객체( Object ) 로 만들고 객체끼리의 상호작용을 통해 로직을 구성하는 프로그래밍 기법입니다.
객체지향에는 5대 원칙이 존재합니다.
- 클래스 + 인스턴스 ( 객체 )
- 추상화
- 캡슐화
- 상속
- 다형성
위와 같은 5개의 원칙이 존재합니다. 위와 같은 5개의 기능을 기반으로 두고 설계하는 것이 가장 이상적인 프로그래밍 이라고 할 수 있겠습니다.
1) 클래스와 인스턴스
클래스 - 속성과 행위를 변수와 매서드로 정의한 것
인스턴스 - 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 객체
2) 캡슐화
- 데이터 구조와 데이터를 다루는 방법을 결합시켜 묶는다.
- 데이터를 은닉하고 접근하는 기능을 노출시키지 않는다.
쉽게 안에 있는 내용물을 보호하기 위한 기능을 하는 캡슐알약을 생각하면 됩니다. 데이터를 접근 지시자를 통해 접근하는 방법을 제어하게 됩니다.
- public : 모두가 접근 가능한 지시자
- protected : 상속받거나 같은 패키지 내 클래스에서 접근 가능
- private : 본인만 접근 가능
3) 상속
- 상속은 상위 클래스에 있는 내용을 하위 클래스가 물려 받는것을 의미합니다다. 쉽게 부모가 자식에게 물려주는 것이라고 생각하면 됩니다.
상속은 가장 많이 쓰는 기법으로 아래의 이미지를 참고하면 이해가 쉽습니다. 적은 체력과 공격력, 방어력을 공유하지만 미니언과 대포미니언의 각각의 특징을 가지고 있다. 상속을 활용한다면 미니언과 대포미니언은 상위클래스인 적 이라는 공통의 개념을 가진 상위 클래스를 상속 받아서 하위 클래스인 미니언과 대포미니언에서 각자의 특징을 구현하면 상속을 사용한 프로그래밍 구조입니다.

이처럼 상속을 사용하는 이유는 미니언에서 체력, 공격력, 방어력을 구현하고 대포미니언에서 체력, 공격력, 방어력을 구현할 필요 없이 적 이라는 공통 상위 클래스에 체력, 공격력, 방어력을 작성하고 각자의 클래스에서 본인만 가진 특징을 서술하면 코드의 재사용성을 증대 시킬 수 있는 효과를 얻을 수 있습니다.
한마디로 같은 기능을 또 구현 할 필요가 없다는 것 입니다.
4) 추상화
- 추상화는 객체의 공통 속성을 뽑아내는 것입니다.
예를 들어 피격을 당했을 때 데미지를 받는 것은 적, 플레이어 동일할 것 입니다. 이와 같은 공통 속성을 뽑아 추상화 하는 것 입니다.
우리는 그저 언제 어디서 무엇에 피격 당했는지 보다, "데미지를 받는다" 라는 작업을 추상화 했다는 것 입니다.
한마디로 사용하기, 알아보기 쉽게 단순화 한다는 것 입니다.
Chapter 1 - 2 자료형 ( 심화 )
구구절절 int, long, float, string이 무엇인지 다루는게 아닌 조금 심화적인 내용을 다뤄 보려고 합니다. 간단하게는 int - 정수, float - 실수 와 같이 정말 간단하게 알고 있는게 대부분 이라고 생각합니다.
먼저 여러 자료형을 살펴 봅시다.
1) 먼저 정수형 입니다.
- sbyte - 부호 있는 8비트 정수
- byte - 부호 없는 8비트 정수
- short - 부호 있는 16비트 정수
- unshort - 부호 없는 16비트 정수
- int - 부호 있는 32비트 정수
- unint - 부호 있는 32비트 정수
- long - 부호 있는 64비트 정수
- unlong - 부호 있는 64비트 정수
C#에는 위와 같은 정수형에 여러개의 자료형이 존재 합니다. 다양한 자료형이 존재하는 이유는 각각 범위에 맞게 적절한 자료형을 사용해야 하기 때문이다. 자료형에 따라 차지하는 메모리의 크기가 다르기 떄문입니다.
예를 들어 변수에 100명의 학생을 담는다고 했을때를 가정 해보겠습니다.
//적절한 자료형 사용 X
int studentCount = 100;
//적절한 자료형 사용 O
sbyte studentCount = 100;
byte studentCount = 100;
아래와 같이 정확한 자료형의 사용은 메모리의 낭비를 줄일 수 있는 방법입니다.
2) 실수형 입니다.
- float - 32비트
- double - 64비트
- decimal - 128비트
소수점을 포함하기 시작하면 정확한 수의 표현이 아닌 근사치를 표현하는데 더 특화되어 있습니다. 소수점 이하의 모든수를 표현하는 것은 비효율적이기 때문에 아주 작지만 조금의 오차범위가 생길수 밖에 없다. decimal 같은 경우 천문학과 같은 분야에서 한치의 오차가 허용되지 않을때 사용하는 자료형입니다.
3) 문자(열)형 입니다.
- char - 유니코드 16bit (개당 2바이트 )
- string - 유니코드 16bit 조합
*유니코드란? - 유니코드는 모든 나라의 언어를 표현하기 위해 나온 코드체계. 운영체제, 나라, 프로그램, 언어에 상관없이 문자마다 고유한 코드값을 제공하는 방식.
4) 부울린형 입니다.
- bool 8bit (1바이트)
오로지 참과 거짓을 따질때 사용하는 자료형입니다.
README 작성
# C# Baics Project
---
## **목차**
<!--챕터 1-->
<details>
<summary><a href="#Chapter" > Chapter 1 </a></summary>
<strong>[Chapter 1 - 1] C#의 기본</strong>
<strong>[Chapter 1 - 2] 자료형</strong>
</details>
<!--챕터 2-->
<details>
<summary><a href="#Chapter" > Chapter 2 </a></summary>
<strong>[Chapter 2 - 1] 변수 </strong>
</details>
---
# Chapter 1 - 1
> C#의 기본과 객체지향에 대해 알아봅시다.
### What is C# ?
<strong>C</strong> 와 <strong>C++</strong>의 강점, 비주얼 베이직의 편의성을 결합하여 만든 <strong>객체지향 프로그래밍</strong> 언어입니다. <strong>닷넷</strong>을 기반으로 하여 <strong>웹 프로그래밍, 데이터 베이스 프로그래밍, 서버 - 클라이언트 개발, 사물인터넷 (IoT)</strong> 와 같은 거의 모든 프로그래밍에서 사용되는 강력한 언어입니다.
### 객체지향이란?
C#에 꼬리표 처럼 따라오는 <strong>객체지향성</strong> 입니다. 객체지향이란 <strong>필요한 데이터를 추상화시켜 상태와 행동을 가진 객체( Object )</strong> 로 만들고 <strong>객체끼리의 상호작용을 통해 로직을 구성</strong>하는 프로그래밍 기법입니다.
#### **객체지향에는 5대 원칙이 존재합니다.**
1. 클래스 + 인스턴스 ( 객체 )
2. 캡슐화
3. 상속
4. 추상화
5. 다향성
## 1) **클래스 와 인스턴스**
<strong>클래스</strong> - 속성과 행위를 변수와 매서드로 정의한 것
<strong>인스턴스</strong> - 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 객체
