[Effective C#] const보다는 readonly가 좋다.

2024. 7. 24. 09:00·독서/Effective C#
목차
  1. 01. 컴파일 상수와 런타임 상수
  2. 02. IL 코드에서의 컴파일/런타임 상수


01. 컴파일 상수와 런타임 상수

C#에서 사용하는 상수라고 한다면, const 키워드와 readonly 키워드가 있다. 두 키워드의 차이점은 어느 시점에서 상수화가 진행되는지에 따라서 달라진다. 먼저 const 키워드는 컴파일 상수고 readonly 키워드는 런타임 상수다.

 

컴파일 상수는 런타임 상수에 비해서 빠른 편이지만, 유연성은 떨어지는 편이다. 그래서 변하지 않는 값임을 확신할 수 있다면 컴파일 상수로 작성하는 것이 좋으며, 변하는 값일 수 도 있다면 런타임 상수를 사용하는 것이 좋다.

 

이런 경우가 언제 있냐면, DB를 통해서 데이터를 수신받아서 상수화를 진행할 때 차이가 있다. 현재 라이브 중인 프로젝트의 이름이 'Unity'라면 정말 특수한 상황이 아닌 이상, 프로젝트의 이름은 불변할 것이다.

 

이때는 컴파일 상수를 통해서 게임 이름을 저장해도 괜찮지만, 플레이어의 닉네임 같은 경우에는 변동될 여지가 있을 것이다. DB에 저장된 데이터를 내려받을 때 런타임 상수를 통해서 적용한다면 그에 따라 값을 변경할 수 있다. 런타임 상수는 클래스 생성자에서 값을 입력할 수 있기 때문이다.

 

다른 차이도 한 번 살펴보자.

 


02. IL 코드에서의 컴파일/런타임 상수

C# 코드는 컴파일 과정에서 IL 코드로 변경되고 이후 어셈블리로 변경된다. 이때 IL 코드로 변환된 컴파일 상수는 다음과 같이 표기된다.

const int number = 1000;

// C#
number

// IL
1000

 

C#에서는 number 변수로 작성하였으나 IL 코드는 바로 number 변수에 적용된 값을 표기하는데, 이는 컴파일 상수가 IL 단계에서는 값으로 표기되기 때문이다. 하지만 이와 달리, 런타임 상수는 상수에 대한 참조로 컴파일을 진행하기 때문에 값으로 표기되지 않는다.

 

 

'독서 > Effective C#' 카테고리의 다른 글

[Effective C#] nameof 연산자를 적극 활용하라  00 2024.08.01
[Effective C#] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라  00 2024.07.31
[Effective C#] string.Format을 보간 문자열로 대체하라  00 2024.07.30
[Effective C#] 캐스트보다는 is, as가 좋다  00 2024.07.29
[Effective C#] 지역변수를 선언할 때는 var를 사용하는 것이 낫다  11 2024.07.23
  1. 01. 컴파일 상수와 런타임 상수
  2. 02. IL 코드에서의 컴파일/런타임 상수
'독서/Effective C#' 카테고리의 다른 글
  • [Effective C#] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라
  • [Effective C#] string.Format을 보간 문자열로 대체하라
  • [Effective C#] 캐스트보다는 is, as가 좋다
  • [Effective C#] 지역변수를 선언할 때는 var를 사용하는 것이 낫다
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서 N
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
        • 이득우의 게임 수학 N
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      오블완
      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [Effective C#] const보다는 readonly가 좋다.
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.