티스토리 뷰

프로그래밍

C# 배열 초기화 방법

야라바 2018. 12. 12. 16:16


C#에서 딕셔너리, 큐, 리스트 등 다양한 데이터 집합 클래스를 지원하지만 배열만큼 성능을 보장하는 데이터 타입은 없습니다. 한가지 데이터 타입을 가지고 인덱스로 각 원소를 접근하는 단순한 사용법을 가집니다.


배열을 다양한 용도로 사용하다 보면 초기화 필요성이 생기는데 그 필요성을 크게 두가지로 나누면

배열을 상수처럼 정적인 데이터로 사용하기 위해서 실제 데이터 입력하는 경우가 그 첫번째이고 다른 한가지는 동적으로 배열을 사용하는 경우 0이나 널 값등으로 초기화하는 사례를 들 수 있습니다.


String[] statstr = new String[] { "설정", "설정 오류", "시작하지 않음", "정상 동작중", "연결중", "비정상 종료" };

public class DICObj
{
	public string 원어 { get; set; }
	public string 발음 { get; set; }
	public string 유래 { get; set; }
	public string 정의1 { get; set; }
	public string 정의2{ get; set; }
}
    
public class DicNT
{
	public static DICObj[] dic = new DICObj[] {
null, 
new DICObj { 원어="Α", 발음="al'-fah", 유래="of Hebrew origin;",정의1="the first letter ...:",정의2="--Alpha. ..."},
new DICObj { 원어="Ἀαρών", 발음="ah-ar-ohn'", 유래="of Hebrew origin (H175);",정의1="Aaron, ...",정의2="Aaron."},
new DICObj { 원어="Ἀβαδδών", 발음="ab-ad-dohn'", 유래="of Hebrew origin (H11);",정의1="a destroying angel",정의2="Abaddon."},
new DICObj { 원어="ἀβαρής", 발음="ab-ar-ace'", 유래="from G1...;",정의1="weightless,...",정의2="from being..."},
new DICObj { 원어="Ἀββᾶ", 발음="ab-bah'", 유래="of Chaldee origin (H2);",정의1="father as a vocative",정의2="Abba."}
	}
	//......
}


위의 예제는 배열을 상수 처럼 정적인 용도로 사용하기 위한 초기화 예제 입니다. String 배열인 statstr을 원소 개수는 대괄호 내부에 기술하는 문자열 상수의 개수만큼 설정 됩니다.  DICObj 클래스의 배열인 dic의 경우에는 대괄호 내부에 개별 클래스에 대한 초기화 문장을 기술하는 것을 참조 할 수 있습니다.


bool[] flag_client = new bool[Allclient.Count];
flag_client.Initialize();


두번째 사례는 배열의 동적 사용을 위해서 0이나 null값으로 배열 전체 원소를 초기화하는 것으로 위의 예제에서 보듯이 배열의 Initialize() 메소드를 사용하면 간편하게 배열의 전체 원소를 초기화 할 수 있습니다. 이 방법이 아니라면 for나 while문을 통해서 개별 원소를 일일이 초기화 해야 할 것입니다.


동작 원리는 배열의 Initialize() 메소드를 호출하면 해당 데이터 타입의 생성자를 호출하는 방식으로 초기화를 수행하는 것으로 만약 사용자 클래스의 배열을 초기화한다면 해당 클래스의 생성자를 호출하므로 참고해서 적절한 조치를 취하면 됩니다. 문제는 C# 내부에서 지원하는 타입인데 byte, float, decimal, double, int, long .....등의 숫자 타입 들은 0이나 0.0으로 초기화되고 char 타입은 '\0', bool 타입은 false로 초기화 합니다.





댓글
댓글쓰기 폼