[C#][인프런]C# 프로그래밍 기초(1~3강)
## 목차
1) 프로그래밍 언어의 이해
2) 왜 객체지향 언어가 대세인가
3) C#은 .NETFramework 기반의 객체지향 언어
4) 프로그램 구조
#1 프로그래밍 언어의 이해
프로그램 구조(실행문, 조건문, 반복문)
세대별 특징(1세대 : GOTO(BASIC), 2세대 : 함수(C), 3세대 : 클래스(C#))
프로그램의 발전 방향
- 기존 프로그램을 어떻게 편리하게 재사용 할 것인지
- 명령문의 함축 (ex. a = a + 1; -> a += 1; -> a++;)
#2 왜 객체지향 언어가 대세인가
가상 머신의 등장
함수만으로 객체 모델링을 하기에는 한계가 있음
객체라는 것은 C 언어에서 함수와 Struct의 결합체로 이해 할 수 있음
#3 C#은 .NETFramework 기반의 객체지향 언어
Java와 .NET Framework
- 공통점
- 중간 언어 사용
- Java의 가상머신이실행하는 코드를 바이트코드라 함
- CLR이 싱행하는 코드를 CIL이라 함
- 둘 다 가상 머신을 사용
- 차이점
- Java : Single Language & Multi Platform
- .CLR : Multi Language & Single Platform -> .NET Core 프레임워크 개발(Multi Platform)
.NET Framework 주요 개념
- MSIL or IL -> Common Intermediate Language
CLR에 의해서 해석되어 최종 기계어로 번역되는 중간 언어
- CTS(Common Type System)
닷넷 호환 언어가 지켜야 할 타입의 표준 규격을 정의한 것
- CLS(Common Language Specification)
닷넷 호환 언어가 지켜야 할 최소한의 언어 사양을 정의한 것
- CLR(Common Language Runtime)
CLI 사양을 만족하는 VM
JIT 컴파일러 : IL을 기겨어로 번역
GC : Garbage Controller
GAC
컴파일러, 인터프리터
모든 전자 장비에는 CPU가 들어간다.
CPU와 기계어를 알아듣는 가상머신이 같이 발전된다.
CPU와 같이 움직일 수 있는 컴파일러(언어 번역기)가 같이 발전된다.
가상머신
한 번의 컴파일로 여러대의 CPU가 실행되도록하자는 의미에서 탄생되었다.
프로그램 구성 단위(계층구조)
Solution
프로젝트(Assembly)
CSharp File(.CS)
Class
Method(Function)
"." 연산자로 하위 객체에 접근
#4 프로그램 구조
프로젝트
- 프로젝트는 하나 이상의 .cs 파일로 구성됨
- 프로젝트를 컴파일한 결과물은 크게 두 가지 형태로 구분
- Main() 함수를 가지고 있는 프로젝트는 .EXE 파일로 결과를 생성
- Main() 함수가 없는 프로젝트는 .DLL 파일로 라이브러리 파일을 생성
- .EXE와 .DLL을 어셈블리라고 칭함
클래스
- 실세계에 존재하는 사물 또는 개념을 모델링(abstraction)한 것
- 클래스를 C#에서는 타입(Type)이라고 함
- 선언부
인스턴스
- 클래스가 타입으로 사용되어 프로그램에서 실행 할 수 있도록 준비된 상태
- 실체(실존하는 객체)를 인스턴스라고 함
- 실행부
클래스 선언
- 클래스 선언
접근제한자 class 클래스_명
{
속성 정의; // 프로퍼티(Property)
행위 정의; // 메서드(Method)
}
- 클래스는 하나의 .cs 파일에 하나 이상 선언 할 수 있음
- 하나의 .cs 파일에 하나의 클래스를 정의하는 것이 유지보수를 고려 할 때 바람직함.
- 하나의 클래스 밑에 여러개의 메서드를 정의 할 수 있다.
Decompile?
메서드 선언
- 메서드가 값을 반환하지 않는 경우
접근제한자 void 메서드명([타입명][매개변수명],...)
{
[return;]
}
- 메서드가 값을 반환하는 경우
접근제한자 반환타입 메서드명([타입명][매개변수명],...)
{
return 반환타입;
}
메서드 역할
- 모든 실행문(명령문)은 메서드에서만 실행 가능
- 객체의 로직을 명령문으로 구현
- 함수, 서브루틴, 프로시저 라고도 불림(C언어 등)
- 메서드는 다른 메서드에서 호출되는 형식으로 사용됨
- 메서드는 C언어와 동일하게 재사용됨
- 다른 클래스에 있는 메서드 호출은 클래스_인스턴스_변수.메서드명(파라미터) 방식으로 호출
- 같은 클래스에 있는 메서드는 메서드_명(파라미터)으로 호출