[[TableOfContents]] == 개요 == * 시작합니다! == ì°¸ê°€ìž == * [ì‹ í˜•ì² ], [ì´ìŠ¹í˜„], [í™ì„±í˜„], [ë°•ì¸ì„œ], [ê¹€ìƒë ¬], [ìœ ì„±í˜„], [강민승] == ì§„í–‰ 시간 == * ì§„í–‰ ì˜ˆì • == ì§„í–‰ ì˜ˆì • ë‚´ìš© == * 다소 ì¤‘ìš”í•˜ë‹¤ê³ ìƒê°ëœ ë‚´ìš©ì€ [[HTML(<font color="#9933ff"><b>ë³´ë¼ìƒ‰ 볼드(굵게)</b></font>)]] 처리하였습니다. * #1. ë‹·ë„· í”„ë ˆìž„ì›Œí¬ ì‚´íŽ´ë³´ê¸° * [[HTML(<font color="#9933ff"><b>ë‹·ë„· ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ê¸°ë³¸ 구조</b></font>)]] * [[HTML(<font color="#9933ff"><b>CLRê³¼ IL/MSIL(CIL)</b></font>)]] * ë‹·ë„· 호환 언어 * CTS와 CLS * 메타ë°ì´í„°, ë‹·ë„· ì‘ìš© 프로그램 ì†ì˜ 메타ë°ì´í„° * [[HTML(<font color="#9933ff"><b>어셈블리, 모듈</b></font>)]] * CLI와 CTS, CLI와 ë‹·ë„· í”„ë ˆìž„ì›Œí¬ * ë‹·ë„· í”„ë ˆìž„ì›Œí¬ êµ¬ì„± 요소 * 기존 윈ë„ìš° 프로그램과 ë‹·ë„· ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ëŒ€ì‘ ê´€ê³„ * 모노(Mono) í”„ë ˆìž„ì›Œí¬ * C#ê³¼ ë‹·ë„· í”„ë ˆìž„ì›Œí¬ * Naming Convention * #2. C#ì˜ íƒ€ìž…ê³¼ 문장(Statement), ë°°ì—´ * [[HTML(<font color="#9933ff"><b>ìžë£Œí˜•ê³¼ 기본 ìžë£Œí˜•</b></font>)]] * [[HTML(<font color="#9933ff"><b>C#ì—ì„œì˜ ì •ìˆ˜ 타입, 실수 타입, ë¬¸ìž íƒ€ìž…. ìƒìˆ˜</b></font>)]] * C#ì—ì„œì˜ ë³€ìˆ˜ 초기화 * C#ì—ì„œì˜ Escape Sequence * 형변환 * 예약어와 ì‹ë³„ìž * [[HTML(<font color="#9933ff"><b>ê°’ 형ì‹ê³¼ 참조 형ì‹</b></font>)]] * [[HTML(<font color="#9933ff"><b>ë°°ì—´, ë‹¤ì°¨ì› ë°°ì—´, 가변 ë°°ì—´</b></font>)]] * [[HTML(<font color="#9933ff"><b>논리 ì—°ì‚°ìž, 관계 ì—°ì‚°ìž, ì¡°ê±´ ì—°ì‚°ìž</b></font>)]] * [[HTML(<font color="#9933ff"><b>C#ì˜ ì¡°ê±´ë¬¸ê³¼ 반복문, ì 프문</b></font>)]] * 만약 ì‹œê°„ì´ ëœë‹¤ë©´ #3ê¹Œì§€ë„ ì˜ˆì •ì¤‘ìž…ë‹ˆë‹¤. == ì§„í–‰ == === ë‚´ìš© 요약 === * ìžê¸°ì†Œê°œ, 강사소개 ë° ê°ìž C#ì„ ë°°ìš°ê³ ì‹¶ì€ ì´ìœ ì— ëŒ€í•´ì„œ ë§í–ˆìŠµë‹ˆë‹¤. * ë‹¤ìŒ ì£¼ì—는 ê°•ì‚¬ë‹˜ì´ í›ˆë ¨ì„ ê°‘ë‹ˆë‹¤ => 휴강으로 ê²°ì • * C#ì„ ì“°ê¸°ìœ„í•´ì„œëŠ” .NET Frameworkê°€ 필요합니다. * .NET Framework는 ì¼ì¢…ì˜ Process Virtual Machine(ê°€ìƒë¨¸ì‹ ) 입니다. * C#í”„ë¡œê·¸ëž¨ì€ C#컴파ì¼ëŸ¬ì— ì˜í•´ ì¤‘ê°„ì— ì–´ë–¤íŒŒì¼(IL)로 바꼈다가 .NET Frameworkê°€ ëŒ€ì‹ ì‹¤í–‰í•´ì¤ë‹ˆë‹¤. * .NETì„ ê¹”ë©´ ìžë™ìœ¼ë¡œ CLR(Common Language Runtime)ì´ ì„¤ì¹˜ë©ë‹ˆë‹¤. 사실 C#소스를 컴파ì¼í•œë’¤ CLRì— ë˜ì ¸ì„œ 실행하는 구조입니다. * ì¤‘ê°„ì— ê±°ì³ê°€ëŠ” 파ì¼ì€ IL(Intermediate Language:중간언어)로 ìž‘ì„±ëœ íŒŒì¼ìž…니다. * 즉, C#컴파ì¼ëŸ¬ : C# Source -> IL ì´ê³ , ILASM.exe : IL -> 기계어로 바꿔ì¤ë‹ˆë‹¤. * ì¼ë°˜ì ì¸ exe와는 다르게 .NET exe(ë‹·ë„·ì‘용프로그램)는 CLR로ë”ê°€ í¬í•¨ë˜ì–´ 있습니다.(ìƒê°í•´ë³´ë©´ CLRì´ ì—†ìœ¼ë©´ í”„ë¡œê·¸ëž¨ì´ ì•ˆêµ´ëŸ¬ê°‘ë‹ˆë‹¤.) * .NET Compliant Language (.NET 호환언어) : ì–´ë–¤ ì–¸ì–´ë“ ì§€ IL코드로만 바꿀 수 있다면 CLRì—서 ìž‘ë™í•˜ì§€ 않ì„까? ë¼ëŠ” ìƒê°ì—서 IL코드로 바꿀 수 있는 언어. * 대표ì ì¸ .NET CLì˜ ê³µì‹ì ì¸ ì¢…ë¥˜ë¡œëŠ” C++/CLI, F#, VB.NET C# ë“±ì´ ìžˆìŠµë‹ˆë‹¤. (Ruby, Python, Lisp, COBOL ë“¤ë„ ë¹„ê³µì‹ì ìœ¼ë¡ ìì..) * ILì€ ë‹·ë„·ì—서는 CILì´ë¼ ë¶€ë¥´ê¸°ë„ í•˜ê³ , MSì—서는 MSILì´ë¼ê³ ë¶€ë¥´ê¸°ë„ í•©ë‹ˆë‹¤. * CTS(Common Type System, 공용타입시스템)ì€ .NET호환언어가 ì§€ì¼œì•¼í• ê·œì•½ìœ¼ë¡œ .NET호환 언어는 CTS를 넘어서서 êµ¬í˜„í• ìˆ˜ 없으며, ê¼ CTS를 ì „ë¶€ë‹¤ 구현해야 í• í•„ìš”ë„ ì—†ìŠµë‹ˆë‹¤. * CLS(Common Language Specification)ì€ CTS와는 다르게 .NET호환언어가 ê¼ êµ¬í˜„í•´ì•¼ë˜ëŠ” 규약입니다. * C#ì—서는 unsigned 를 ì§€ì›í•˜ì§€ë§Œ, 만약 다른 닷넷호환언어ì—서 unsigned를 ì§€ì›í•˜ì§€ 않는다면 ë¬¸ì œê°€ ìƒê¹ë‹ˆë‹¤.(쓸 수가 없습니다) * META data(메타ë°ì´í„°)는 ë°ì´í„°ë¥¼ 위한 ë°ì´í„°ë¡œì¨, 예를 들면 ê·¸ë¦¼ì˜ ì†ì„±ì„ ë‚˜íƒ€ë‚´ê³ ìžˆëŠ” ë°ì´í„°ë“¤ì´ 메타ë°ì´í„°ìž…니다. * ê·¸ë ‡ë‹¤ë©´, 프로그래ë°ì–¸ì–´ì—ì„œì˜ ë©”íƒ€ë°ì´í„°ëŠ” class, namespace 등등등.. ì–˜ë„¤ë“¤ì´ META data ëžë‹ˆë‹¤. (ìˆ˜ì •í•„ìš”..) * exe(dll)ì„ ë§Œë“¤ê²Œ ë˜ë©´ CLRì—서는 ìžê¸°ì„œìˆ ì ì¸ ë°ì´í„°(META data)ë¡œì¨ í”„ë¡œê·¸ëž¨ì˜ í•¨ìˆ˜, í´ëž˜ìŠ¤ë“¤ì˜ ëª©ë¡ì„ 기ë¡í•©ë‹ˆë‹¤. * Reflection ê¸°ìˆ ì„ í™œìš©í•˜ë©´ exe(dll)ì•ˆì— ì„œìˆ ëœ METAë°ì´í„°ë¥¼ ì½ì–´ 다른 exe(dll)ì˜ í•¨ìˆ˜ì™€ í´ëž˜ìŠ¤ë¥¼ ì‚¬ìš©í• ìˆ˜ 있습니다. * CLI(Common Language Infrastructure)는 MSê°€ ECMAì— ì œì¶œí•œ 표준형ì‹ìœ¼ë¡œ, CTSì •ì˜, 중간언어(IL), ë°”ì´ë„ˆë¦¬íŒŒì¼ë“¤ì´ 해당ë©ë‹ˆë‹¤. * ë”°ë¼ì„œ CLS는 CLI를 êµ¬í˜„í•˜ê³ ìžˆìœ¼ë©°, CLI를 구현한다면 .NETê³¼ 호환ë©ë‹ˆë‹¤. (ex)Mono는 CLIì˜ êµ¬í˜„ì²´ * 어셈블리(Assembly): .NETì—서는 exe(dll)ì„ ì–´ì…ˆë¸”ë¦¬ë¼ê³ 합니다. * 모듈(Module): í•˜ë‚˜ì˜ ì–´ì…ˆë¸”ë¦¬ë¥¼ ì—¬ëŸ¬ê°œì˜ ëª¨ë“ˆ(Module)(.netmodule)로 쪼갤 수 있습니다. 단, ì–´ì…ˆë¸”ë¦¬ì•ˆì— ì¡´ìž¬í•˜ëŠ” 모듈 중 하나는 반드시 다른 ëª¨ë“ˆë“¤ì˜ ìœ„ì¹˜ë¥¼ ê¸°ìˆ (ê¸°ëŠ¥ì€ ì—†ê³ , 단순히 위치를 ê¸°ìˆ í•¨)í•˜ê³ ìžˆì–´ì•¼ 하는ë°, ì´ ëª¨ë“ˆì„ ì–´ì…ˆë¸”ë¦¬(assembly)(.exe/.dll)ë¼ê³ ë„ í•©ë‹ˆë‹¤. ~~하지만 MSì—ì„œë„ ì§€ì›í•˜ì§€ 않습니다(ê°œë…ì ì¸ ë‚´ìš©)~~ * CLR(Common Language Runtime)ì—는 JIT(Just In Time)컴파ì¼ëŸ¬ì™€ GC(Garbage Collector)ê°€ 들어가있습니다. * JIT는 ILì„ í•œì¤„í•œì¤„ ì½ì–´ì„œ 실행시켜주는 컴파ì¼ëŸ¬ìž…니다(?) * .NET호환언어를 Managed(관리)언어ë¼ê³ ë„ í•©ë‹ˆë‹¤. * 기존 í”„ë¡œê·¸ëž¨ì— CLR loader를 넣어주면 .NET호환언어를 구ë™ì‹œí‚¬ 수 있는 í”„ë¡œê·¸ëž¨ì´ ë©ë‹ˆë‹¤. * IE(Internet Explorer)안ì—는 CLR loaderê°€ 들어가 있어서, .NET호환언어가 있으면 실행시킬 수 있습니다. * MSì—서는 CLR, BCL(Base Class Library, 표준ë¼ì´ë¸ŒëŸ¬ë¦¬), GAC(Global Assembly Cache)를 묶어서 '.NET Framework'ë¼ê³ ë°°í¬í•©ë‹ˆë‹¤. * GACì— ëŒ€í•œ ì„¤ëª…ì€ ì¶”ê°€í•´ì£¼ì„¸ìš” ã… ã… * C#ì€ .NET Frameworkì˜ ë°œì „ì— ë¹ ë¥´ê²Œ 대ì‘í•´ì¤ë‹ˆë‹¤. ----- * .NET Framework를 설치하면 기본ì 으로 CSC(C# Compiler)ê°€ 설치ë©ë‹ˆë‹¤. * 요즈ìŒì˜ MS는 CSC를 따로 ë°°í¬í•˜ë¯€ë¡œ C#6.0ì„ ì»´íŒŒì¼í•˜ë ¤ë©´ 설치해서 쓰세요. ~~하지만 VS를 쓴다면?~~ -- C#ì˜ íƒ€ìž… -- * 숫ìží˜• sbyte, byte, short, ushort, int, uint, long, ulong (사실 ì–˜ë„¤ë“¤ì€ System.SByte, System.Byte, System.Int16 ë“±ì„ ì¤„ì¸ ì˜ˆì•½ì–´ìž…ë‹ˆë‹¤.) int a = 10000000000; ì´ëŸ°ê±°í•˜ë©´ Compile Error 납니다. (C#ì€ Value typeê³¼ Reference typeì´ ë‚˜ëˆ ì ¸ìžˆìŠµë‹ˆë‹¤.) * 실수형 float, double, decimal(16ë°”ì´íЏ 실수) (ì–˜ë„¤ë“¤ë„ ë§ˆì°¬ê°€ì§€ë¡œ System.Float, System.Double, System.Decimal ë“±ì„ ì¤„ì¸ ì˜ˆì•½ì–´ìž…ë‹ˆë‹¤.) * 문ìží˜• char(4ë°”ì´íЏ), string (ì˜ˆë„¤ë“¤ë„ System.Char, System.Stringì„ ì¤„ì¸ ì˜ˆì•½ì–´ìž…ë‹ˆë‹¤.) char a = 'ë¹µ'; ( sizeof(a) = 4, ìœ ë‹ˆì½”ë“œì´ê¸° ë•Œë¬¸ì— ) string b = "Hello!"; ( b[3] => 'l' 처럼 ì§ì ‘ì ‘ê·¼ë„ ê°€ëŠ¥í•©ë‹ˆë‹¤. ) * char c = '\u2023' ê°™ì€ê²ƒë„ 가능 반대로 char \u2023 = 'c' ë„ ê°€ëŠ¥í•©ë‹ˆë‹¤. (char ë¹µ = 'ë¹µ' ë˜ë“¯ì´..) * char int = 'a'; // int는 예약어ë¼ì„œ 못쓰지만 char @int = 'a'; // ì´ë ‡ê²Œí•˜ë©´ 가능합니다. * string str = "\tHello World\n!"; Console.WriteLine(str); ì´ë¼ 하면 ì½˜ì†”ì— 'Hello World!"ë¼ê³ 뜨지만 string str = @"\tHello World\n!"; ì´ë ‡ê²Œ 하면 Escape Sequence를 따지지 ì•Šê³ ì½˜ì†”ì— "\tHello World\n!"ë¼ê³ 뜹니다. * 논리형 bool (System.Booleanì„ ì¤„ì¸ ì˜ˆì•½ì–´ 입니다.) * C#ì—는 값형ì‹ê³¼ 참조형ì‹ì´ 존재합니다. 값형ì‹(Value Type)ì€ ìŠ¤íƒ(Stack)ì— ì €ìž¥ë˜ê³ 참조형ì‹(Reference Type)ì€ íž™(Heap)ì— ì €ìž¥ë©ë‹ˆë‹¤. * Heapì— ì €ìž¥ëœ ë°ì´í„°ëŠ” ì›ëž˜ ìžë™ìœ¼ë¡œ í•´ì œë˜ì§€ 않습니다. 하지만 C#ì—는 GCê°€ 있으므로, ìžë™ìœ¼ë¡œ í• ë‹¹í•´ì œí•©ë‹ˆë‹¤. * C#ì˜ ê°’í˜•ì‹ì€ ì •ìˆ˜í˜•,실수형, char, bool, struct ë“±ì´ ìžˆìŠµë‹ˆë‹¤. * C#ì˜ ì°¸ì¡°í˜•ì‹ì€ ë°°ì—´, í´ëž˜ìФ, string, object ë“±ì´ ìžˆìŠµë‹ˆë‹¤. * int b; ì´ë ‡ê²Œ ì„ ì–¸ë§Œ í•´ë†“ê³ ì´ˆê¸°í™”ë¥¼ 안하면 bì—는 0ì´ ë“¤ì–´ê°‘ë‹ˆë‹¤. 하지만 C#ì€ ì˜¤ë¥˜ë¡œ íŒë‹¨í•˜ì—¬ 못쓰게 합니다. ë”°ë¼ì„œ int b = 0; ì´ëŸ°ì‹ìœ¼ë¡œ 명시ì 으로 초기화를 하세요 * ìƒìˆ˜ëŠ” const int b = 5; ì´ëŸ°ì‹ìœ¼ë¡œ 합니다. * string s = new string("a"); 하게 ë˜ë©´ stackì—는 's'변수가 í• ë‹¹ë˜ê³ , heapì—는 ì‹¤ì œ ë°ì´í„°ê°€ í• ë‹¹ë©ë‹ˆë‹¤. * C#ì—서 ì°¸ì¡°í˜•ì€ 'new'키워드를 사용하여 í• ë‹¹í•©ë‹ˆë‹¤. * int arr[5]={0,1,2,3,4,5}; int arr2[] = new int[3]; ì´ëŸ°ì‹ìœ¼ë¡œ ë°°ì—´ì„ í• ë‹¹í•©ë‹ˆë‹¤. (C#ì—서 ë°°ì—´ì€ ì°¸ì¡°í˜•) * ì •ì ë°°ì—´ int arr[2][3] (C style) int[][] arr = new int[2][3]; (Java style) int[,] arr = new int[2,3]; (C# sytle) * 가변배열 int[][] arr = new int[5][]; //가변배열ì´ë©´ 반드시 '[][]'로 ì¨ì•¼ë©ë‹ˆë‹¤. ì´ì™¸ì—는 '[2,3]'ì‹ìœ¼ë¡œ arr[0] = new int[4]; arr[1] = new int[5]; * 논리연산ìž(Cëž‘ ë™ì¼í•©ë‹ˆë‹¤) ê´€ê³„ì—°ì‚°ìž : < > <= >= != == ë¹„íŠ¸ì—°ì‚°ìž : & | ^ ! * 삼í•ì—°ì‚°ìž int a = (condition)? (true): (false) * switch/case구문 breakê°€ ê°•ì œìž…ë‹ˆë‹¤. (ë‚´ìš©ì´ ì—†ë‹¤ë©´ 쓸 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.) caseì— ë“¤ì–´ê°ˆ 수 있는 것ì€..? (ìˆ˜ì •ë°”ëžŒ) * ì „ì¹˜,후치연산 가능합니다 (++, --) * int n = 50; int x = 100; if( x > 10 || n++ > 0 ) ì´ëŸ°ì‹ìœ¼ë¡œ 하면, ì ˆëŒ€ n++ì€ ë˜ì§€ì•ŠìŠµë‹ˆë‹¤. * while, for, do-while, foreach 가능합니다. * foreach( int a in _____ ) : ______ì— ë“¤ì–´ì˜¬ 수 있는 얘는 IEnummerable (?)ì„ êµ¬í˜„í•´ì•¼ 합니다. * break, continue, throw, goto 가능합니다. * C#ì˜ naming conventionì€ CamelCase와 PascalCase와 SnakeCase와 Screaming Snake Case 등ì´ìžˆëŠ”ë°.. CamelCase : intValue PascalCase : IntValue SnakeCase : int_value (C#ì—서는 지양) S.S.C : INT_VALUE (C#ì—서는 지양) C#ì—서 변수는 Camel 그외(함수, í´ëž˜ìФ, 메소드)ì—는 Pascal === ê·¸ 외 === == ë§ê¸€ ==