소리소문 없이... 사랑도 명예도 이름도 남김 없이...
DexCore.net

C# 251

MemoryStream / StreamWriter / StreamReader / BinaryWriter / BinaryReader

MemoryStream은 일련의 바이트 데이터를 메모리에 쓰고 읽는 기능을 제공합니다. byte[] cb = BitConverter.GetBytes('a'); byte[] ib = BitConverter.GetBytes(1000); MemoryStream ms = new MemoryStream(); ms.Write(cb, 0, cb.Length); ms.Write(ib, 0, ib.Length); 예제에서는 문자형 a와 정수형 1000데이터를 바이트로 변환해 MemoryStream으로 메모리에 쓰고 있습니다. 메모리에 쓸때는 Write메서드를 사용하며 0부터 각 데이터 배열길이까지 전체를 쓰도록 하고 있습니다. byte[] cb = BitConverter.GetBytes('a'); byte[] ib = ..

C# 2018.06.29

STACK / QUEUE

System.Collections.Stack은 자료구조중에 하나인 스택의 방식을 그대로 채용한것으로 FILO(First In Last Out)방식으로 값을 넣고 인출하기에 가장 먼저 넣은 값은 가장 나중에 나오게 됩니다. System.Collections.Stack st = new System.Collections.Stack(); st.Push(1); st.Push(2); st.Push(3); Console.WriteLine(st.Pop()); st.Push(4); Console.WriteLine(st.Pop()); 값의 입력은 Push()로 인출은 Pop()메서드로 수행합니다. 참고로 모든 값을 지우고 싶다면 Clear() 메서드를 호출합니다. System.Collections.Queue은 자료구조중에..

C# 2018.06.29

람다식 (LAMBDA EXPRESSION)

람다식은 수학에서의 람다대수형식을 C#언어의 문법으로 표현한것입니다. 람다식을 사용하면 기존의 길고 복잡했던 구문을 간소화하고 단순화시킬 수 있습니다. 예를 들어 익명메서드를 사용한 하나의 예를 delegate int callMethod(int i, int j); static void Main(string[] args) { callMethod cm = delegate (int i, int b) { return i + b; }; Console.Read(); } 람다식으로 표현하면 다음과 같이 할 수 있습니다. delegate int callMethod(int i, int j); static void Main(string[] args) { callMethod cm = (i, b) => i + b; Conso..

C# 2018.06.29

fixed

unsafe 영역안에서 포이터를 사용하는건 스택으로 데이터를 저장하는 값형식의 변수에서만 가능합니다. 참조형식의 변수에서 포인터를 사용할 수 없는 이유는 참조형식의 데이터는 힙에 할당되고 힙은 가비지 컬렉터에 의해 위치가 바뀔 수 있기 때문입니다. 결국 참조형식의 주소를 갖고 있던 포인터는 언제라도 전혀 엉뚱한 곳을 가리킬 수 있기 때문입니다. fixed는 힙에 할당된 참조 형식의 인스턴스를 가비지 컬렉터가 건드리지 못하게 하여 위에서 말한 문제를 해결할 수 있도록 합니다. static void Main() { unsafe { string s = "abcdefg"; fixed (char* c = s.ToCharArray()) { for (int i = 0; i < s.Length; i++) Console..

C# 2018.06.29

문자열 보간($)

흔히 문자열을 출력하는 경우를 보겠습니다. string s = "guest"; Console.WriteLine("안녕하세요. {0}님", s); 여기서 문자열 보간기능을 하는 $문자를 사용하면 다음처럼 간단히 문자열 표현이 가능합니다. string s = "guest"; Console.WriteLine($"안녕하세요. {s}님"); 문자열 보간은 컴파일시에 단지 소스코드를 string.Format변환할 뿐이므로 string.Format형식에 맞는 포멧을 지정할 수 있습니다. Console.WriteLine($"안녕하세요. {s.ToUpper()}님"); 출처: http://lab.cliel.com/entry/문자열-보간?category=478966 [CLIEL LAB]

C# 2018.06.29

nameof

사용자에게 특정 내용을 표현해서 보여주고자 할때 변수의 이름을 그대로 출력해야 하는 경우가 있습니다. string Name = "guest"; Console.WriteLine($"Hello! Your Name : {Name}"); 위 예제에서 Name이 그러한 경우인데 이처럼 단순 문자열로 표현해도 되지만 특별히 nameof를 사용해서 표현할 수도 있습니다. string Name = "guest"; Console.WriteLine($"Hello! Your {nameof(Name)} : {Name}"); 굳이 변수명을 이렇게 할 이유는 혹시라도 변수명이 바뀌었을때 오류를 발생시켜 항상 변수의 이름을 정확히 표현할 수 있도록 하기 위함입니다. 변수명을 단순히 문자열로 표현해 버리면 컴파일과정에서 변수명이 바..

C# 2018.06.29

dynamic

dynamic은 언뜻 var와 비슷해 보이지만 dynamic d = 10; int sum = 10 + d; Console.WriteLine(sum); var는 초기값의 타입에 따라 변수의 타입이 결정되지만 dynamic은 프로그램이 실행될때 타입이 결정됩니다. 따라서 다음과 같은 구현도 컴파일시에는 오류를 일으키지 않고 컴파일이 진행될 수 있습니다. dynamic d = 10; d.callMethod(); 물론 실제 d에는 callMethod 라는 메서드가 정의되어 있지 않기에 프로그램이 실행되면 오류가 발생하게 될 것입니다. dynamic이 생김으로 인해서 가능한것 중 하나는 덕 타이핑(duck typing)이라는 것입니다. 예를 들어 서로 다른 클래스에서 동일한 메서드를 호출할때 사용가능한 방법중 하..

C# 2018.06.29

GZipStream - 문자열 압축과 해제

C# GZipStream 문자열 압축과 해제 많은 문자열을 네트워크를 통해 보낼때 CPU 비용 보다는 네트워크 비용을 줄이기 위해 사용할 수 있을것이다. 하지만 압축과 해제는 CPU뿐만 아니라 메모리에서도 제약 사항을 많이 받는다. 최대 4GB까지 지원하지만 압축된 데이터를 저장할 수 있는 메모리 공간과 압축 해제된 데이타를 저장할 수 있는 공간이 필요 하기에 예상보다 많은 메모리 사용량이 필요 할 수 있다. 그러르모 언제든지 OutOfMemoryException(OOM)이 발생할 수 있으며, InSufficientMemoryException 또한 발생할 수 있다. 그래서 실 사용에서는 사용환경에 맞게 최대 허용가능한 용량을 산정하여 사용할 필요가 있다. 실예로 모 사이트에서 수만 row의 값을 압축하여..

C# 2018.06.29
728x90
반응형