37
C# LANGUAGE - 8 GROW Common Study

C# language 8

  • Upload
    -

  • View
    59

  • Download
    3

Embed Size (px)

Citation preview

Page 1: C# language   8

C# LANGUAGE - 8GROW Common Study

Page 2: C# language   8

CONTENTS Generic Programming Try-Catch-Finally Event Namespace Using Attribute Extern Method XML Comment Var/Dynamic variables Anonymous Type

Page 3: C# language   8

GENERICPROGRAMMING

GROW Common Study

Page 4: C# language   8

GENERIC PROGRAMMING Meta Programming

개발자가 직접 코드를 작성하지 않아도 기존의 코드를 기반으로 자동으로 코드를 생성해주는 프로그래밍 기법 예 ) 서버 - 사이드 웹 프로그래밍 , C++ 템플릿 , 제네릭

Generic Programming 메타 프로그래밍 기법의 한 종류 C++ 템플릿과 유사하나 제네릭은 실행 중에 코드를 생성

C++ 템플릿은 컴파일 타임에 코드를 생성함

Page 5: C# language   8

GENERIC PROGRAMMING 제네릭 정의의 사용 가능 범위

사용자 정의 자료형 클래스 , 구조체 , 인터페이스

메서드

정의 문법

Page 6: C# language   8

GENERIC PROGRAMMING 제네릭을 이용한 스택 구현

Page 7: C# language   8

GENERIC PROGRAMMING 제네릭 타입 지정

제네릭 매개변수에 넣을 수 있는 데이터 타입의 조건을 지정할 수 있다 예 1) 이 제네릭 메서드에는 구조체 데이터만 들어와야 한다 예 2) 이 제네릭 클래스에는 IDisposable 을 상속받은 객체만 들어와야 한다

Page 8: C# language   8

GENERIC PROGRAMMING 제네릭 타입 지정 예제

Page 9: C# language   8

TRY-CATCH-FINALLYGROW Common Study

Page 10: C# language   8

TRY-CATCH-FINALLY try-catch-finally

효과적인 예외 처리를 위해서 사용하는 구문 throw 로 던져진 예외를 catch 에서 받아서 처리한다

throw 로 던진 예외를 받을 catch 가 없다면 프로그램은 종료된다 throw 가 발생하는 즉시 해당 코드 아래의 코드는 무시되고 catch로 넘어가는 구조이다

throw 로 던지는 예외는 대부분 Exception 을 상속받아 구현된 클래스의 객체이다

Page 11: C# language   8

TRY-CATCH-FINALLY 예외 처리

Page 12: C# language   8

EVENTGROW Common Study

Page 13: C# language   8

EVENT 이벤트

델리게이트 변수의 확장판 여러 개의 메서드를 한번에 담고 실행할 수 있다 이벤트에는 메서드를 대입하는 것이 아니라 추가 / 제거하는 것이다 델리게이트는 누구나 호출할 수 있지만 이벤트는 자기 자신만 호출할 수 있다 어떤 작업이 끝난 후 , 또는 시작하기 전에 호출하기 위해 사용하는 것이 보통이다

Page 14: C# language   8

EVENT event 예제

Page 15: C# language   8

NAMESPACEGROW Common Study

Page 16: C# language   8

NAMESPACE 네임스페이스

클래스 등을 용도에 따라 구분하기 위해 사용 네임스페이스에는 사용자 정의 자료형 (class, struct, enum 등 ) 과 서브 네임스페이스만 들어갈 수 있다 연결 연산자 (.) 을 이용해 서브 네임스페이스를 구분한다 Java 의 패키지와 비슷한 기능을 수행한다

Page 17: C# language   8

NAMESPACE 예제

Page 18: C# language   8

USINGGROW Common Study

Page 19: C# language   8

USING using

세 가지 용도가 있다 1) 해당 파일에서 사용할 네임스페이스의 미리 지정

1 번 용도는 여태껏 계속 사용해왔으므로 예제를 생략한다 2) 해당 파일에서 사용할 자료형의 이름 재정의

2 번 용도는 키워드 형태의 자료형 (bool, char 등 ) 은 재정의할 수 없으므로 원본 이름을 사용해야 한다 (System.Boolean, System.Char 등 ) 3) 한정된 범위 내에서만 객체를 사용하고 정리하는 코드 작성

3 번 용도는 해당 객체가 IDisposable 을 상속받아야 사용할 수 있다 using 을 잘 사용할 줄 알아야 코드 가독성이 높아진다

Page 20: C# language   8

USING 2 번 용도 예제

Page 21: C# language   8

USING 3 번 용도 예제

Page 22: C# language   8

ATTRIBUTEGROW Common Study

Page 23: C# language   8

ATTRIBUTE 특성

.NET Framework 의 Reflection 과 같이 사용되는 경우가 많은 문법이다 Reflection 은 문법이 아니라 코드 구조 모델이자 API 이기 때문에 다루지 않는다

Reflection 코드를 우리가 작성하지 않아도 사용할 수 있는 특성 들이 있다 Obsolete Conditional DllImport StructLayout Serializable

Page 24: C# language   8

ATTRIBUTE Conditional 예제

프로젝트를 각각 Debug 로 실행 , Release 로 실행을 해보면 차이가 느껴진다

Page 25: C# language   8

ATTRIBUTE Obsolete 예제

Page 26: C# language   8

EXTERN METHODGROW Common Study

Page 27: C# language   8

EXTERN METHOD 외부 메서드

C 또는 C++ 등으로 작성된 라이브러리 (DLL) 에서 메서드를 가져와 사용하는 기능 주로 Windows API, DirectX, OpenGL 등을 동적으로 가져와 사용한다 바로 전에 설명한 Attribute 도 반드시 같이 사용해야 한다 해당 라이브러리가 존재하지 않으면 외부 메서드 호출 시 오류가 발생한다

Page 28: C# language   8

EXTERN METHOD Windows API 를 이용한 화면 잠그기

Page 29: C# language   8

XML COMMENTGROW Common Study

Page 30: C# language   8

XML COMMENT XML 주석

코드의 문서화를 편하게 할 수 있도록 도와주는 Doxygen 주석과 비슷한 기능을 수행할 수 있다 일반 주석 : // 내용 범위 주석 : /* 내용 */ XML 주석 : /// 자동 완성 후 빈 칸 작성

Page 31: C# language   8

XML COMMENT 사용 방법

Page 32: C# language   8

VAR/DYNAMIC VARIABLES

GROW Common Study

Page 33: C# language   8

VAR/DYNAMIC VARIABLES var 변수

컴파일 타임에 자동으로 자료형이 정해지는 변수 지역 변수로만 사용할 수 있다 자료형이 미리 지정되기 때문에 인텔리센스 사용이 가능하다

dynamic 변수 런타임에 자료형이 정해지는 변수 덕 타이핑에 유용하다

덕 타이핑 : 두 개 이상의 객체가 서로 다른 클래스로 만들어졌어도 같은 이름의 메서드 또는 프로퍼티가 있다면 접근 가능한 방식 자료형이 매번 바뀌기 때문에 인텔리센스 사용이 불가능하다

Page 34: C# language   8

VAR/DYNAMIC VARIABLES 예제

Page 35: C# language   8

ANONYMOUS TYPEGROW Common Study

Page 36: C# language   8

ANONYMOUS TYPE 익명 타입

class 등을 명시적으로 정의하지 않고 정의와 동시에 객체를 생성하는 방법 임시적으로 사용할 객체를 만들 때 주로 사용한다 추후 코드 분석에 어려워지므로 잘 사용되지 않는다 dynamic 변수 또는 var 변수와 같이 사용된다

해당 메서드 범위를 벗어나는 경우 dynamic, 해당 메서드 내에서 사용이 끝나는 경우 var 를 사용 익명 타입은 프로퍼티만 담을 수 있다 익명 타입의 정의 방법과 비슷하게 일반 객체 초기화가 가능하기도 하다

객체 초기화가 편리해짐

Page 37: C# language   8

ANONYMOUS TYPE 예제