Zeropage 24기 ì‹ í˜•ì² í˜„ìž¬ 군휴학, ë‚´ë…„ 1ì›” 복학 ì˜ˆì • [[Tableofcontents]] == 개요 == * ì´ ë§Œí™”ë¥¼ 아시나요? Git The princess! - How to save the princess using 8 programming languages C# : You Give up and go to stackoverflow to have Jon Skeet rescue the princess == LINQ == * LINQ 란? -> Language INtgrated Query (통합 언어 쿼리) -> .Net Framework 3.5ì— ë„ìž…ëœ ê¸°ìˆ , C#ì—서는 3.0 ì—서 ë„ìž…. -> ì§€ì— ë°ì´í„° ì»¬ë ‰ì…˜/리모트 ë°ì´í„° ì»¬ë ‰ì…˜ì— ëŒ€í•œ 질ì˜ë¬¸ ìž‘ì„±ì´ ê°€ëŠ¥. 단순히 C#ì—ë§Œ 존재하는 ê²ƒì´ ì•„ë‹ˆë¼ .NETì— ì¡´ìž¬í•¨ * 퀴즈! ìˆ«ìž ì»¬ë ‰ì…˜ì—서 ì§ìˆ˜ë§Œ 골ë¼ì„œ, ì›ë³¸ê³¼ ì œê³± 수를 ì»¬ë ‰ì…˜ì— ë‹´ì•„ë´…ì‹œë‹¤. - ì¼ë°˜ì ì¸ ë°©ë²• : ì›ë³¸ìˆ˜/ì œê³±ìˆ˜ í´ëž˜ìФ 만들어 구현 - LINQ 질ì˜ë¥¼ 활용 : ì¼ë°˜ì ì¸ ë°©ë²•ë³´ë‹¤ 간단한 코드 ( ìžì„¸í•œê±´ 발표 ppt ì°¸ê³ ) - LINQ를 활용하면 grouping ì— íš¨ê³¼ì - ê°€ë…성, ìœ ì§€ë³´ìˆ˜í• ë•Œ ì¢‹ì•„ì§ - ì»¬ë ‰ì…˜ ì €ìž¥ì†Œ/ì¢…ë¥˜ì— ê´€ê³„ì—†ì´ ì½”ë“œì˜ ìž¬í™œìš© 가능 * 사실, LINQ 질ì˜ë¥¼ 수행하기 위해서는 다른 ê¸°ëŠ¥ë“¤ì´ ë§Žì´ í•„ìš”í•©ë‹ˆë‹¤. -> 암시ì í˜•ì‹ ì¶”ë¡ , 확장 메서드, ê°ì²´ 초기화 표현ì‹, 람다 í‘œí˜„ì‹ ë“± -> 대부분 C# 3.0ì— LINQ와 í•¨ê¼ ì¶”ê°€ == LINQ ì‚¬ìš©ì„ ìœ„í•œ 준비 == * ëžŒë‹¤í‘œí˜„ì‹ -> (매개변수 리스트) => { /* 함수 본문 */ } 형태로 사용. ì¡°ê±´ì— ë”°ë¼ íƒ€ìž…, 괄호, 중괄호 ìƒëžµ 가능 * 암시ì í˜•ì‹ ì¶”ë¡ -> 변수 ì •ì˜ ì‹œ, 타입 ì´ë¦„ ëŒ€ì‹ 'var' 키워드를 사용 * ìµëª…타입 ìµëª… íƒ€ìž…ì„ ì´ìš©í•˜ë©´, 중간 결과를 위한 íƒ€ìž…ì„ ì»´íŒŒì¼ëŸ¬ê°€ 만들수 있게 í• ìˆ˜ 있다. -> new{...} 형ì‹ìœ¼ë¡œ ìƒì„±, í´ëž˜ìФ 맴버를 'Name = Value' ì‹ìœ¼ë¡œ ì§€ì • -> 반드시 var 사용(íƒ€ìž…ëª…ì´ ì¡´ìž¬í•˜ì§€ 않기 때문ì—) * 확장 메서드 -> 확장 메서드를 사용하면, 타입 ì •ì˜ì— 대한 ì ‘ê·¼ ì—†ì´ë„ 타입 í™•ìž¥ì„ í• ìˆ˜ 있다. -> ì •ì í´ëž˜ìФ ë‚´ì—서 ì •ì 메서드로 ì •ì˜, 첫 ë§¤ê°œë³€ìˆ˜ì— í™•ìž¥ 타입 ì§€ì •. - 퀴즈! int íƒ€ìž…ì— ìˆ«ìžê°€ ì§ìˆ˜ì¸ì§€ 알아내시오. == ì§ˆì˜ ì—°ì‚°ìž == * LINQ를 통해 질ì˜ë¥¼ ìˆ˜í–‰í• ë•Œ, ë§Žì€ ì§ˆì˜ ì—°ì‚°ìžë¥¼ ì‚¬ìš©í• ìˆ˜ 있다. -> Enumerable í´ëž˜ìŠ¤ì˜ IEnumerable<T>ì˜ í™•ìž¥ ë©”ì„œë“œë¡œì¨ ì¡´ìž¬ -> ë§Žì€ ì§ˆì˜ ì—°ì‚°ìžë¥¼ 조합하면, ê±°ì˜ ëŒ€ë¶€ë¶„ì˜ ì§ˆì˜ë¬¸ì´ ìž‘ì„±ì´ ê°€ëŠ¥í•˜ë‹¤. * LINQ 질ì˜ë¥¼ 구성하는 ë‘가지 방법 - ìœ ì°½í•œ 구문(Fluent)ì„ ì‚¬ìš©í•˜ì—¬ 질ì˜ë¥¼ 구성한다. - ì§ˆì˜ í‘œí˜„ì‹ì„ 사용한다. -> ë‘가지 조합하여 ë§Œë“¤ìˆ˜ë„ ìžˆë‹¤. * ìœ ì°½í•œ 구문? - ì§ˆì˜ ì—°ì‚°ìžë¥¼ 메서드 ì²´ì¸ì„ 통해 엮어가며 호출하는 구문 * ì§ˆì˜ í‘œí˜„ì‹? -> SQL 구문과 비슷한 형태로, ì»¬ë ‰ì…˜ 질ì˜ë¥¼ ìˆ˜í–‰í• ìˆ˜ 있는 표현ì‹ì´ë‹¤. -> fromì ˆë¡œ 시작해서 ,select/group ì ˆë¡œ ë난다. * from, where, orderby, select, group, join 설명 * ê·¸ ì™¸ì˜ ì§ˆì˜ í‘œí˜„ì‹ì˜ 표현들 -> ì–´ë–¤ ì»¬ë ‰ì…˜ì—는 숫ìž, 다른 ì»¬ë ‰ì…˜ì—는 ëª¨ì–‘ì´ ìž‡ì„ ë•Œ, í”Œë ˆìž‰ 카드 ìŒì„ 만들어 봅시다. ì—°ì† ì§ˆì˜ í‘œí˜„ì‹ë„ í™œìš©í• ìˆ˜ 있다. let ì ˆì„ ì‚¬ìš©í•˜ë©´ 임시ì 으로 추가ì ì¸ ë²”ìœ„ 변수를 ë„ìž…í• ìˆ˜ 있다. == CodeForces를 LINQ로 풀어보ìž! == == LINQì˜ íŠ¹ì§• == * ë¬¸ì œ í’€ì´ë¥¼ 알 수 있는 ê¸°ì¡´ì˜ ë°©ë²•ê³¼ LINQì˜ ì°¨ì´ì ? -> (pptì°¸ê³ ) -> ë§Žì€ ê³³ì—서 지연 ì—°ì‚°ì´ ì´ë£¨ì–´ì§„다. (ì›í•œë‹¤ë©´ , 지연 ì—°ì‚°ì„ í•˜ì§€ 않ë„ë¡ í• ìˆ˜ 있다.) -> LINQì˜ ì§ˆì˜ ì—°ì‚°ìžëŠ” 쉽게 확장하는 ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤. * LINQì˜ ì§ˆì˜ ì—°ì‚°ìžëŠ” ë‘ ê°€ì§€ ìš©ë„로 ì“°ì¸ë‹¤. -> ì»¬ë ‰ì…˜ ìžìž¥ì†Œê°€ 로컬ì¸ê°€, 리모트ì¸ê°€? == ê³ ê¸‰ LINQ == * LINQ를 확장해볼까요? ~~아니요..~~ -> PLINQ : 기존 LINQ와 대부분 ë™ì¼í•˜ë‚˜, ì§ˆì˜ ìˆ˜í–‰ê³¼ ê²°ê³¼ 취합면ì—서 ë³‘ë ¬ì„±ì„ ì§€ì›. (예시 : 10억까지 소수 찾기) -> Rx : ê¸°ì¡´ì˜ ê´€ì°°ìž íŒ¨í„´ì„ í†µí•œ ì´ë²¤íЏ ì£¼ë„ íŒ¨ëŸ¬ë‹¤ìž„ì„ LINQ와 함께 확장시킨것. ì´ë²¤íЏ ìˆœì°¨ì—´ì— ëŒ€í•œ 질ì˜ì™€ 함께, ë™ì‹œì„±ì— ëŒ€í•´ì„œë„ ì§€ì› ê¸°ì¡´ì˜ ë°ì´í„° 모형(Pull)ì´ ì•„ë‹Œ 푸쉬모ë¸(Push) 사용 == ê²°ë¡ ~~?~~ == -> LINQ! LINQ를 씨ìž! -> ë¹„ë¡ LINQê°€ ëª¨ë“ ê³³ì— ìž˜ 맞는 ê²ƒì€ ì•„ë‹ˆì§€ë§Œ... -> ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì—는 ì»¬ë ‰ì…˜ê³¼ ê´€ë ¨ëœ ëª¨ë“ ë¬¸ì œì˜ í•´ê²° ì—´ì‡ ê°€ ë ê°€ëŠ¥ì„±ì´ ë†’ìŠµë‹ˆë‹¤. == ì§ˆì˜ ì‘답 == * Unity ì—ì„œë„ LINQ를 사용하나요? Answer : 사용 가능하나, ì´ì „ì— ë§í–ˆë“¯ì´ C# ë²„ì „ì´ ë‚®ê¸° ë•Œë¬¸ì— ì•ˆ 좋ì€ì¼ì´ ìƒê¸¸ìˆ˜ë„ 있습니다...