닷넷 프레임워크 125

#078_닷넷(.NET)_.Net Framework 기본 - 비동기 대리자(delegate) & 멀티 쓰레드(Multi Thread)

안녕하세요 삽잡이입니다. 이번 시간은 아마 매우 어려운 시간이 될 수도 있을 것 같습니다.이해가 안가시더라도 천천히 여러번 읽어보시고... 제가 잘못되게 서술했을 수는 있으나...(-_-;;)어떠한 느낌인지를 느껴보시길 바랍니다... 쓰레드는 OS의 자원입니다.그런데, 이 쓰레드에 대해서 공부를 하고자할 때 띄우고, 동기화 제어하는 것이 어렵다면 어려운 부분입니다.이를 쓰레드의 동시성 문제라고 합니다. 쓰레드의 동시성 문제에 관련되어 '휘발성', '원자적'이라는 단어는 중요한 용어가 됩니다. 해당 용어들이 주가되어 쓰레드 동시성에 문제가 생기게 될 수 있습니다.그러면 하나씩 살펴보도록 하겠습니다. 'volatile'을 우리말로 휘발성이라고 합니다. 여러 쓰레드가 접근하는 코드의 경우를 생각해보시길 바랍니..

#077_닷넷(.NET)_.Net Framework 기본 - 객체 컨텍스트

안녕하세요 삽잡이입니다. 닷넷에서의 프로세스는어플리케이션 도메인이 한개 이상 존재할 수 있다고 했었습니다.기본 APP Domain과 그 이외에 사용자가 이름을 붙일 수 있는 Sub App Domain들이 있지요.이를 닷넷에서는 논리적인 프로세스라고 볼 수 있다고 했습니다. 그런데, APP Domain에는 컨텍스트라는 것이 포함이 됩니다.기본은 무조건 Context 0 이지요.즉, App Domain이 만들어지면, 기본적으로 컨텍스트가 만들어지는데,이는 사용자가 만들고 제거해주는 것이 아닙니다.사용자가 만드는 컨텍스트는 0번을 제외한 다른 번호의 컨텍스트가 되는 것이지요. 닷넷의 프로세스가 기본적으로 뜰 때 App Domain이 생성되듯이,기본 컨텍스트도 생성이 됩니다. 이러한 컨텍스트는 도대체 무엇일까요..

#076_닷넷(.NET)_.Net Framework 기본 - 어플리케이션 도메인

안녕하세요 삽잡이입니다. 프로그램을 나누라고 한다면 '응용 프로그램'과 'OS'로 나눌 수 있습니다. 여기서 응용프로그램을 이전에는 해당 어플리케이션에서 직접 로드를 했었습니다.그런데, 닷넷에서는 기존의 Win32 응용 프로그램과 다르게,실행 파일이 프로세스 내에 직접 호스팅 즉, 로딩되지 않습니다. .Net의 실행파일은 바로 응용프로그램 도메인이라는 논리적으로 격리된 프로세스에 호스팅 즉, 로드가 되지요. 응용프로그램 도메인을 어플리케이션 도메인이라고 부르는데,도메인이라는 단어는 컴퓨터 용어에서 많이 사용됩니다. 공통적으로 도메인이라는 용어의 의미는 바로 '영역'을 뜻합니다.즉, 어떤 틀을 짓는다는 느낌이지요. 그래서 어플리케이션 도메인이란 뭐냐?프로세스란, 메모리상에 올라와 있는 프로그램이죠.그런데 ..

#075_닷넷(.NET)_.Net Framework 기본 - 메모리상 Thread 기본 구조

안녕하세요 삽잡이입니다. 이전에 쓰레드에 대해서 알아본 적이 있습니다.간단하게 다시 요약해보죠.모든 응용 프로그램의 진입점은 Primary Thread에 의해서 실행됩니다.따라서, 쓰레드는 프로세스 내의 실행 경로라고 부를 수 있지요. 독립적으로 움직이는 쓰레드들은메모리 관점에서 볼 때 핵심적으로 두가지의 메모리를 갖습니다.바로, TLS와 Stack을 소유할 수 있는 것입니다.또한, Heap 영역과 Global Data영역을 공유하지요. 닷넷에서는 프로세스와 쓰레드를 다루기 편하도록 타입을 만들어놨습니다.Process 타입의 속성에는 크게,'Handle, Id, Moudle, Threads' 가 있습니다.말 그대로 핸들을 반환하거나,프로세스의 PID, module, Thread들을 반환할 수 있는 속성들..

#074_닷넷(.NET)_.Net Framework 기본 - 특성 (Attribute)

안녕하세요 삽잡이입니다. 이번 시간에는 닷넷에서 제공하는 특성에 대해서 알아보려고합니다. 특성은 우리가 알고 있는 특성이 아닙니다. 닷넷에서 말하는 특성인 필드를 말하는 것이 아닙니다. XML의 Element를 가보면, 시작태그와 끝 태그가 있다고 하지 않았습니까?그 사이에 시작 태그의 이름과 값 사이에 있는 특성을 말하는 것도 아닙니다. 제가 이번 시간에 말하고자 하는 특성은 닷넷에 있는 또 다른 특성입니다. 우선 C#에서 기호로는 대괄호 내에 있는 어떤 것을 바로 '특성'이라고 부릅니다. 이 특성은 어셈블리 자체에 특성이 있을 수도 있고,그 외에 모듈, 타입, 멤버(속성, 필드, 메서드 등)등에 지정될 수 있는 특성들이 있습니다.즉, 특성이라는 것이 그런 것입니다.어셈블리, 모듈, 타입, 멤버등에 지..

#073_닷넷(.NET)_.Net Framework 기본 - 동적 어셈블리 로딩

안녕하세요 삽잡이입니다. 이번 시간에는 동적으로 어셈블링을 하고,객체를 생성해보고, 메서드를 바인딩해보려고합니다. 머나먼 여정이 될것 같습니다... 같이 힘내서 달려봅시다! 동적이라는 뜻은 '런타임'시간을 의미하고,정적이라는 뜻은 '컴파일' 시간을 의미합니다. 그렇다면 동적 어셈블리 로딩이란 무엇일까요?바로, 실행시간에 어셈블리를 로드하는 것이지요. 도대체 동적, 정적을 왜 나눠놓은 것일까요?각기 필요가 있으니 나눠놓은 것이지요... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 정적으로 어셈블리를 로드 할 경우 '고정 불변'입니다.즉, 컴파일할 때에 어셈블리를 참조하게 되면 변경이 불가능해지는 것입니다. 그런데 동적으로 어셈블리를 로드할 경우에는 '변화가 가능'합니다.원하는 시점에 Load/UnLoad가 가능하다는 소리입..

#072_닷넷(.NET)_.Net Framework 기본 - Type 클래스 & 리플렉션

안녕하세요 삽잡이입니다. 이번 시간부터는 실시간에 '몰랐던' 타입을 로딩하고,그 로딩한 타입의 인스턴스(객체)를 생성하는 등의 작업에 대해서 알아보려고합니다. 차근차근 알아보도록 하겠습니다.이전에 배웠던 내용들을 한번 생각해볼까요? 우선, 어셈블리는 배포되고 버전관리가 되는 단위라고 말했었습니다.그리고, 메타데이터는정보의 정보 즉, '함축적인 정보'라고 헀습니다.정보를 알게 되면 더 많은 정보들을 뽑아낼 수 있다는 의미입니다. 대표적인 메타데이터의 예로, 벡터 이미지가 있지요.벡터 이미지는 픽셀이라는 위치값에 따르는 색상값 즉, 사람들이 인식할 수 있는 데이터들의 집합입니다. 벡터 이미지는 이미지이자만, 정보를 가지고 있는 이미지입니다.이미지를 나타내는 정보 말입니다.이처럼 함축적인 정보를 바로 '메타'..

#070_닷넷(.NET)_.Net Framework 기본 - 어셈블리 (공유 어셈블리)

안녕하세요 삽잡이입니다. 이번 시간에는 공유 어셈블리에 대해서 알아보려고합니다. 이처럼 '강력한 이름 키'를 만들게 되면 '.snk' 확장자 명으로 파일이 하나 만들어집니다. 해당 파일은 암호화 알고리즘에 의해 만들어진 파일입니다. 이는 강력한 이름 키 파일입니다. 우리가 뭔말인지 알아보지는 못하겠지만, 현재 '성명 키'를 생성하게 된것입니다. 보안에 사용되는 알고리즘 중 '공개키, 비밀키' 알고리즘이라는 것이 있습니다. MD5라던지, RSA 알고리즘에서 사용되지요. 아무튼... 해당 파일은 공개키, 비밀키에 의해 만들어진 코드 값입니다. 닷넷에서 제공해주는 '강력한 이름'에는 다섯가지가 있습니다. 이 강력한 이름이란, 공유 어셈블리를 배포하기 이전에 부여해줘야하는 것입니다. 즉, 공유 어셈블리는 '강력..

#069_닷넷(.NET)_.Net Framework 기본 - 어셈블리(assembly)

안녕하세요 삽잡이입니다. 이번 시간부터 본격적으로 닷넷에서 제공해주는 어셈블리에 대해서 알아보려고합니다.글이 산으로 갈 수 있으니 주의하시고...시작해보겠습니다. 닷넷 플렛폼의 특징 중 하나가 바로 바이너리를 재사용할 수 있다는 것입니다.즉, 외부의 어셈블리에 포함된 타입을 재사용할 수 있다는 것을 의미합니다. 그렇다면 어셈블리란 무엇일까요?어셈블리의 정의는'버전 관리되고 배포 되는 프로그램의 단위'를 뜻합니다. 어셈블리는 두 가지의 종류로 배포될 수 있습니다.즉, 응용 프로그램 하나 혹은 여러 프로그램에서 사용하는지에 따라 두가지로 나뉠 수 있게 됩니다.바로, '공유 어셈블리'와 '전용 어셈블리'로 나뉠 수 있게 되지요. 전용 어셈블리는 응용 프로그램 하나에,공유 어셈블리는 여러 응용 프로그램에서 사용..

#068_닷넷(.NET)_.Net Framework 기본 - Software Component

안녕하세요 삽잡이입니다. 이번 시간에는 닷넷에서 제공하는 어셈블리에 대해서 알아보려고합니다.그 전에, 어셈블리를 이해하기 위한 Component라는 개념에 대해서 알아보겠습니다. 여러분은 객체지향에서의 재사용이라고 하면 어떤 생각이 먼저 나십니까? 이 재사용도 맞습니다.하지만, 제가 언급하고자하는 재사용은 다른 것입니다. 바로, '코드 재사용'과 '바이너리 재사용'입니다. 코드 재사용은 '소스코드 수준'에서 상속, 포함등을 통해코드를 재사용할 수 있다는 의미의 재사용입니다. 그리고 바이너리 재사용은 코드를 컴파일하여 생성된 '바이너리'수준에서 재사용할 수 있다는 의미의 재사용입니다. 이번시간에는 바로 바이너리 수준에서의 재사용을 알아보고자합니다. 우선, 바이너리 재사용의 개념은 기존의 '컴포넌트'개념으로..