ITEM 16 : Avoid Creating Unnecessary Objects.
(불필요한 오브젝트 생성을 하지마라)
■ 요약 및 장점
1. 불필요한 오브젝트 생성을 최대한 줄여서, Garbage Collector에게 부담을 주지 말아야 한다.
그 방법에는 3가지가 있다.
1-1. 여러군데에서 자주 사용하는 변수는 local variable 에서 member variable로 승격시켜야 한다.
승격시키는 변수가 IDisposable을 구현하고 있다면 당신의 클래스에서도 IDisposable을 구현해야한다.
승격시키는 변수는 참조타입이여야 하며 자주 호출되는 함수에서 사용되는 변수 이여야 한다.
1-2. static으로 선언된 변수는 참조되는 시점에서 초기화를 시켜서 리턴해줘야한다.
그렇게 함으로써 메모리의 낭비를 줄일 수가있다. (싱글톤 패턴을 이용)
1-3. string과 같은 immutable type을 사용해서 문자열을 조합해서 새로운 문자를 만들때는 + operator를
사용하지 말아야 한다. + operator를 사용하면 immutable type이므로 문자가 추가되지 않고 새로운 변수를
만들어서 garbage가 많이 생성된다.
이럴때에는 string.Format()을 이용하거나 Stringbuilder(mutable type이다)를 이용하면 된다.
■ Terms
■ 해석이 모호하거나 중요한 구문
■ 단어
1. behalf: 이익 ,원조, 지지
2. illustrate : 삽화를 이용하다, 이용하다
3. seemingly : 겉보이게는, 외관상으로는
4. concatenate : 연쇄시키다, 결부시키다,연관시키다
5. facilitate : 용이하게 하다/가능하게 하다
6. in steps : 보조를 맞추다.
■ 피드백
'프로그래밍 > Effective C#' 카테고리의 다른 글
ITEM 18 : 값 타입과 참조 타임을 구별하라 (0) | 2015.04.23 |
---|---|
ITEM 17 : 표준 Dispose 패턴을 구현하라 (0) | 2015.04.23 |
ITEM 15 : 리소스 해제를 위해서 using과 try/finally 구문을 사용하라. (0) | 2014.05.30 |
ITEM 14 : 중복되는 초기화 로직을 최소화 하라. (0) | 2014.05.30 |
ITEM 13 : Static 멤버변수에 대해서 적절한 초기화를 하라. (0) | 2014.05.30 |
![]() |
|
아웃라이어(Outliers) - 성공의 기회를 발견한 사람들 (말콤 그래드웰)
성공한 사람들은 왜 성공을 했는가?
과연 일반 사람들와 무엇이 달라서 그들은 성공을 했을까? 라는 질문에 명쾌한(?)
답을 해주는 책이다.
저자는 [티핑포인트], [블링크-첫2초의힘]의 저자 말콤 그래드웰이다.
+내가 기존에 알고 있던 성공한 사람들에 대한 인식을 완전히 바꾸게 해준 책이다.
기존에는 아무리 불우하더라도 천재성으로 극복해서 성공을 했거나, 노력으로 자수성가를
했다고 막연하게 생각을 했다. 내 나름대로의 결론은 아래와 같다.
"한 분야에 1만 시간의 노력을 해서 준비된 사람이 타이밍 좋게 그 능력을 펼칠수 있는 환경에서 성공을 한다."
<책의 핵심 내용>
기회 part
1.마태복음 효과 : 태어난 날이 중요한 이유
-캐나다 하키선수는 빨리 태어날수록 성공할 기회가 많다.
(즉 덩치도 같은 나이에 비해 크며 그로 인해서 연습할 기회도 많고 1만 시간을 채우기에도 수월하다.)
2.1만시간의 법칙:한 분야에서 최고가 되기 위해서는 1만시간이 필요하다.
3.주변환경의 중요성:아무리 잘 태어나고 1만 시간의 투자를 했더라도 주변 환경이 안되면 성공하지 못한다.
-사회적인 환경이나 문화적 환경 가정의 환경에 따라서 성공여부가 결정이 된다.
유산 part
1.문화의 비밀 : 명예 문화처럼 문화적인 유산은 쉽게 사라지지 않는다.
2.아시아인이 수학을 잘하는 이유: 1년의 3000시간의 농사를 지음으로써 꾸준히 노력하는 것이 중요하다.
3.긴여름방학의 폐해와 쌀 농사 문화의 교훈: 공부에도 휴식이 필요하다는 서양문화는 잘 못 된것이다.
방학중에 얼마나 더 공부를 했냐에 따라서 방학이후에 성적이 달라진다.
+이책을 읽은 후에 많은 생각들이 들었다.
기존의 책들에서 강조했던 내용이 이론적으로 증명이 되는 느낌이었다.
한 분야에서 최선을 다해서 1만 시간을 채우고 준비된 사람이 이전에는 필요로 하지 않았지만 해당 영역이 발전해서 그런 인재가 필요한 시대가 오면 바로 능력을 발휘 할 수가 있는것이다.
+혼자서 잘나서 성공한 사람은 없다. 아무리 그사람이 천재라도 주변환경이 뒷받힘 되지 않으면 성공할 수 없다.
가령 아인슈타인이 천재라고 해도 어릴적에 교통사고를 당해서 죽으면 아무 소용이 없듯이 말이다. 사람은 항상
겸손해야하며 감사해야 할 줄 알며, 자기가 받은 것들을 다시 베풀 줄 알아야 한다.
'책 후기 > 1.문학 및 기타' 카테고리의 다른 글
선물(The Present)-스펜서 존슨 (0) | 2015.05.21 |
---|---|
마시멜로 이야기(Don't eat the Marshmallow...Yet!) (0) | 2015.05.20 |
독서 천재가 된 홍대리 (0) | 2015.04.10 |
내아이를 위한 감정코칭 -존 가트맨 (0) | 2015.03.24 |
창문 넘어 도망친 100세 노인 - 요나스 요나손 (0) | 2015.03.24 |
델리게이트 ( delegate , 대리자 )
1.델리게이트란
델리게이트란 간단히 말해서 C나 C++에서 사용하는 함수포인터의 기능을 합니다. 즉 함수를 가리키는 변수를 의미합니다.
델리게이트의 선언 및 사용은 아래와 같습니다.
public delegate void Del(string message); // 델리게이트와 연결될 함수 선언 public static void DelegateMethod(string message) { System.Console.WriteLine("Default:" + message); } // 델리게이트 초기화 Del handler = DelegateMethod; // 델리게이트 호출 handler("Hello World"); //결과 Default:Hello World
델리게이트르 선언후에 델리게이트에 함수를 할당해줍니다. 이때 델리게이트와 할당되는 함수는 같은 시그니처여야만 합니다.
즉, 같은 형태/같은 수의 파라미터를 받아야 하며 리턴도 같은 형태이어야 합니다.
여기에서는 파리미터로 string 을 하나 받고 리턴형으로 void 형태를 취했습니다.
델리게이트를 실행함으로써 원래의 함수가 실행이 됩니다. 델리게이트는 파라미터가 있으면 전달을 하며 리턴 값이 있으면 해당
값을 호출자에게 리턴합니다.
2.델리게이트 의 멀티캐스팅
델리게이트는 +/- 연산자로 둘 이상의 함수를 연결할 수 있습니다. 두개이상을 연결하는 것을 멀티캐스팅이라고 합니다.
+로 추가된 함수는 순차적으로 실행이 되며 만약 참조값이 있는 파라미터면 변경된 값들이 전달이 됩니다.
public class MethodClass { void Method1(string message) { Console.WriteLine("M1:" + message); } void Method2(string message) { Console.WriteLine("M2:" + message); } } MethodClass obj = new MethodClass(); Del d1 = obj.Method1; Del d2 = obj.Method2; Del d3 = DelegateMethod; //+연산자로 대상 등록 Del allMethodsDelegate = d1 + d2; allMethodsDelegate += d3; allMethodsDelegate("C#"); allMethodsDelegate -= d1; allMethodsDelegate("C#"); //결과 //M1:C# //M2:C# //Default:C# //M2:C# //Default:C#
이 델리게이트 +- 이용해서 함수를 추가하거나 삭제하는 것은 이벤트에서 사용이 가능합니다.
아래에서 다루겠습니다.
3.이벤트와 연계
델리게이트를 이용해서 이벤트를 처리가 가능합니다.
델리게이트를 선언후에 그것을 참조하는 곳에서 +로 이벤트를 등록합니다.
이것은 위에서 봤듯이 함수의 연결을 추가하는 것과 동일합니다. 즉, 이벤트가 발생된 클래스에서 해당 이벤트를
등록해서 함수를 구현해 놓은 클래스의 함수를 델리게이트가 연결되어 있다고 보시면 됩니다.
또한 이벤트 구독을 해지하려면 -연산자로 해지 해주면 더이상 이벤트를 받지 않습니다.
//다른곳에서 정의 된 클래스 public class SomthingDelegateEvent { public delegate void delPushMessage(string message); public event delPushMessage eventPushMessage; public void GenerateEvent(string PushMessage) { if (eventPushMessage != null) { eventPushMessage(PushMessage); } } } //클래스를 사용하는 곳에서 이벤트 등록 SomthingDelegateEvent DelegateEvent1 = new SomthingDelegateEvent(); DelegateEvent1.eventPushMessage += DelegateEvent1_eventPushMessage; DelegateEvent1.eventPushMessage += DelegateEvent1_eventPushMessage2; //이벤트를 가상으로 호출 DelegateEvent1.GenerateEvent("Multicast!"); //대리자가 연결되는 함수1 void DelegateEvent1_eventPushMessage(string message) { System.Console.WriteLine(message); } //대리자가 연결되는 함수2 void DelegateEvent1_eventPushMessage2(string message) { System.Console.WriteLine(message); } //결과 //Multicast! //Multicast!
'프로그래밍 > C#' 카테고리의 다른 글
[C#]익명메서드와 람다식 (0) | 2015.05.06 |
---|---|
[C#] Func<T, TResult> Delegate (델리게이트 캡슐화) (0) | 2015.05.04 |
[C#] Dispose VS Finalize (0) | 2015.04.14 |
[C#] Virtual(가상) vs Abstract(추상) vs Interface(인터페이스) (3) | 2015.04.02 |
[C#] Using 사용 (0) | 2015.04.01 |