F.R.I.D.A.Y.

C# - 변수 선언 본문

DEV/.Net

C# - 변수 선언

F.R.I.D.A.Y. 2021. 5. 27. 01:20
반응형

 C# 자료형 및 변수 선언

 

# 해당 시리즈는 C++과 비교하며 포스트가 진행됩니다.

# 기반은 링크된 사이트입니다.


자료형

 C#은 기본적으로 128bit 정수까지 표현 가능한 .Net 자료형을 제공한다. 대부분 C++과 비슷한 구성을 가지고 있으며, 선언 또한 비슷하다.

bool true/false (s)byte 8비트 (unsinged) 정수
(u)short 16비트 (unsigned) 정수 (u)int 32비트 (unsigned) 정수
(u)long 64비트 (unsigned) 정수 float 32비트 단정밀도 부동소수점
double 64비트 배정밀도 부동소수점 decimal 128비트 정수
char 16비트 유니코드 문자 string 유니코드 문자열
System.DateTime 날짜 및 시간(C# 키워드 X) object 모든 타입 기본 클래스

 중요한 것은 C++에서는 1바이트 크기 문자를 대표하는 char 자료형이 C#에서는 2바이트 유니코드를 표현하기 위한 자료형이라는 것이다. 

 

변수 네이밍

 변수 네이밍 또한 C++과 다를 것이 없다.

  • 알파벳 대소문자 + 아라비아 숫자 + 특수문자(_)
  • 변수 머리에는 아라비아 숫자 사용 불가
  • 대소문자 구분
  • 이름이 CS 키워드인 경우 사용 불가[# 만일 사용하려면 @를 머리에 붙여서 변수임을 알려야한다. 예외 규정인 듯. 근데 이렇게까지 쓰지는 말자. 제발..!]
int a;
int _a;
int 1a; // 오류
int (a; // 오류
int @if; // 예외 규정으로 인해 정상

 

 

배열

 CS에서 배열은 최대 32차원까지 지원한다.[# 이정도면 정적배열 쓰지 말고 동적 배열좀 쓰자, 애초에 웬만한 정보는 4차 배열 이내로 처리할 수 있다. 고밀도 데이터가 아니고서야 4차원을 넘어서는 배열로 구성했다면 웬만해선 데이터 구조를 다시 작성하는 것을 추천한다.. 오히려 코드도 복잡해지니까] 차원별 길이가 모두 같은 고정폭 배열과 차원별 길이가 모두 다른 가변배열로 나뉜다. 일단 배열 선언은 아래와 같이 할 수 있다.

int[] arr = {1,2,3,45,6,6,7};
int[,] arr = { { 123, 123 },{ 234, 234 } };

int[][] dyArr = new int[3][];
dyArr[0] = new int[4];
dyArr[1] = new int[3];
dyArr[2] = new int[1];

 C++과 다른 점이라 하면 위 코드의 세번째와 같이 가변 배열을 만들려 하면 숫자를 먼저오는 대괄호에 넣어주어야한다는 점이었다. C++과 혼동을 줄이기 위해서가 아닐까 생각이 들지만 처음 배울 때는 좀 더 혼동이 오지 않을까 생각한다.

 

 모든 배열은 내부적으로 System.Array라 불리는 .Net Framework 자료형에서 파생된다고.

 

다차원 배열

 다차원 배열의 경우 표현 방식이 C++과 조금 다르다. C++에선 각 차원을 대괄호로 나누었다면, C#에선 배열은 선언 방식에 따라 표현 방법이 다르다.

int[,] sticArr = {{1,2,3}, {4,5,6}};

int[][] dyArr = new int[2][];
dyArr[0] = new int[3]{1,2,3};
dyArr[1] = new int[3]{4,5,6};

sticArr[1,1];
dyArr[1][1];

 작성 방식에 따라 다른 호출 방법을 가지는데 이유는 알아봐야 할 듯 하다.

 

메서드 작동

다차원 배열에서는 메서드 및 프로퍼티도 다른 구성을 취한다. 비슷해보이는 Length 프로퍼티와 GetLength 메서드는 다음의 차이를 가지고 있다.

int[,] arr = new int[,]{{1,2,3}, {4,5,6}};

 이러한 형식의 배열을 구성했을 때, Length 프로퍼티는 모든 차원의 각 요소의 길이를 더한 총 길이를 반환한다. 즉, 위 코드에서 Length는 6을 반환한다. 그러나 GetLength 메서드는 인수로 인덱스를 넘기는데, 인덱스에 해당하는 하위 배열의 길이를 반환한다. 따라서 위 arr 배열의 0번 인덱스를 넘기게 되면

arr.Length; // output: 6
arr.GetLength(0);
// output: 3
// {1, 2, 3}

 앞쪽 배열 {1, 2, 3}에 해당하는 길이 3을 반환한다. 동시에 인덱스 범위를 벗어나는 값을 인수로 넘기게 되면 오류를 토해낸다.

 

값의 전달

 C#에서 배열을 다른 함수로 전달할 때는 레퍼런스 전달을 수행한다. 값의 전달이 아니기 때문에 아래와 같은 상황에서 배열의 값을 변경하면 콜러의 값도 변경된다.

        static void Main(string[] args)
        {
            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
            System.Console.WriteLine($"합:{value(arr)}");
            for(int i = 0; i < arr.Length; ++i)
            {
                System.Console.WriteLine($"{arr[i]}");
            }
        }
        static int value(int[] arr)
        {
            int sum = 0;

            for(int i =0; i < arr.Length; ++i)
            {
                System.Console.WriteLine($"{i}번째: {arr[i]++}");
                sum += arr[i];
            }

            return sum;
        }

 

# index

728x90
반응형

'DEV > .Net' 카테고리의 다른 글

C# - enum(열거형)  (0) 2021.05.27
C# - 문자열  (0) 2021.05.27
.Net 프레임워크의 통합  (0) 2021.05.27
XdobeFixGUI v3.0  (1) 2019.08.12
[개발일기] 결과를 뭐로 보여줄지 모르겠네  (0) 2019.06.19
Comments