닷넷 프레임워크 125

#047_닷넷(.NET)_.Net Framework 기본 - 구조체와 클래스에서 복사 (Shallow ,Deep Copy)

안녕하세요 삽잡이입니다. 이번 시간에는 struct, class의 경우를 비교해보며각 참조를 가졌을 때, 값을 가졌을 때 어떻게 복사가 되어가는지 알아보겠습니다.하... 힘든 시간이 될 수 있지만 힘차게 달려가봅시다! 필자는 Point와 Rect라는 형식을 가지고 비교를 진행해보도록 하겠습니다. 시작 전에 복사의 진리(?)를 다시 한번 곱씹어보고 가시겠습니다...값 형식과 참조 형식이 뭡니까?값 형식은 왜 값 형식이라고 부를까요?변수 자체가 값이고 모든 복사가 값으로 되기 때문입니다.참조형식은 그렇다면?객체 자체가 참조입니다. 객체는 따로 있고 참조자를 통해 가리킬 뿐이지요.참조형식일 경우 복사할 때 참조가 복사되니 참조 복사라고 부를 수 있습니다. 본격적으로 시작해볼까요? Case 1. Class 안에..

#046_닷넷(.NET)_.Net Framework 기본 - 얕은 복사와 깊은 복사의 필요성

안녕하세요 삽잡이입니다. 이번 시간에는 복사에 대해서 알아보려고합니다.깊은 복사, 얕은 복사 모두 다 다루려고 했지만,글이 길어지면 여러분도 지루해하실터이니... (맞습니다... 원래 맨날 길죠...)이번 시간은 Shallow Copy와 Deep Copy의 필요성에 대해서 중점적으로 다루려고 합니다. 시작해보겠습니다. Shallow Copy, Deep Copy 모두 다 복사입니다.그런데 만약, 복사할 대상이 Class형 참조자라면, 이를 논할 수 없습니다.단지 참조를 복사한 것일 뿐이지요...하지만, struct형 객체일 경우 Shallow Copy, Deep Copy를 논할 수 있습니다. 무슨 말인지 감이 안잡히시지요? 지금부터 시작하겠습니다. Shallow Copy, Deep Copy는 사실 이름만 ..

#045_닷넷(.NET)_.Net Framework 기본 - IEnumerable & IEnumerator

안녕하세요 삽잡이입니다. 이번 시간에는 닷넷에서 제공하는 BCL에 있는 인터페이스를 살펴보려고합니다.우리가 살펴보고자 하는 인터페이스는바로, 'IEnumerable', 'IEnumerator' 입니다. 우리는 이미 BCL에서 제공하는 이 인터페이스들을 사용했었습니다.foreach 문에서 사용을 하고 있었지요... foreach 문에서는 배열 타입의 각 항목을 반복할 수 있다는 사실을 알고 있었습니다.왜 배열 타입의 항목만을 반복할 수 있다 했을까요?사실, arr은 '약속'을 지키고 있었기 때문입니다. foreach 문은 일반 객체가 아닌 배열이나 리스트의 컬렉션에서만 사용이 가능합니다.따라서 일반 객체도 '약속'을 지킨다면 foreach문을 실행시킬 수 있습니다. 컴파일러는 IEnumerable을 구현했..

#044_닷넷(.NET)_.Net Framework 기본 - 인터페이스(일반적인 구현 & 명시적 구현)

안녕하세요 삽잡이입니다. 이번 시간에는 C#의 인터페이스 사용법 중,일반적인 구현과 명시적인 구현에 대해서 알아보려고합니다. 인터페이스를 구현하는데에는 두가지의 방법이 있습니다.'인터페이스를 구현하되 그 인터페이스를 자신의 메서드로 만드는 방법','인터페이스 명시적 구현' 이라고 해서 오직 인터페이스 메서드만 구현하능 방법이 있지요... 즉, 인터페이스를 구현하면서, 소유를 내것으로 하는 방법과오직 인터페이스를 구현하면서 내 인터페이스는 아니게하는 방법이 있다 이겁니다. 왜 이런 이야기를 했을까요... 예를 들어서 동일한 Draw() 메서드가 있다고 해보겠습니다.인터페이스를 세개 다 구현한다고 할경우각 인터페이스가 다른데 누구의 Draw()를 호출하는지 할 수 있을까요?따라서 이 때에는 '명시적인 구현'..

#043_닷넷(.NET)_.Net Framework 기본 - 인터페이스 (2)

안녕하세요 삽잡이입니다. 이번 시간에는 지난시간에 이어 인터페이스를 알아보려고합니다.지난 시간부터 이어서 쓰는 글인 만큼시간이 나신다면 이전 글도 참고해주시길 바랍니다. 시작하겠습니다. Interface는 암묵적으로 abstract, public 형식입니다.그 이유는 인터페이스는 '서로 소통하려고 만든 약속'이기 때문입니다.그래서 인터페이스는 하나의 타입이지만,클래스와 관련성이 없는 '독립적인 타입'이라는 것입니다. 예를 들어서 Eat이라는 인터페이스는Eat 인터페이스를 가지고 있는 객체들이라면, 모두 구현할 수 있습니다.그런데 사람만 밥먹습니까? 동물도 밥 먹습니다...그렇다면 이 동물객체들도 Eat이라는 기능을 가질 수 있는데Eat 인터페이스를 가지고 있게 되면 동물객체이지만 Eat 메서드를 구현할 ..

#042_닷넷(.NET)_.Net Framework 기본 - 인터페이스 (1)

안녕하세요 삽잡이입니다. 이번 시간에는 진짜로 인터페이스에 대해서 알아보도록하겠습니다... interface는 굉장히 중요합니다.모든 것들의 핵심은 interface라고 해도 과언이 아닐정도이지요... 객체가 상속, 다형성, 캡슐화를 통해 구현되는 이유를 아시겠습니까?바로, '왠만한 것은 다 감추기 위해서'입니다.최선의 것만 알고, 나머지는 내부에서 알아서 할것이니 구체적인 것은 알 필요 없고 사용하고자 하는 클라이언트가 요구하는 메시지만 던질 수 있도록하자는 것이지요...이것이 핵심입니다.그런데 이 모든 내용들은 모두 interface를 내포하고 있습니다. 어마어마하군요... 객체지향에서 객체는 메시지를 통해 서로 간에 주고 받는 일을 합니다.이 의미는 수 많은 객체들이 서로 객체들과 메시지를 통해 대..

#041_닷넷(.NET)_.Net Framework 기본 - 인터페이스 Intro

안녕하세요 삽잡이입니다. 이번 시간에는 인터페이스에 대해서 알아보려고 합니다.이~전 시간에 인터페이스에 대해서 알아본 감이 있지만,다시 한번 정리하는 겸 보다 꼼꼼하게(?) 알아보도록 하지요... /*글을 쓰다보니... interface는 못나갔습니다... 혹여나 이 글이 관심 없으신 분들은...다음 글에서 interface를 다루겠으니... 그 글을 참고하시길 바랍니다...*/ 객체지향의 중심축을 생각해봅시다.하나의 단위를 만들어내는 묶음의 기능과 보호의 기능(은닉)을 담당하는'캡슐화'는 알고자하는 것은 알고 감추고자하는 것은 감추기 위한 객체지향의 핵심입니다. 캡슐화는 클라이언트에게 '최소한의 것'만을 알려줄 수 있도록 합니다.많이 알면 알수록 신경써야할 일들이 많고, 복잡해지는 일도 비일비재하니 이..

#040_닷넷(.NET)_.Net Framework 기본 - 세대

안녕하세요 삽잡이입니다. 이번 시간에는 Garbage Collection의 대상인 객체들을쓸어모아주는 Garbage Collector가 효율적으로 동작시키도록 도와주는...(말이 길지요...)'세대'라는 개념에 대해서 알아보겠습니다. 현재 .Net Framework 4.0까지는가비지 컬렉터 즉, GC 클래스에는 세가지 상태의 종결 객체즉, '가비지 컬렉션 제거 대상' 객체가 존재합니다. 객체가 최초에 만들어지면 그 최초에 만들어진 객체들은 '0 세대'입니다.따끈따근하지요... 가비지 컬렉션이 한바퀴 쫘악 돌고 오면루트가 없는 것들을 체크할 것입니다. 즉, 메모리가 부족하게 될 경우에 가비지 컬렉터는 동작하게됩니다.이 때에 루트가 없는 놈들을 확인하고 제거하고 나머지들은 1세대가 됩니다.0세대에 있넌 객체..

#039_닷넷(.NET)_.Net Framework 기본 - 비관리 리소스 종결

안녕하세요 삽잡이입니다. 이번 시간에는 비관리 리소스를 종결 시키는 과정에 대한 이론 공부를 해보고자합니다.지금 배우는 이 비관리 리소스, 성능에 대해서 알기 위해물론, 프로그램을 하면서 사실 큰 영향이 있을지는 모르겠으나이론적으로 갖춰야할 내용입니다. 시작하겠습니다. 루트가 없는 객체는 가비지 컬렉션 대상이 된다고합니다.루트란 무엇일까요?이는 '관리된 힙에 생성된 객체에 대한 참조를 갖고 있는 저장소의 위치'를 말합니다. 루트가 없다면 객체가 덩그라니 붕 떠있게 되는데,이때 가비지 컬렉션 대상이 된다 이겁니다.루트가 없다면 바로 객체가 날라갈까요? 아닙니다.가비지 컬렉터가 동작하기 전에는 남아있습니다. 예를 들어서 메모리가 4GB인데,만약, 1~2MB 정도 사용했다고 해봅시다... 이 용량에 객체들이 ..

#038_닷넷(.NET)_.Net Framework 기본 - 예외 처리

안녕하세요 삽잡이입니다.이번 시간에는 C#에서 제공하는 예외처리에 대해서 알아보려고합니다. 예외처리란 어떤 얘기치 못한 실시간에 '얘기치 못한 예외상황'이 발생하면 처리하는 작업을 말합니다.예외처리는 실시간에 발생하지요... 예외처리는 크게 서버와 클라이언트로 나뉩니다. 서버에서는예외 클래스를 정의, 예외 클래스를 throw (예외 던지기라고도 하지요...)이 두가지의 과정을 거칩니다. 클라이언트는 try를 합니다...즉, function을 수행하다가 예외가 발생하면 catch 한다 이겁니다.이를 try - catch 문이라고도 하지요... 그런데, 여기까지는 C++ 문법입니다.여기에 C#에서는 하나가 더 추가 되지요... finally 입니다.이 곳에는 '어떤 상황에서든' 즉, 예외가 나던 안나던 처리..