[c#/.net] const vs readonly 공부하기

const vs readonly
readonly 키워드는 const 키워드와 다릅니다. const 필드는 필드를 선언할 때만 초기화될 수 있습니다. readonly 필드는 필드를 선언할 때 또는 생성자에서 초기화될 수 있습니다. 따라서 readonly 필드의 값은 사용된 생성자에 따라 다릅니다. 또한 const 필드는 컴파일 타임 상수인 반면 readonly 필드는 다음 예제에서와 같이 런타임 상수로도 사용할 수 있습니다.
출처 : msdn.microsoft.com

컴파일 타임 상수 vs 런타임 상수

컴파일 타임 상수는 코드가 컴파일될 때 계산되고 런타임 상수는 응용 프로그램이 실행되는 동안에만 계산됩니다. 컴파일 타임 상수는응용 프로그램 실행에 관계없이 항상 같은 값을 갖지만 런타임 상수는 매번 변경될 수 있습니다. 컴파일 타임 상수는 배열 범위,case 식 또는 열거자 이니셜라이저 등의 경우에 필요합니다.

출처 : msdn.microsoft.com

컴파일타임 상수는 런타임 상수에 비해 다소 빠르지만 유연성이 떨어진다. 컴파일 타임 상수는수행성능이 매우 중요하고 상수값이 절대로 바뀌지 않는 경우에 한해서만사용하는 것이 좋다.

컴파일 타임 상수는 단지 내장자료형(정수형, 실수형) 이나 enum, string 에 대해서만 사용될수 있다. 이는 내장 자료형만이 유일하게 변수의 초기화 단계에서의 의미를 가지고 문자 자체로 표현되는 값(literal value)을 대체할 수 있기 때문이다.
출처 : Effective C#
 
장단점

readonly 대신 const 를 썼을 때의 유일한 장점은 수행성능이다. 이미 알려진 상수값에 직접 접근하는 효율이 readonly로 지정된 변수의 값을 참조하는 것에 비해서 조금 더 빠르다.그렇지만 이를 통해 얻을수 있는 수행성능의 개선효과가 작고 무엇보다 유연성을 감소시키는 단점이 있다. 유연성을 포기하기 이전에 수행성능에 미치는 영향을 먼저 명확하게 하자.
출처 : Effective C#

즉 const 로 선언한것은 변경을 하더라도 전체 컴파일 전까지는 반영된 내용이 적용되지 않습니다. 즉 const 로 선언한것을 수정할 경우는 재컴파일 하지 않고 배포한다면 원하는 결과는 나오지 않기 때문에 변경에 빈도가 있는 것은 const 를 사용하지 않는것이 좋습니다. 

역시 코드를 보는게 이해하기 쉽겠죠 ?? 밑에 내용은 msdn 에 있는 샘플 코드 입니다.







C# 언어 사양
10.4.2.2 상수 및 정적 읽기 전용 필드의 버전 관리

상 수와 읽기 전용 필드의 이진 버전 관리 의미는 다릅니다. 식에서 상수를 참조할 경우 컴파일 타임에 상수 값을 가져오지만, 식에서 읽기 전용 필드를 참조할 경우 런타임까지 필드 값을 가져오지 않습니다. 별개의 두 프로그램으로 구성된 응용 프로그램을 살펴보겠습니다.


using System;
namespace Program1
{
   public class Utils
   {
      public static readonly int X = 1;
   }
}
namespace Program2
{
   class Test
   {
      static void Main() {
         Console.WriteLine(Program1.Utils.X);
      }
   }
}

Program1Program2 네임스페이스는 별도로 컴파일된 두 프로그램을 나타냅니다. Program1.Utils.X를 정적 읽기 전용 필드로 선언했기 때문에 Console.WriteLine 문에서 출력하는 값을 컴파일 타임에 알 수 없으며, 런타임에 해당 값을 가져옵니다. 따라서 X 값이 변경되고 Program1이 다시 컴파일되면 Program2가 다시 컴파일되지 않더라도 Console.WriteLine 문이 새 값을 출력합니다. 그러나 X가 상수였기 때문에 Program2를 컴파일 할 때 X 값을 가져오며, Program2를 다시 컴파일할 때까지 Program1의 변경으로 인해 영향을 받지 않습니다.

출처 : msdn.microsoft.com
즉 program1 에 x 를 2로 변경후 Program1 만 컴파일 한다면 Program2 에서 찍어보는값은 변경이 적용된 값입니다. 
여기서 program1 에 x 값은 2로 변경한 값을 유지하고 Program3 을 추가하고 Program2 다음과 같이 변경했다고 가정해봅시다.
 
namespace Program3
{
   public class Utils
   {
      public const int X = 1;
   }
}

namespace Program2
{
   class Test
   {
      static void Main() {
         Console.WriteLine(Program1.Utils.X);
         Console.WriteLine(Program3.Utils.X);

      }
   }
}
이 코드에 결과는 2,1 입니다. 두번째 Program3.Utils.X 값을 2로 변경하고 Program1 과 Program3를 컴파일해서 돌린다면 결과는 2,1 입니다. Program2 를 컴파일 하기 전까지 const 값은 변경된 내용이 반영되지 않습니다.

미용실영양에서 집에서 하는 영양으로...주절거림 주절주절

제 머리가 그리 ...착하지 않아 언제나 속을 썩이네요 ...
미용실 가서 몇만원 짜리 영양으로 공을 드려도 ..어찌하여 ... 별 나아지지 않더라고요 ..
그래서 하루는 미용실에서 쓰는 저 약품이 얼마나 할가 하고 인터넷으로 알아보니 ..
오호라 .... +.+

3~4만원으로 받은 영양인데 ..한 캡슐에 4천원도 안하더라고요..
그래서 질러버렸습니다....

로레알 메가서플라이 앱솔루트10mlx15ea

15캡슐 사니까.... 분무기고 따라오더군요 ㅎㅎ
겸사 겸사 헤어캡도 질러 일주일에 한번씩 해줬습니다.

사용법은 ...샴푸후에 물기만 제거하고 머리 끝 부분에 집중해서 발라주고..
헤어캡 쓰고 .. 미드 반편만 질러주고 나면 끝입니다...
한 30분 정도 쓰고 있으라고 하더라고요 ...
아..가끔 어떤 제품은 행궈주지 않아도 된다고 하는데..이건 행구라고 나와 있더라고요..


전 미용실에서 하는것과 집에서 하는것에 ... 별 차이를 모르겠더라고요.

아! 그리고 영양후 다음날은 삼푸는 하지 말라고 합니다. 이유인 즉 삼푸하면 좋은 영양분도 같이 제거 되기 때문이라네요
전 그래서 다음날만큼은 산성삼푸를 사용합니다.


[07/50] 스타는 미쳤다 - 2009 ===== 책

스타는 미쳤다
보르빈 반델로브 지음, 엄양선 옮김 / 지안
나의 점수 : ★★


성격장애가 모두 나쁘다는것은 아닙니다.
일부에 성격장애는 남들에 주위를 끌고 싶어하며. 타인으로 하여금 감탄을 끌어내려 하는 성격장애들이 존재하고,
그런 성격 장애를 가진 사람들은 많은 사람으로 부터 사랑을 받게 돼며 그 사랑으로 스타에 자리에 오르게됩니다.
따라서 스타들은 이런 성격장애로 인해 사랑을 받았지만 그런 성격으로 인해 자신에 목숨을 앗아가는 결정을 한다는게 이책에 느낌입니다.

또한 이런 성격 장애를 가진 이들이 지극히 타인의존적이기 때문에 같은 말 또는 행동이 성격장애를 가지지 않은 사람들과 다르게 적용될수 있다고 말합니다. 즉 안좋은 한마디를 들었을때 그것을 신경쓰지 않고 툴툴 털어버리는 사람이 있는가 하면 그 말로 인해 죽음을 생각할 정도록 힘들어 하는 사람이 존재 합니다. 그런경우가 신경장애를 가진자 들이 많다고 말해줍니다.

아마 그렇게 타인 의존적 이기 때문에 다른 사람으로 부터 사랑을 받는게 아닐까 생각하게 됩니다.
 그리고 리포트 이다 보니 성격장애에 관한 지식을 얻을수 도 있습니다. 성격장애라고 하니 좀 거창하게 들릴수 있지만 우리가 흔히 알고 있는 다중인격에 대한 배경부터 이런 병이 있지 않을수 있다는 논란까지 잘 정리돼어 있어 있습니다.

조금 아쉬움 점은 타이틀에 걸맞지 않게 스타들에 대한 분석이 부족하지 않았나 생각해 봅니다. 
여기서 소개하고 있는 스타들은 모두 어렸을적 불우한 환경 또는 부모로 부터 물려받은 성격에 소유로 인해 나쁜 결말을 가지게 됐다 입니다. 그래서 그런지 뒤로 갈수록 책과에 공감대가 잘 이뤄지지 않는다는 느낌을 받았습니다.


 위에서도 잠깐 이야기 했듯이 책에 대해 아쉬운점을 말한다면.
심리학적 책이으로 접근한다면 극단적인 성격장애를 가진 스타들과 일반 사람들도 심하지는 않지만 조금씩은 성격장애를 보유하고 있고 그런 성격 장애를 극복하고 싶어한다는 내용이 첨부되었으면 허전함을 느끼는 책이 아니였을 텐데 라는 생각이 듭니다.
또한 정신분석학 리포트 측면에서 본다면 어렵고 사람들이 이해하기 힘들어 할수 있는 부분을 이해하기 쉽게 잘 풀었다는 점에서 권하고 싶지만 이 비중은 책에 타이틀에서 봤듯이 크지 않습니다.

그래서 조금은 아쉬운 책이지 않을까 싶습니다.





1 2 3 4 5 6 7 8 9 10 다음



메모장_구글

세상에 좋은 결정인지 아닌지
미리 아는 사람은 아무도 없어.
우리가 할 수 있는 건 다만,
어떤 결정을 했으면
그게 좋은 결정이었다고
생각할 수 있게
노력하는 일뿐이야