.NET(14)
-
7장 - c#2.0 - 제네릭
으로 명시하며지정한 타입은 JIT 컴파일 타임에 기계어 코드를 만들어준다. 제네릭 클래스는public class GenericClass와 같은 형식. 제네릭 메서드는public static void Method1 (T item){}처럼 지정하면 된다. 제네릭은 박싱/언박싱으로 발생하는 힙낭비를 막고 코드 중복도 해결해 준다. 제약 조건 public class Utility { public static int Max(int item1, int item2) { if (item1.CompareTo(item2) >= 0) { return item1; } return item2; } } int 타입만 사용하는 이 코드를 제네릭을 적용하여 컴파일하면 어떻게 될까? public class Utility { publi..
2014.12.25 -
6장 - 리플렉션2 (확장모듈 만들어보기)
리플렉션을 이용한 확장 모듈 구현 대개 플러그인을 구현한 소프트웨어는 다음과 같은 동작 양식을 가진다. 1. exe 프로그램이 실행되는 경로 아래에 확장 모듈을 담도록 약속된 폴더가 있는지 확인2. 해당 폴더가있다면 그 안에 dll 같은 파일이 있는지 검사하고 로드3. 파일이 로드됐으면 사전에 약속된 조건을 만족하는 타입이 있는지 검사4. 조건에 맞는 타입이 있다면 생성하고, 사전에 약속된 메서드를 실행 이 조건에 맞춰다음과 같이 규칙을 정한다. 1. 확장모듈은 exe아래에 [plugin] 폴더2. 플러그인 타입조건은 타입에 [PluginAttribute] 라는 이름의 특성이 부여되어 있어야 함3. 호출된 메서드는 [StartupAttribute] 라는 이름의 특성이 부여되어 있어야 함. 다만 입력인자와..
2014.12.24 -
6장 - 리플렉션1
어셈블리 파일에는 메타데이터가 있음.BCL에서 제공하는 리플렉션 (Reflection) 관련 클래스를 이용하면 메타데이터 정보를 얻을 수 있다. -- 닷넷에서는 프로세스 구조가 다음과 같다. Exe 프로세스 = 1개의 공유 AppDomain + 1개의 기본 AppDomain-> 기본은 1개지만 임의의 수를 만들 수 있다. AppDomain이 만들어지면 그 내부에 어셈블리들이 로드되는데,리플렉션을 이용하면 현재 AppDomain의 이름과 그 안에 로드된 어셈블리 목록을 구할 수 있다. 1234567 AppDomain currDomain = AppDomain.CurrentDomain; Console.WriteLine(currDomain.FriendlyName); foreach (var item in curr..
2014.12.21 -
6장 - BCL - 1
BCLBCL은 당연하게도 Base Class Library의 약자.입/출력 및 프로그램의 처리에 도움을 주는 여러 기능을 제공하고 있다. System.DateTime DateTime now = DataTime.Nowstatic속성인 Now를 통해 현재 날짜/시간을 알아낼 수 있다. static void Main(string[] args) { DateTime before = DateTime.Now; Sum(); DateTime after = DateTime.Now; long gap = after.Ticks - before.Ticks; Console.WriteLine("Total ticks : " + gap); Console.WriteLine("Milliseconds : " + (gap / 10000)); ..
2014.12.07 -
5장 - 5
가비지 수집기(Gabage Collector) CLR의 힙은 세대(generation)를 나눠 관리. static void Main(string[] args) { object pg = new object(); Console.WriteLine(GC.GetGeneration(pg));// result : 0 GC.Collect();// GC 수집 Console.WriteLine(GC.GetGeneration(pg));// result : 1 GC.Collect();// GC 수집 Console.WriteLine(GC.GetGeneration(pg));// result : 2 GC.Collect();// GC 수집 Console.WriteLine(GC.GetGeneration(pg));// result : 2..
2014.12.02 -
5장 - 4
예외 (Exception) 예외 발생시 CLR은 예외를 전파하는데이 자체도 특정한 Type의 인스턴스이다. 이미 정의되어 있는 예외타입을 비롯하여 모든 예외는 관례상 다음 규칙을 따른다.- 개발자가 정의하는 예외는 System.Exception을 상속받은 System.ApplicationException을 상속받는다.- 접미사로 Exception을 클래스명에 추가한다.- CLR에서 미리 정의된 예외는 System.SystemException을 상속받는다. But 최근에는 개발자가 만드는 예외도 System.Exception을 상속받도록 권장하고 있는데MS에서도 내부적으로 위의 관례를 따르지 않았기 때문이란다. 예외 처리CLR은 예외 발생시 예외 처리기가 있을 경우 해당 예외 처리기로 예외를 넘기며,그렇지..
2014.11.27