C# 31

[Effective C#] 불필요한 객체를 만들지 말라

[Effective C#] 불필요한 객체를 만들지 말라가비지 콜렉터는 사용자를 대신하여 메모리를 관리하며 사용하지 않는 객체를 효율적인 방식으로 제거한다그러나 이 작업이 아무리 효율적이더라도 새로운 객체를 생성하고 삭제하는 일은 그렇지 않은 일에 비해 상대적으로 많은 프로세스 시간을 잡아 먹는다따라서 가비지 콜렉터가 과도하게 동작하지 않도록 주의해야 함.1. 자주 사용되는 지역변수를 멤버 변수로 변경using System.Collections; using System.Collections.Generic; using UnityEngine; ​ public class SpriteSetting : System.IDisposable { Vector3 position; Color color; bool flipX;..

아카이빙/C# 2018.08.11

[Effective C#] 박싱과 언박싱을 최소화하라

[Effective C#] 박싱과 언박싱을 최소화하라.NET Framework에서는 모든 타입의 최상위 타입을 참조타입인 System.Object로 정의하고 있다.object는 참조형식이 때문에 힙에 데이터를 할당한다.반면, int나 double은 값 형식이기 때문에 스택에 데이터를 할당하며, 다형적이지 못하다.이 두가지는 양립하는 것 처럼 보이지만 앞서 모든 타입의 최상위 타입은 참조형식인 System.Object를 상속받는다고 했다. 어떻게 그럴 수 있을까?.NET Framework에서는 박싱(Boxing)과 언박싱(Unboxing)이라는 방법을 통해 이 두가지 서로 다른 타입을 이어준다.int firstParam = 5; int secondParam = 10; int thirdParam = 15; ..

아카이빙/C# 2018.06.30

[Effective C#] string.Format()을 보간 문자열로 대체하라

[Effective C#] string.Format()을 보간 문자열로 대체하라C# 6.0에는 보간문자열(Interpolated string)이라는 새로운 기능이 도입되었다.보간문자열이 뭘까? 예시로 살펴보자int a = 5; int b = 13; string str1, str2; ​ // 이랬던 것을 str1 = string.Format("{0} + {1} = {2}", a, b, a + b); Console.WriteLine(str1); ​ // 이렇게 바꾼다 str2 = $"{a} + {b} = {a + b}"; Console.WriteLine(str2);string.Format() 은 직접 출력해보고 눈으로 확인하기 전까지는 코드를 제대로 작성했는지 쉽게 짐작하기 어려운 반면, 보간 문자열은 포맷..

아카이빙/C# 2018.06.30

[C#] LINQ

[C#] LINQLINQ는 데이터 작업에 특화된 C#의 기능이다.LINQ (Language INtegrated Query)의 약어. C#언어에 통합된 데이터 질의(query) 기능쿼리는 기본 적으로 다음과 같은 내용을 포함From : 어떤 데이터 집합에서 찾을 것인가?Where : 어떤 값의 데이터를 찾을 것인가?Select : 어떤 항목을 추출할 것 인가?LINQ 예제예를 들어보자.다음과 같이 키와 이름을 필드로 갖는 Profile 클래스가 있다.class Profile { public string Name {get; set;} public int Height {get; set;} ​ public Profile(string name, int height) { this.Name = name; this.H..

아카이빙/C# 2018.06.26

[C#] 람다식 (Lambda Expression)

[C#] 람다식 (Lambda Expression)람다식은 익명 메소드를 만드는 하나의 방법이다. (또 다른 방법은 delegate를 이용)보다 분명하고 간결한 방법으로 함수를 묘사하기 위함기본 람다식의 형식delegate int Del(int a, int b); static void Main() { //매개변수목록 => 식 Del d1 = (int a, int b) => a + b; Console.WriteLine(d1(5, 8)); ​ //형식 유추(Type Inference) Del d2 = (a, b) => a + b; Console.WriteLine(d2(5, 8)); }문 형식의 람다식 (Statement Lambda)delegate void DoSomething(); static void M..

아카이빙/C# 2018.06.26

[C#] 이벤트와 델리게이트

[C#] 이벤트와 델리게이트이벤트를 선언하고 사용하는 절차는 다음과 같다.1. 델리게이트를 선언delegate void EventHandler(string msg);2. 선언한 델리게이트의 인스턴스를 event 한정자로 선언class Notifier { public event EventHandler SomethingHappened; public void DoSomething(int num) { int temp = num % 10; ​ if (temp != 0 && temp % 3 == 0) { SomethingHappened(String.Format("{0} : 짝", num)); } } }3. 이벤트 핸들러 작성. 1에서 선언한 델리게이트와 일치하는 메소드면 가능class MainApp { public..

아카이빙/C# 2018.06.25

[C#] Delegate와 익명메소드

[C#] Delegate와 익명메소드익명 메소드란 이름이 없는 메소드다.한 번 사용하고 다시 사용할 일이 없을 것 같다면 익명메소드를 사용하는 게 편하다.Delegate 선언delegate int Calculate(int a, int b);메인static void Main() { Calculate calc1, calc2; calc1 = delegate (int x, int y){return x + y;}; calc2 = (x, y) => {return x - y;}; ​ Console.WriteLine(calc1(5, 6)); Console.WriteLine(calc2(5, 6)); }11 -1calc1(더하기)을 더욱 간단히 구현한게 calc2(빼기) 이다. calc2 와 같은 방식은 람다식이라고 부르..

아카이빙/C# 2018.06.25

[C#] Delegate는 언제 사용하는가

[C#] Delegate는 언제 사용하는가대표적으로 메소드를 매개변수로 넘기고 싶을때정렬 시, 비교 루틴을 매개변수로 넣어보자.Delegate 선언delegate int Compare(T a, T b);오름차순, 내림차순 메소드static int AscendCompare(T a, T b) where T : IComparable { return a.CompareTo(b); } ​ static int DescendCompare(T a, T b) where T : IComparable { return a.CompareTo(b) * -1; }Compare delegate를 매개변수로 받는 정렬 메소드static void BubbleSort(T[] dataSet, Compare Comparer) { T temp;..

아카이빙/C# 2018.06.25

[C#] Delegate (대리자)

[C#] Delegate (대리자)Delegate란?특정 매개변수들이나 반환형식이 있는 메소드에 대한 참조를 나타내는 형식 (C/C++의 함수 포인터)Delegate를 인스턴스화하면 모든 메소드가 있는 인스턴스를 호환되는 반환형식에 연결할 수 있으며, Delegate의 인스턴스를 통해 메소드를 호출 할 수 있다.메소드를 다른 메소드에 인수로 전달하는 데에 사용된다.콜백 메소드를 정의할 수 있다.사용 예class MainApp { //string을 인수로 받고, void를 반환하는 delegate 선언 public delegate void Del(string message); ​ public static void DelegateMethod(string message) { Console.WriteLine("..

아카이빙/C# 2018.06.25