Book(16)
-
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장 - 3 (컬렉션)
Collections BCL에서는 System.Collections 하위에 관련 타입을 묶어서 제공가변 배열과 같은 기능을 편리하게 구현한 것들을 제공. System.Collections.ArrayList ArrayList는 object부터 이로 형변환 할 수 있는 모든 타입을 인자로 받아 다룰 수 있는 자료구조. ArrayList ar = new ArrayList(); ar.Add(3); ar.Add("Hello"); ar.Add(1.1); ar.Add("World"); // 포함 검사 Console.WriteLine("Contains(1) : " + ar.Contains(1)); // 삭제 ar.Remove("World"); foreach (var item in ar) { Console.WriteLi..
2014.12.20 -
6장 - BCL - 2
System.String 문자열 비교시 대소문자 구분용 오버로드 함수EndsWith, IndexOf, StartsWith이 메서드들에 StringComparison.OrdinalIgnoreCase를 전달하면 구분없이 비교. System.Text.StringBuilder닷넷에서 string은 불변객체이다.때문에 string에 관련된 모든 변환은 새로운 메모리 할당을 발생시킨다. StringBuilder는 내부에 일정한 양의 메모리를 미리 할당하고추가되는 문자열이 할당해 놓은 양보다 많아지면 새롭게 여유분을 할당한다.ToString을 호출하면 연속적으로 연결된 하나의 문자열로 반환한다. System.Text.Encoding우리가 컴퓨터화면에서 보는 문자는 단지 특정 기호나 숫자의 대체품일뿐.국가별, 기능별 ..
2014.12.08 -
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장 - 4
예외 (Exception) 예외 발생시 CLR은 예외를 전파하는데이 자체도 특정한 Type의 인스턴스이다. 이미 정의되어 있는 예외타입을 비롯하여 모든 예외는 관례상 다음 규칙을 따른다.- 개발자가 정의하는 예외는 System.Exception을 상속받은 System.ApplicationException을 상속받는다.- 접미사로 Exception을 클래스명에 추가한다.- CLR에서 미리 정의된 예외는 System.SystemException을 상속받는다. But 최근에는 개발자가 만드는 예외도 System.Exception을 상속받도록 권장하고 있는데MS에서도 내부적으로 위의 관례를 따르지 않았기 때문이란다. 예외 처리CLR은 예외 발생시 예외 처리기가 있을 경우 해당 예외 처리기로 예외를 넘기며,그렇지..
2014.11.27