C# - 변수(Variable)와 상수(Constant)의 개념

반응형

 

변수 (Variable)

  • 변수는 저장소(메모리)의 위치를 의미
  • 모든 변수에는 변수에 저장할 수 있는 값을 결정하는 형식이 존재
  • 변수 값은 할당 또는 연산자를 사용하여 변경
  • 변수의 이름은 대소문자를 구별(Case-sensitive)
    • 예) var1, Var1은 다른 변수로 취급

변수의 선언

  • 지역 변수 (=Local Variable, 로컬 변수)
    • 해당 메서드의 안에서만 사용하는 변수 선언
    • 메소드 호출이 끝나면 소멸
    • 기본값을 할당받지 못하기 때문에 반드시 사용 전에 값을 할당
  • 전역 변수 (=Field, 필드)
    • 클래스 안에서 클래스 내의 멤버들이 사용하는 변수로 선언
    • 클래스의 객체가 살아있는한 계속 존속되며 다른 메서드에서 참조 가능
    • 값을 할당하지 않으면 해당 타입의 기본값으로 자동 할당
      • 예) int 타입일 경우 기본값 0 할당

변수 범주

// 예시
class A
{
    public static int x;
    int y;

    void F(int[] v, int a, ref int b, out int c)
    {
        int i = 1;
        c = a + b++;
    }
}
  • x : 정적 변수
  • y : 인스턴스 변수
  • v[0] : 배열 요소
  • a : 값 매개 변수
  • b : 참조 매개 변수
  • c : 출력 매개 변수
  • i : 지역 변수

정적 변수 (Static Variables)

  • static 키워드를 사용하여 선언된 필드
  • 포함하는 유형에 대한 생성자를 실행하기전에 존재
  • 연결된 응용 프로그램 도메인에 더이상 존재하지 않으면 존재하지 않음

인스턴스 변수 (Instance Variables)

  • static 키워드 없이 선언된 필드

클래스의 인스턴스 변수 (Instance variables in classes)

  • 해당 클래스의 새 인스턴스가 생성될 때 존재
  • 해당 인스턴스에 대한 참조가 없고 인스턴스의 종료자(소멸자)가 실행되면 존재하지 않음
  • 변수의 초기값은 변수 유형의 기본값
  • 한정적 할당 확인을 위해 클래스의 인스턴스 변수는 초기에 할당된 것으로 간주

 

구조체의 인스턴스 변수 (Instance variables in structs)

  • 구조체 변수화 정확히 동일한 수명을 가짐
    • 구조체 유형의 변수가 존재하거나 존재하지 않으면 구조체의 인스턴스도 같은 상태
  • 변수의 초기 할당 상태는 포함하는 변수의 할당 상태와 동일
    • 구조체 변수가 초기에 할당된 것으로 간주되면 인스턴스 변수도 동일

배열 요소 (Array elements)

  • 배열 인스턴스가 생성될 때 존재
  • 해당 배열 인스턴스에 대한 참조가 없으면 존재하지 않음
  • 배열 각 요소의 초기값은 배열 요소 유형의 기본값
  • 한정적 할당 확인을 위해 배열 요소는 초기에 할당된 것으로 간주

값 매개 변수 (Value parameters)

  • ref 또는 out 키워드 없이 선언된 매개변수
  • 함수 멤버(메서드, 인스턴스 생성자, 접근자 또는 연산자) 또는 매개변수가 속한 익명 함수의 호출시 존재
  • 호출에 지정된 인수 값으로 초기화
  • 일반적으로 함수 본문의 실행이 완료되면 더 이상 존재하지 않음
  • 익명 함수에 의해 캡처되는 경우 생성된 대리자 또는 식 트리가 쓰레기 수집될 때까지 수명 연장
  • 한정적 할당 확인을 위해 값 매개변수는 초기에 할당된 것으로 간주

참조 매개 변수 (Reference parameters)

  • ref 키워드로 선언된 매개변수
  • 새 저장위치를 생성하지 않음
    • 함수 멤버, 익명 함수 또는 로컬 함수 호출에서 인수로 지정된 변수와 저장 위치가 동일
  • 값은 항상 기본 변수와 동일

출력 매개 변수 (Output parameters)

  • out 키워드로 선언된 매개변수
  • 새 저장 위치를 생성하지 않음
    • 함수 멤버 또는 대리자 호출에서 인수로 지정된 변수와 저장 위치가 동일
  • 값은 항상 기본 변수와 동일

지역 변수 (Local variables)

  • 다음 변수에 의하여 선언
    • local_variable_declaration
    • foreach_statement : 반복 변수
    • try_statement의 specific_catch_clause : 예외 변수
      • foreach_statement, specific_catch_clause에 의해 선언된 변수는 초기에 할당된 것으로 간주
  • 스토리지가 예약되도록 보장되는 프로그램 실행 부분에 존재
  • 해당 범위의 실행이 어떤 식으로든 끝날때까지 연결된 범위에 대한 항목부터 확장
  • 익명 함수, 캡처된 변수를 참조하게 되는 다른 객체와 함께 쓰레기 수집 될때까지 수명 연장
  • 재귀적으로 또는 반복적으로 입력되면 지역 변수의 새 인스턴스가 매번 생성

상수 (Constants)

// 예시
class Calendar1
{
    public const int Months = 12;
}
  • 프로그램 수명동안 변경되지 않는 불변 값
    • 초기에 정한 값을 변경 할 수 없음
  • 변수 앞에 const 키워드로 선언
    • C# 기본 제공 데이터타입으로만 선언 가능(System.Object 제외)
  • 필드 선언부에서 사용되거나 메서드 내에서 사용
  • 컴파일시 상수 값 초기화
  • 클래스, 구조체 및 배열을 포함한 사용자 정의 유형은 readonly 키워드 사용
    • readonly 키워드 : 개념적으로 상수와 비슷한 필드
    • 읽기전용 필드
    • 필드 선언부나 클래스 생성자에서 값 지정
    • 런타임시 값 초기화

참고

Microsoft - C# guide - Variables

Microsoft - C# guide - Constants

csharpstudy.com - C# 변수 및 상수

반응형