csharp 개념 요약

2022년 07월 15일
제작기간 2022년 07월 14일 ~ 07월 15일
태그 csharp

🔗 Microsoft .Net Tour of C#

Intro

  • object-oriented 언어
  • component-oriented 언어
  • GC가 접근불가한 unused 객체로 메모리가 가득찬 경우, 자동으로 호출됨
  • nullable type이 비할당 객체에 대한 참조를 대신함
  • Exception handling이 error detection과 recovery를 지원
  • Lambda expression이 functional programming 기술을 지원
  • LINQ 문법이 모든 소스에 대한 data에 common pattern을 만듦
  • unifed type system이 모든 primitive 타입에 대해 object라는 root type을 지정
  • asynchronous operation으로 분산 시스템 제공
  • reference typevalue type으로 값을 다룰 수 있음
  • Generic 지원, Iterator 지원

.Net Architecture

  • C# Program은 .Net 위에서 실행됨
  • 가상의 실행 시스템을 CLR(Common Language Runtime)이라 부름
  • CLR은 CLI(Common Language Infrastructure)의 구현임
  • C#은 IL(Intermediate Language: CLI를 준수함)로 compile 됨
  • IL과 resources(bitmap, string…)는 assembly로 저장됨 -> (.dll)
    • assembly는 manifest(version, culture, assembly types)를 포함

C# 프로그램 실행

  1. Assembly가 CLR에 로드
  2. CLR이 JIT compilation(IL을 native 기계어로 변환) 실행
  • JIT 컴파일: 프로그램을 실행하는 시점에 기계어로 번역함
  • CLR이 GC, exception handling, 자원 관리를 지원
  • CLR이 실행하는 code는 managed code라고 칭함
  • unmanaged code는 특정 플랫폼을 대상으로 하는 native 기계어로 compile

Types and Variables

  • Value type: 직접적으로 data를 포함 {simple, enum, struct, nullable, tuple}
  • Reference type: data의 참조를 포함
  • Identifier: 변할 수 있는 이름

user-definable

class, struct, interface, enum, delegate, tuple이 있다.

  1. Record
    • compile-synthesized member
    • 관련된 행동이 없으면 우선적으로 고려할 수 있음
  2. Class
    • fields(data member), function members (method, property …)를 정의
    • 단일 상속, 다형성(파생 class가 base class를 확장하고 전문화할 수 있음) 지원
  3. Struct
    • class와 유사하지만, value type으로, heap allocation이 필요하지 않음
    • user-specified 상속이 불가 (암묵적으로 object를 상속함)
  4. Interface
    • public member의 이름의 집합
    • class와 struct는 interface를 implement 함
    • interface는 복수의 interface를 상속할 수 있음
  5. Delegate
    • method의 참조를 return type, 특정 parameter list와 함께 표현
    • method를 할당된 변수처럼 취급하고, parameter로 넘길 수 있음

Others

  1. array
    • int[]: int의 1차원 배열
    • int[,]: int의 2차원 배열
    • int[][]: int[]의 1차원 배열
  2. nullable
    • non-nullable type T에 대해, T?는 null을 취급할 수 있는 타입임
    • ex) int?는 32-bit integer를 가지거나 null임
  3. object
    • 모든 type은 object로 다룰 수 있음
    • 모든 reference type은 object로 casting할 수 있고, 모든 value type은 obejct로 boxing 할 수 있음
    • Boxing:값은 참조 타입의 인스턴스로 복사됨
    • Unboxing: 값 타입으로 casting될 수 있는 참조타입을 값 타입으로 casting 함

모든 변수는 어떤 값이 저장될 수 있는지 결정하는 방식에 따라 구분할 수 있음

  • Non-nullable type: 정확한 type에 대한 값
  • nullable type: null 혹은 정확한 type에 대한 값
  • object: null 참조, 참조 타입에 대한 오브젝트의 참조, 값타입이 boxing된 값에 대한 참조
  • class type: null 참조, class type의 instance에 대한 참조, 해당 class 파생 type의 instance에 대한 참조
  • interface type: null 참조, interface를 구현하는 instance에 대한 참조, 해당 interface를 구현한 값 type의 boxing된 값에 대한 참조
  • array type: null 참조, array type에 대한 instance의 참조, compatible array type의 instance에 대한 참조
  • delegate type: null 참조, 호환되는 delegate type의 instance에 대한 참조

Program Structure

  • Programs가 member를 포함하고, namespace 안에 구성될 수 있는 types를 선언함
  • types: classes, structs, interfaces …
  • members: fields, methods, properties, events …
  • C# Program이 compile 되었을 때, 물리적으로 assemblies 안에 패키지 됨
  • Assemblies는 일반적으로, .exe.dll 확장자를 사용
    • Application이나 Library를 구현하는 여부에 따라 결정