윈도우즈프로그래밍#2

LeeMir, 04 March 2021

C# 프로그래밍 개요


C#
  • MS사에서 만듦
  • 자바의 단점을 보완
    • 실행 방법 : 자바 - 인터프리테이션, C# - 중간 언어로 컴파일 - Common Language Runtime이 중간 언어를 Interpret
    • 자바에 비해 실행이 느릴 수 있으나, 다양한 플랫폼에서 실행시키기 좋은 방법이다.
  • .NET에 최적화된 언어
  • 컴포넌트 지향 프로그래밍 언어
C# 특징
  • 객체지향 언어 : 자료 추상화
  • 델리게이트와 이벤트
  • 멀티스레드, 예외처리
  • 연산자 중복, 제네릭
C 계열의 언어
  • C++와 자바로부터 영향을 받았음
    • C : 연산자와 문장 등 기본적인 언어의 기능
    • C++ : 객체지향 속성, 연산자 중복, 제네릭(Generic)
    • 자바 : 예외처리와 스레드
자료형
  • 값형(value type)
    • 정수형
      • signed - sbyte, short, int , long
      • unsigned - byte, ushort, uint, ulong
    • 실수형
      • float, double, decimal
  • 참조형(reference type)
    • 객체
    • 원래 객체지향에서는 값형도 객체로 만들어야 하나, 너무 자주 쓰면 효율성이 떨어져 값형으로 따로 만들었다.
연산자
  • 표준 C 언어와 유사
  • 형 검사 연산자(type testing operator)
    • is - 호환 가능한지 검사
    • as - 지정한 형을 변환
배열형
  • 같은 형을 갖는 여러 개의 값을 저장할 수 있는 자료구조
  • int[] vector;
  • short[,] matrix;
  • long[][] arrayOfArray;
  • object[] myArray1, myArray2;
배열 객체 생성
  • new 연산자
  • vector = new int[100];
  • matrix = new short[10, 100];
  • myArray1 = new Point[3];
문자열(String)
  • C#에서 스트링은 객체
  • System.String 클래스의 객체
  • C#의 String 형은 String 클래스의 alias

  • 초기화
    • string s = "Hello";
    • string s = new string("Hello");
    • 후자처럼 써야하나, 전자로 축약해서 편하게 쓸 수 있다.
  • 스트링 연결
    • ’+’ 연산자 : concatenation operator
    • string s = "Hello"; s+="World"; => s: Hello World
클래스
  • 클래스 : 객체를 만들기 위한 청사진
  • 클래스의 구성 - 클래스 멤버
    • 필드 계통 - 상수 정의, 필드, 이벤트
    • 메소드 계통 - 메소드, 생성자, 소멸자, 프로퍼티, 인덱서, 연산자 중복
  • 클래스 설계 예제
class CoffeeMaker {
	public bool onState;
	public void StartCoffeeMaker() {
		if(onState == true)
			Console.WriteLine("The CoffeeMaker is already on");
		else
			onState = true;
		Console.WriteLine("The CoffeeMaker is now on");
	}
}
  • A라는 CoffeeMaker와 B라는 CoffeeMake 객체를 만들어 A.StartCoffeeMaker() B.StartCoffeeMaker()를 할 수 있다.
    • onState가 필드이고, StartCoffeeMaker()가 메소드인데, 보통 필드는 private으로 선언하고 메소드는 public으로 선언한다.
프로퍼티
  • 클래스의 private 필드를 형식적으로 다루는 일종의 메소드
  • 값을 지정하는 set 접근자와 값을 참조하는get 접근자로 구성
  • 필드처럼 사용되지만, 메소드처럼 동작
  • 배정문(‘=’ 연산자)의 왼쪽에서 사용되면 set 접근자 호출, 오른쪽에서 사용되면 get 접근자 호출
  • 사실 필드를 public으로 선언하면 되지만, 객체지향의 기본 철학으로 필드는 private으로 선언하고 외부에서는 메소드로 접근해야하므로 생긴 개념이다.
연산자 중복
  • 시스템에서 제공한 연산자를 재정의하는 것
델리게이트
  • 델리게이트 : 메소드 참조 기법(메소드 포인터)
  • 델리게이트 프로그래밍 순서
    • 델리게이트 정의(델리게이트 형태와 연결될 메소드의 형태가 일치해야 함)
    • 메소드 정의
    • 델리게이트 객체 생성
    • 델리게이트 객체에 메소드 연결
    • 델리게이트를 통해 메소드 호출
이벤트
  • 사용자 행동에 의해 발생하는 사건
  • 어떤 사건이 발생한 것을 위해 보내는 메시지로 간주
  • C#에서는 델리게이트를 이용하여 이벤트를 처리
  • 이벤트 프로그래밍 순서
    • 이벤트 처리기의 형태와 일치하는 델리게이트를 정의
    • 델리게이트를 이용하여 이벤트를 선언
    • 이벤트 처리기를 작성
    • 이벤트에 이벤트 처리기 등록
    • 이벤트 발생
스레드
  • 순차 프로그램과 유사하게 시장, 실행, 종료의 순서를 가짐
  • 다른 함수들도 메인 함수와 병렬로 실행될 수 있게 스레드로 실행
  • 스래드 프로그래밍 순서
    • 스레드 몸체에 해당하는 메소드를 작성
    • 작성된 메소드를 ThreadStart 델리게이트에 연결
    • 생성된 델리게이트를 이용하여 스레드 객체를 생성
    • 스레드의 실행을 시작(Start() 메소드를 호출)
제네릭
  • C++의 템플릿과 유사한 개념
  • 자료형을 매개변수로 가질 수 있는 개념
  • 제네릭을 사용하면 모든 데이터 타입을 커버할 수 있다
.NET 프레임워크
  • 마이크로소프트사가 개발한 프로그램 개발 환경
어셈블리와 역어셈블리
  • 어셈블리 과정
    • *.il => *.exe or *.dll
  • 역어셈블리 과정
    • *.exe or *.dll => *.il
  • IL 파일
    • 텍스트 형태로 된 중간 언어 파일
    • 컴파일된 코드를 확인할 수 있음
    • 더 나아가 디버깅하는 데 사용할 수 있음
공통 언어 런타임(Common Language Runtime)
  • .NET 프레임워크의 실행 시스템
  • 자바의 JVM과 동일한 기능을 담당
  • 실행 환경을 포함
    • 필수적인 실행 환경 3가지 컴포넌트
      • 메모리 관리기
      • 예외 처리기
      • 스레드 지원