SlideShare a Scribd company logo
1 of 62
Download to read offline
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

What's hot

비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6민태 김
 
[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수Keunhyun Oh
 
[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1Keunhyun Oh
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescriptHan JaeYeab
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2현찬 양
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinDong Chan Shin
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
C# 세미나 12회차
C# 세미나 12회차C# 세미나 12회차
C# 세미나 12회차Jeung_mh
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 

What's hot (20)

비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
 
Exception&log
Exception&logException&log
Exception&log
 
[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수
 
[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescript
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
Scala type args
Scala type argsScala type args
Scala type args
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
C# 세미나 12회차
C# 세미나 12회차C# 세미나 12회차
C# 세미나 12회차
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 

Similar to C# 고급 문법 part 2

Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4yonsei
 
델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처Devgear
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
The art of readable code _ Part I
The art of readable code _ Part IThe art of readable code _ Part I
The art of readable code _ Part I운용 최
 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7Chris Ohk
 
M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
안드로이드기초
안드로이드기초안드로이드기초
안드로이드기초hylo926
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinDong Chan Shin
 
Template at c++
Template at c++Template at c++
Template at c++Lusain Kim
 
The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8Ki Sung Bae
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)규열 김
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
Clean code(02)
Clean code(02)Clean code(02)
Clean code(02)규열 김
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
Google c++codingconvention
Google c++codingconventionGoogle c++codingconvention
Google c++codingconvention대영 노
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial
 

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

The Art Of Readable Code.
The Art Of Readable Code.The Art Of Readable Code.
The Art Of Readable Code.
 
Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4
 
델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처델파이 코딩 스타일과 아키텍처
델파이 코딩 스타일과 아키텍처
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
The art of readable code _ Part I
The art of readable code _ Part IThe art of readable code _ Part I
The art of readable code _ Part I
 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7
 
M5 6 1
M5 6 1M5 6 1
M5 6 1
 
안드로이드기초
안드로이드기초안드로이드기초
안드로이드기초
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
Template at c++
Template at c++Template at c++
Template at c++
 
The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
Clean code(02)
Clean code(02)Clean code(02)
Clean code(02)
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
Google c++codingconvention
Google c++codingconventionGoogle c++codingconvention
Google c++codingconvention
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
Java(3/4)
Java(3/4)Java(3/4)
Java(3/4)
 

Recently uploaded

실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 

Recently uploaded (8)

실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 

C# 고급 문법 part 2