안녕하세요. BlockDMask 입니다.
오늘은 C# 에서 상수를 나타내는 두 키워드 const, readonly 에 대해서 알아보려고 합니다.
<목차>
1. const 상수 설명과 예제
2. readonly 상수 설명과 예제
3. const, readonly 차이점 예제 한눈에 보기
1. C# const 상수 설명과 예제
상수가 무엇인지 먼저 간단하게 이야기 하면 "상수는 변하지 않는 값"을 의미합니다.
(반대로 변수는 변하는 값을 의미합니다.)
const는 컴파일 타임의 상수입니다
컴파일 할때 값이 결정 되는 상수입니다.
아래와 같이 선언과 동시에 초기화가 되어야합니다.
이렇게 초기화된 최초의 값은 프로그램 실행 중간에 변경 할 수 없습니다.
public const int a = 10;
const string str = "blockdmask";
위 코드 예제를 보면 클래스 멤버필드로
public const, private const 상수를 선언 함과 동시에 초기화를 진행했습니다.
클래스 생성자에서 초기화를 시도 하려했지만 역시 error 입니다.
const 는 무조건 선언과 동시에 초기화 해야하고 값을 변경할 수 없습니다.
main 함수 내부를 보면 const bool isMale 이라는 코드가 있습니다.
이렇게 const 키워드는 함수 내부에서 상수를 이용하고 싶을 때도 자유롭게 만들 수 있습니다.
2. C# readonly 상수 설명과 예제
readonly 도 const 와 마찬가지로 상수입니다. 한번 초기화 해두면 값이 변경되지 않는 상수 입니다.
단 readonly 는 조금 유연합니다.
readonly 는 const 와 달리 런타임 상수 입니다. 즉, "프로그램이 실행중에 초기화 하는것도 가능한" 상수 입니다.
언제 초기화를 할 수 있냐면, 클래스 생성자에서만 값을 변경(초기화) 해 줄 수 있습니다.
readonly 를 사용할때 선언과 동시에 초기화 할 수도 있지만
readonly int b = 20;
초기화를 해두고 생성자에서 바꾸거나, 초기화를 하지 않고 생성자에서 최초로 초기화를 해주거나 하는 등
값을 런타임중에(프로그램 실행 중에) 세팅을 할 수 있습니다.
class Example
{
public readonly int c;
public readonly int d = 20;
public Example()
{
c = 99; // 생성자 내부에서 초기화 가능
d = 33;
}
}
단, readonly 는 함수의 멤버로는 사용할 수 없습니다. (함수 내에서 readonly 로 상수 사용 불가)
예제를 바로 보겠습니다.
클래스의 멤버로 readonly는 pulbic, private 어떻게든 사용해도 상관없습니다.
readonly 의 이점은 생성자에서 최초 1번. 따아아악 1번 초기화가 가능하다는 것 입니다.
이렇게 프로그램이 시작하고 생성자에서 초기화가 가능하기 때문에 다양한 상황에서 쓰일 수 있습니다.
main 함수 내부에 맨 아래를 보면 readonly로 함수 내부에서 상수를 선언해보려 했지만 오류가 나는 것을 알 수 있습니다.
보는바와 같이 readonly 는 함수 내부에서 사용할 수 없다는 제약이 있습니다.
3. C# const, readonly 차이점 예제
const, readonly 각각의 장점과 단점이 있기 때문에 프로그램을 만들때 적절하게 잘 사용하시면 됩니다.
const 는 컴파일 타임 상수라서, const 값을 변경하는 경우 컴파일 부터 다시 해야하는 비용이 들기도 합니다.
readonly 는 위에서 이야기 했듯, 값을 생성자에서 초기화 할 수 있습니다.
좀 극단적으로 이야기 한다면 생성자를 통해서 readonly 에 값을 세팅할때 프로그래머도 예상치 못하는 상수 값으로 세팅 될 수도 있습니다.
이제 cosnt 와 readonly 를 같이 사용한 코드를 보겠습니다.
const 와 readonly가 무슨 차이가 있는지 자세히 볼까요
const 로 선언한 상수는 정적 변수(static 변수)와 동일하게 취급되기 때문에 "클래스.상수"로 접근이 가능합니다.
하지만 readonly 로 선언한 상수는 "인스턴스.상수"로 접근해야합니다.
const 로 선언한 JobName은 Student.JobName으로 접근이 가능하고
readonly 로 선언한 StudentName은 stu.StudentName 으로 접근을 한 이유가 바로 그것입니다.
또 readonly 를 이용하니 저렇게 생성자에서 특정 조건을 처리해서 값을 세팅해줄 수 있는 이점이 있기도합니다.
이 포스팅을 읽은 모든 분들은 필요에 따라서 어떤 키워드 (readonly or const)를 이용할지 잘 판단해서 작성하시길 바라겠습니다.
참고러 변수선언 규칙은 아직 저도 C#을 배우는 중이기 때문에 어느게 유명한 방법인지 더 알아보겠습니다.
감사합니다. 이렇게 오늘은 C# 의 const, readonly에 대해서 알아보았습니다.
'<개인공부> > [C#]' 카테고리의 다른 글
[C#] ref 매개변수 한정자 설명 및 에제 (ref 키워드) (0) | 2022.10.22 |
---|---|
[C#] 확장 메서드 (Extension Method) 설명과 예제 (0) | 2022.10.15 |
[C#] Equals, ==, ReferenceEquals 비교 및 설명 (0) | 2022.10.08 |
[C#] 실행 시간 측정, 코드 수행 시간 측정(Stopwatch) (0) | 2022.09.25 |
[C#] 타입 조사 Type, 리플렉션(reflection) (0) | 2022.09.11 |
[C#] 인덱서 객체(인스턴스)를 배열 처럼 사용해보자 (0) | 2022.09.04 |
[C#] Math.Clamp 메서드(함수) 설명 및 예제 (0) | 2022.07.18 |
[C#] string Trim, TrimEnd, TrimStart에 대해서 (공백제거, 문자제거) (2) | 2019.11.07 |