윈도우즈프로그래밍#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가지 컴포넌트
- 메모리 관리기
- 예외 처리기
- 스레드 지원
- 필수적인 실행 환경 3가지 컴포넌트