ZAION/C#

[C#][인프런]C# 프로그래밍 기초(1~3강)

우기37 2024. 1. 8. 16:54

## 목차

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언어와 동일하게 재사용됨

- 다른 클래스에 있는 메서드 호출은 클래스_인스턴스_변수.메서드명(파라미터) 방식으로 호출

- 같은 클래스에 있는 메서드는 메서드_명(파라미터)으로 호출