반응형
변수 (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
반응형