-
[Unity]유니티 입문하기 5-3(C# 기초개념 - 형변환, 배열)프로그래밍 2023. 7. 27. 00:32
이전 글에서는 변수를 선언하는 법과 자료형의 종류에 대해서 알아봤습니다.
이번에는 자료형을 바꾸는 형변환과, 같은 자료형 여러개를 동시에 관리하기 좋은 배열에 대해서 알아보겠습니다.
형변환
형변환은 말 그대로 어떤 값의 자료형을 변환하는 것입니다.
물론 모든 값의 자료형을 제한 없이 마음대로 변환할 수 있지는 않죠.
형변환에는 암시적 형변환과 명시적 형변환의 두가지 종류가 있습니다.
암시적 형변환
저번 글에서 정수형의 자료형이 8가지가 있었던 것 기억하시나요?
메모리의 효율적인 사용을 위해 똑같이 정수를 담는 자료형임에도 다른 자료형으로 분류가 되었죠.
그럼 만약에 범위가 작은 자료형의 값을 범위가 큰 자료형의 값에 담으려고 하면 어떻게 될까요?
int타입의 값을 long타입의 값에 담는다고 하더라도, 작은 그릇에 담겨있던 내용물을 똑같은 역할을 하는 큰 그릇에 담는 것이니 문제가 되지 않을 것 입니다.
이런 식으로 작은 자료형의 값을 큰 자료형의 값에 담는 것을 암시적 형변환이라고 하며, 이는 별다른 연산자 없이도 자연스럽게 일어납니다.
int a = 1; long b = a;
따라서 암시적 형변환의 경우 위와 같이 코드를 짜는 것만으로 자연스럽게 형변환이 일어납니다.
명시적 형변환
그렇다면 반대로 범위가 큰 자료형의 값을 범위가 작은 자료형의 값에 담으려고 하면 어떻게 될까요?
이 또한 그릇으로 비유해보면 이해하기 쉽습니다.
큰 그릇에 담긴 물을 작은 그릇에 옮기려고 하다 보면, 어떻게 해도 물이 남게 되죠.
이건 변수에도 똑같으며, 곧 자연스러운 형 변환이 일어나지 못한다는 의미이기도 합니다.
따라서 암시적 형변환 떄와 같이 코드를 짜게 되면 컴파일 에러가 발생하게 되죠.
long a = 1; int b = (long)a;
따라서, 위와 같이 연산자를 이용해 명시적으로 형변환할 것임을 컴파일러에 선언하게 됩니다.
명시적 형변환은 캐스팅(casting)이라고도 부르며, 이에 따라 이러한 연산자를 캐스팅 연산자라고 부릅니다.
배열
여태껏 변수를 선언할 때 다음과 같은 방식을 이용해왔습니다.
int a;
그런데 만약, 같은 자료형의 변수를 여러개 선언해야 한다면 어떡할까요?
예를 들어 성적을 관리할 때, 전교생의 수만큼 변수를 선언하는 것은 매우 비효율적이고, 관리도 힘들 것입니다.
이럴 때, 우리는 배열을 이용해 여러개의 변수를 한번에 저장하고, 인덱스를 통해 접근할 수 있습니다.
int[] scores;
배열을 선언하는 법은 간단합니다. 위와 같이 자료형 옆에 []를 붙이면, 해당 자료형의 배열이 선언됩니다.
int[] scores = new[5];
하지만, 배열은 그 크기가 유동적인 데이터 구조이고, 따라서 위와 같이 new라는 키워드와 요소의 개수를 선언해 메모리를 할당받아야 합니다.
이렇게 배열을 선언하게 되면, 변수를 선언할 때 아무 값도 지정하지 않은 것과 마찬가지로 배열 내의 모든 값이 해당 자료형의 기본값으로 저장되게 됩니다.
int[] scores = new int[]{10, 20, 30, 40, 50};
다른 자료형들처럼 배열을 선언할 때 값도 같이 지정해주고 싶다면, 위와 같이 하면 됩니다.
int[] scores = {10, 20, 30, 40, 50};
혹은, 위와 같이 축약해서 쓸 수도 있죠.
이렇게 하면 요소의 개수를 쓴 것과 마찬가지이므로, 대괄호 안에 이 배열이 몇개의 요소를 지녔는지 넣지 않아도 됩니다.
그럼 한번 배열을 생성하고 그 값을 출력해보도록 하죠.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { int[] scores = new int[5]; void Start() { scores[0] = 10; scores[1] = 20; scores[2] = 30; scores[3] = 40; scores[4] = 50; Debug.Log(scores[0]); Debug.Log(scores[1]); Debug.Log(scores[2]); Debug.Log(scores[3]); Debug.Log(scores[4]); } }
위 코드에서 보이듯, 배열에 들어있는 값을 불러올 때에는 배열이름[인덱스번호]의 형태로 불러오게 됩니다.
이때, 인덱스 번호는 0부터 시작한다는 점을 명심하도록 합시다.
PlayerController에 위와 같이 코드를 작성하고 저장한 뒤, 프로젝트 창으로 넘어가서 테스트를 해보면 이렇게 배열에 저장된 각 요소가 잘 저장되어 출력됐음을 알 수 있습니다.
만약 출력 결과가 전부 보이지 않는다면, 프로젝트 창과 씬 뷰 사이의 경계를 클릭하고 드래그 해 창의 크기를 조절하시면 됩니다.
이렇게 형변환과 배열에 대해서 알아봤습니다.
위 코드에서 배열에 저장하는 값을 바꿔보거나, 배열을 선언할 때 값을 지정하는 방식으로 코드를 수정한 뒤, 한번씩 더 테스트 해보시며 이해도를 높여봅시다.
'프로그래밍' 카테고리의 다른 글
[Unity]유니티 입문하기 5-5(C# 기초개념 - 제어문) (0) 2023.07.28 [Unity]유니티 입문하기 5-4(C# 기초개념 - 연산자 심화) (1) 2023.07.27 [Unity]유니티 입문하기 5-2 (C# 기초개념 - 변수, 자료형) (0) 2023.07.24 [Unity]유니티 입문하기 5-1(C# 기초개념 - 토큰) (0) 2023.07.23 [Unity]유니티 입문하기 4 (스크립트) (0) 2023.07.21