C# language 8
Transcript of C# language 8
C# LANGUAGE - 8GROW Common Study
CONTENTS Generic Programming Try-Catch-Finally Event Namespace Using Attribute Extern Method XML Comment Var/Dynamic variables Anonymous Type
GENERICPROGRAMMING
GROW Common Study
GENERIC PROGRAMMING Meta Programming
개발자가 직접 코드를 작성하지 않아도 기존의 코드를 기반으로 자동으로 코드를 생성해주는 프로그래밍 기법 예 ) 서버 - 사이드 웹 프로그래밍 , C++ 템플릿 , 제네릭
Generic Programming 메타 프로그래밍 기법의 한 종류 C++ 템플릿과 유사하나 제네릭은 실행 중에 코드를 생성
C++ 템플릿은 컴파일 타임에 코드를 생성함
GENERIC PROGRAMMING 제네릭 정의의 사용 가능 범위
사용자 정의 자료형 클래스 , 구조체 , 인터페이스
메서드
정의 문법
GENERIC PROGRAMMING 제네릭을 이용한 스택 구현
GENERIC PROGRAMMING 제네릭 타입 지정
제네릭 매개변수에 넣을 수 있는 데이터 타입의 조건을 지정할 수 있다 예 1) 이 제네릭 메서드에는 구조체 데이터만 들어와야 한다 예 2) 이 제네릭 클래스에는 IDisposable 을 상속받은 객체만 들어와야 한다
GENERIC PROGRAMMING 제네릭 타입 지정 예제
TRY-CATCH-FINALLYGROW Common Study
TRY-CATCH-FINALLY try-catch-finally
효과적인 예외 처리를 위해서 사용하는 구문 throw 로 던져진 예외를 catch 에서 받아서 처리한다
throw 로 던진 예외를 받을 catch 가 없다면 프로그램은 종료된다 throw 가 발생하는 즉시 해당 코드 아래의 코드는 무시되고 catch로 넘어가는 구조이다
throw 로 던지는 예외는 대부분 Exception 을 상속받아 구현된 클래스의 객체이다
TRY-CATCH-FINALLY 예외 처리
EVENTGROW Common Study
EVENT 이벤트
델리게이트 변수의 확장판 여러 개의 메서드를 한번에 담고 실행할 수 있다 이벤트에는 메서드를 대입하는 것이 아니라 추가 / 제거하는 것이다 델리게이트는 누구나 호출할 수 있지만 이벤트는 자기 자신만 호출할 수 있다 어떤 작업이 끝난 후 , 또는 시작하기 전에 호출하기 위해 사용하는 것이 보통이다
EVENT event 예제
NAMESPACEGROW Common Study
NAMESPACE 네임스페이스
클래스 등을 용도에 따라 구분하기 위해 사용 네임스페이스에는 사용자 정의 자료형 (class, struct, enum 등 ) 과 서브 네임스페이스만 들어갈 수 있다 연결 연산자 (.) 을 이용해 서브 네임스페이스를 구분한다 Java 의 패키지와 비슷한 기능을 수행한다
NAMESPACE 예제
USINGGROW Common Study
USING using
세 가지 용도가 있다 1) 해당 파일에서 사용할 네임스페이스의 미리 지정
1 번 용도는 여태껏 계속 사용해왔으므로 예제를 생략한다 2) 해당 파일에서 사용할 자료형의 이름 재정의
2 번 용도는 키워드 형태의 자료형 (bool, char 등 ) 은 재정의할 수 없으므로 원본 이름을 사용해야 한다 (System.Boolean, System.Char 등 ) 3) 한정된 범위 내에서만 객체를 사용하고 정리하는 코드 작성
3 번 용도는 해당 객체가 IDisposable 을 상속받아야 사용할 수 있다 using 을 잘 사용할 줄 알아야 코드 가독성이 높아진다
USING 2 번 용도 예제
USING 3 번 용도 예제
ATTRIBUTEGROW Common Study
ATTRIBUTE 특성
.NET Framework 의 Reflection 과 같이 사용되는 경우가 많은 문법이다 Reflection 은 문법이 아니라 코드 구조 모델이자 API 이기 때문에 다루지 않는다
Reflection 코드를 우리가 작성하지 않아도 사용할 수 있는 특성 들이 있다 Obsolete Conditional DllImport StructLayout Serializable
ATTRIBUTE Conditional 예제
프로젝트를 각각 Debug 로 실행 , Release 로 실행을 해보면 차이가 느껴진다
ATTRIBUTE Obsolete 예제
EXTERN METHODGROW Common Study
EXTERN METHOD 외부 메서드
C 또는 C++ 등으로 작성된 라이브러리 (DLL) 에서 메서드를 가져와 사용하는 기능 주로 Windows API, DirectX, OpenGL 등을 동적으로 가져와 사용한다 바로 전에 설명한 Attribute 도 반드시 같이 사용해야 한다 해당 라이브러리가 존재하지 않으면 외부 메서드 호출 시 오류가 발생한다
EXTERN METHOD Windows API 를 이용한 화면 잠그기
XML COMMENTGROW Common Study
XML COMMENT XML 주석
코드의 문서화를 편하게 할 수 있도록 도와주는 Doxygen 주석과 비슷한 기능을 수행할 수 있다 일반 주석 : // 내용 범위 주석 : /* 내용 */ XML 주석 : /// 자동 완성 후 빈 칸 작성
XML COMMENT 사용 방법
VAR/DYNAMIC VARIABLES
GROW Common Study
VAR/DYNAMIC VARIABLES var 변수
컴파일 타임에 자동으로 자료형이 정해지는 변수 지역 변수로만 사용할 수 있다 자료형이 미리 지정되기 때문에 인텔리센스 사용이 가능하다
dynamic 변수 런타임에 자료형이 정해지는 변수 덕 타이핑에 유용하다
덕 타이핑 : 두 개 이상의 객체가 서로 다른 클래스로 만들어졌어도 같은 이름의 메서드 또는 프로퍼티가 있다면 접근 가능한 방식 자료형이 매번 바뀌기 때문에 인텔리센스 사용이 불가능하다
VAR/DYNAMIC VARIABLES 예제
ANONYMOUS TYPEGROW Common Study
ANONYMOUS TYPE 익명 타입
class 등을 명시적으로 정의하지 않고 정의와 동시에 객체를 생성하는 방법 임시적으로 사용할 객체를 만들 때 주로 사용한다 추후 코드 분석에 어려워지므로 잘 사용되지 않는다 dynamic 변수 또는 var 변수와 같이 사용된다
해당 메서드 범위를 벗어나는 경우 dynamic, 해당 메서드 내에서 사용이 끝나는 경우 var 를 사용 익명 타입은 프로퍼티만 담을 수 있다 익명 타입의 정의 방법과 비슷하게 일반 객체 초기화가 가능하기도 하다
객체 초기화가 편리해짐
ANONYMOUS TYPE 예제