일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Kotlin
- 프로그래밍
- VS ERROR
- Tips프로그래밍강좌
- c#
- c
- 포인터
- Tips강좌
- Visual Studio
- Win32
- 연산자
- CS
- 리뷰
- 함수
- 문법
- Javascript
- doit코틀린프로그래밍
- c++
- 백준
- 지식나눔강좌
- Programming
- Desktop
- tipssoft
- 김성엽
- Windows
- 배열
- Direct2D
- 이지스퍼블리싱
- 티스토리
- 알고리즘
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
C# - 변수 선언 본문
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
'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 |