SlideShare a Scribd company logo
C# 고급 문법 Part 2
OOPARTS C++ & C# STUDY
오늘의 목표
namespace를 알아보아요.
delegate를 알아보아요.
무명 메소드를 알아보아요.
람다식을 알아보아요.
이벤트를 알아보아요.
partial을 알아보아요.
generic을 알아보아요.
dynamic과 var에 대해 알아보아요
Namespace
이름 공간을 알아보아요.
using에 대해 알아보아요.
Namespace
✓ .NET Framework엔 수많은 클래스/구조체가 있어요.
(.NET 4.0 기준 약 11,000개의 클래스가 있대요)
✓ 클래스/구조체가 너무 많아 이름이 겹치는 경우가 생길 수 있어요.
(실제로 System.Drawing.Point와 System.Windows.Point가 겹쳐요)
✓ Namespace를 사용한다면 이런 이름 충돌을 줄일 수 있어요.
namespace 사용법은 이미 자주 보았어요.
namespace 키워드와 함께 이름 공간의
이름만 적어주면 돼요
namespace 안에 다른 namespace를
넣을 수도 있어요.
혹은 이런 식으로 할 수도 있어요.
앞에 봤던 거와 동치의 표현이에요.
using은 사용할 namespace를
지정해주는 거예요.
사실 Console 클래스는 System
namespace에 들어있어요.
따라서 using을 쓰지 않는다면 이런 식으로
네임스페이스를 모두 밝혀 적어야 해요.
Delegate Delegate에 대해 알아보아요.
Delegate
✓ C의 함수 포인터와 비슷한 개념이에요.
✓ 인자에 메소드/함수를 넣고 싶을 때 주로 쓰여요.
✓ delegate 키워드를 이용해 만들 수 있어요.
int 두 개를 인자로 받고, int를 반환하는
함수나 메소드를 담을 수 있는 delegate를
선언했어요.
Addition은 int 두 개를 인자로 받고,
int를 반환하는 메소드예요.
이렇게 메소드를 변수에 담을 수 있어요.
이렇게 해도 돼요
호출은 늘 하던 대로 하면 돼요.
이번엔 int 두 개를 인자로 받고, bool을 반환하는 함수나
메소드를 담을 수 있는 delegate를 선언했어요.
delegate를 이용해 인자로 메소드나 함수를 받을 수 있어요.
넘겨줄 땐 그냥 넘겨주면 돼요.
물론 이렇게 해도 돼요.
Anonymous
Method
익명 메소드에 대해 알아보아요.
Anonymous Method
✓ 메소드가 일회용이고 간단할 때, 별도의 메소드를 만들지 않기 위해 쓰여요.
delegate 키워드를 이용해 만들어요.
반환 값은 적지 않고, 인자만 적어주면 돼요.
이 때만 쓰고 버릴 거기 때문에
이렇게 무명 메소드로 하는 게 깔끔해요.
대입 연산 또한 돼요.
Lambda
Expression
람다식에 대해 알아보아요.
Lambda Expression
✓ 익명 메소드보다 조금 더 진보한 버전이에요.
✓ 익명 메소드와 마찬가지로 익명 함수/메소드를 표현하기 위한 방법이에요.
✓ (인자) => { 블록 }; 의 형식으로 사용해요.
인자가 없는 람다식 예시예요.
인자가 없으면 빈 칸으로 놔두면 돼요.
인자를 받고 싶을 땐 데이터 타입을 하지 않고
인자 이름만 써도 돼요.
물론 명시하고 싶으면 명시해도 돼요.
아까 전 예시 코드를 람다식을 이용해 구현할 수도 있어요.
Event 이벤트에 대해 알아보아요.
Event
✓ 특정 상태가 어떤 일이 일어났는지를 외부에 알리는데 이용돼요.
✓ delegate 변수와는 다르게 클래스 외부에선 호출이 불가능해요.
✓ += 연산자로 이벤트 핸들러 추가를, -= 연산자로 이벤트 핸들러 제거를 해요.
✓ 이벤트가 발생되면 모든 이벤트 핸들러를 호출해요.
delegate 필드 선언하는 것에 event 키워드만 붙여주면 돼요.
+= 연산으로 이벤트 핸들러를 추가해줄 수 있어요.
호출은 늘 하던 것 처럼 하면 돼요.
대입 연산을 수행하면 이전의 이벤트 핸들러는 지워져요.
delegate 필드 foo는 클래스 외부에서 호출이 가능해요.
하지만, 이벤트인 bar는 클래스 외부에서 호출할 수 없어요.
Partial partial에 대해 알아보아요.
Partial
✓ 클래스, 구조체, 인터페이스를 쪼개서 만들 수 있어요.
✓ 한 개의 클래스를 여러 명이 동시에 제작할 수 있게 돼요.
class 앞에 partial 키워드를 붙여주면 돼요.
partial 키워드를 붙임으로써 하나의 클래스를
둘 이상으로 나누어 작업할 수 있어요.
당연히 같은 클래스이니까 M1과 M2가 동시에
뜨는 걸 볼 수 있어요.
Generic generic에 대해 알아보아요.
Generic
✓ 데이터 타입을 확정하지 않고 사용자가 타입을 정하도록 할 수 있어요.
✓ 예를 들어 두 값을 받아 더해주는 메소드를 만들 때 double 버전, int 버전을 따로 만드는 건
비효율적이에요.
✓ 이런 상황에서 한 번에 두 타입을 지원할 수 있도록 할 수 있어요.
<T> 라 적어주어 generic 클래스를 만들 거라고 알려줘야 해요.
T는 사용자가 정해줄 데이터 타입이기 때문에
T를 데이터 타입인 것처럼 쓰면 돼요.
요 친구는 int 버전 MyStack이 된 거예요.
요 친구는 string 버전 MyStack이 된 거예요.
위에서 데이터 타입을 정했기 때문에
이젠 데이터 타입을 써줄 필요가 없어요.
클래스 전체가 아닌 일부 메소드만
generic하게 만들 수도 있어요.
복수의 데이터 타입을 받고 싶을 땐
콤마로 구분해주면 돼요.
데이터 타입에 제약을 걸어줄 수도 있어요.
where T : 제약 조건 의 형식으로 하면 돼요.
Int는 대표적인 구조체예요.
따라서 제약조건을 만족하지 못하므로 오류가 나는 걸 볼 수 있어요.
여러 타입에 대해 각각 제약 조건을 걸어주고 싶다면
이렇게 하면 돼요.
자료구조 관련 클래스
✓ System.Collections.Generic 네임스페이스에 정의돼있어요.
✓ List<T>, Dictionary<T>, LinkedList<T> 등이 있어요.
✓ 사용법은 구글에 검색해서 알아보는 걸 추천해요. (양이 너무 많아요…)
Dynamic
vs
Var
dynamic에 대해 알아보아요.
var에 대해 알아보아요.
var 키워드를 사용하면 컴파일러가 알아서 타입을 결정해줘요.
하지만 한 번 결정되면 바꿀 수 없어요.
dynamic을 쓰면 런타임에 데이터 타입이 결정돼요.
따라서 dynamic을 쓰면 데이터 타입을 바꿀 수 있어요.
foreach에서 유용하게 쓸 수 있어요.

More Related Content

PDF
게임제작개론: #1 게임 구성 요소의 이해
PDF
C# 기초 문법 part 2
DOCX
The Art Of Readable Code.
PPTX
이펙티브 C++ 789 공부
PPT
Data Structure 4
PDF
C# 고급 문법 part 1
PDF
델파이 코딩 스타일과 아키텍처
PPTX
Effective c++ 4
게임제작개론: #1 게임 구성 요소의 이해
C# 기초 문법 part 2
The Art Of Readable Code.
이펙티브 C++ 789 공부
Data Structure 4
C# 고급 문법 part 1
델파이 코딩 스타일과 아키텍처
Effective c++ 4

Similar to C# 고급 문법 part 2 (20)

PPTX
[HaU] 신입 기술 면접 준비 java
DOCX
The art of readable code _ Part I
PDF
2014-15 Intermediate C++ Study #7
PDF
M5 6 1
PDF
안드로이드기초
PPTX
C# 세미나 12회차
PDF
C# 기초 문법 part 1
PDF
읽기 좋은 코드가 좋은코드다
PDF
Effective c++ chapter7_8_9_dcshin
PDF
Template at c++
PDF
The art of readable code ch4 ch8
PPTX
Clean code(03)
PPTX
Programming java day2
PPTX
[아꿈사] The C++ Programming Language 13장 템플릿
PPTX
이펙티브 C++ (7~9)
PPTX
Clean code(02)
PDF
객체지향 단어가 의미하는 것
PPTX
Google c++codingconvention
PPTX
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
PDF
Java(3/4)
[HaU] 신입 기술 면접 준비 java
The art of readable code _ Part I
2014-15 Intermediate C++ Study #7
M5 6 1
안드로이드기초
C# 세미나 12회차
C# 기초 문법 part 1
읽기 좋은 코드가 좋은코드다
Effective c++ chapter7_8_9_dcshin
Template at c++
The art of readable code ch4 ch8
Clean code(03)
Programming java day2
[아꿈사] The C++ Programming Language 13장 템플릿
이펙티브 C++ (7~9)
Clean code(02)
객체지향 단어가 의미하는 것
Google c++codingconvention
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
Java(3/4)
Ad

C# 고급 문법 part 2