C# 상수

김찬수·2023년 1월 24일
0

상수

개요

  • 일반적으로 온라인 게임은 서버가 클라이언트 버전을 체크
  • int 타입의 객체를 만들어서 클라이언트의 버전 정보를 저장했는데, 누군가가 실수로 저장된 정보를 변경한다면 프로그램이 망가져버림
  • 이런 실수를 방지하기 위해서 한번 값을 정해놓으면 절대 바뀌지 않는 기능을 제공하는데 그 기능이 상수

변수와 상수

  • 상수를 배우기 전에 만든 객체는 언제든 데이터(값)를 수정할 수 있었음
  • 대부분의 프로그래밍 언어에서는 이와 반대로 수정할 수 없는 상수를 지원
  • 상수는 항상 똑같은 데이터(값)

기호 상수

  • 상수는 데이터가 변경되는 것을 막고자 할 때 사용, 많이 쓰는 사례가 바로 기호 상수(Symbolic Constant)

  • 사람은 숫자와 친하지 않고 문자와 친함
    ex) 그냥 299672458 이라는 숫자가 주어졌을 때 어떤 의미를 가지는지 모르지만, const int SPEED_OF_LIGHT = 299672458; 라고 주어진다면 빛의 속도가 299672458 구나 하고 알 것이다.

  • 이처럼 어떤 의미인지 모르는 값을 마법의 숫자(Magic Number)라고 하고, 이는 코드의 가독성을 매우 떨어뜨리기 때문에 숫자 대신 이름을 붙여 가독성을 높이는게 좋음

  • 이를 상수에 이름을 붙였다고 하여 기호 상수라고 함

const

  • 키워드 중에 *한정자(Modifier)라는 것이 있음
  • 한정자는 다양한 구성요소에 붙일 수 있음
    ex) 클래스, 스트럭트, 객체 등
  • 한정자를 붙이면 기능에 제한이 생김
  • const는 객체에만 사용할 수 있음
  • 상수는 컴파일 타임에 평가가 이뤄지기 때문에 식을 작성할 때, 컴파일 타임에 평가를 할 수 있는지 유의
  • 컴파일 타임에 완전히 평가할 수 있는 식을 상수 식이라고 함
    ex) 데이터가 저장된 객체(변수)는 상수에 대입할 수 없음
  • 상수에 대입할 수 있는 데이터(값)는 수, 문자열, 불리언, 널(Null)

열거형

  • 관련 있는 여러 기호 상수를 묶기 위한 도구
  • 열거형도 타입이기 때문에 객체의 타입으로 지정할 수 있음
  • 조금 더 구체적으로 데이터를 나타낼 수 있음
    ex) int playerDirection = DIRECTION_LEFT; vs Direction playerDirection = Direction.Left;

문법

  • enum 이라는 키워드를 사용하고 그룹(카테고리 비슷)의 이름을 적어줌
  • 열거형으로 묶인 데이터들은 연관 있는것들만 있어야함
  • 멤버의 타입은 기본적으로 정수 int 타입
  • 타입을 변경할 수 있지만 변경하는 일은 매우 드묾
  • 내부 멤버의 값을 지정해주지 않을 경우 자동적으로 정해짐
    ex) 첫번째 멤버는 0, 두번째 멤버부터는 이전 멤버의 값 + 1
  • 각 멤버마다 값을 따로 지정할 수도 있음

멤버 타입과의 변환

  • 열거형은 멤버 타입과의 변환이 가능
  • 암시적으로 변환은 불가능하고 명시적으로 캐스팅 해줘야함
    ex) int playerDirection = (int)Direction.Left;

비트 플래그

  • 어떤 비트가 1일 때의 의미를 나타내기 위한 상수의 모음
profile
프로그래머 지망생

0개의 댓글

관련 채용 정보