hustle_D 2025. 6. 15. 14:14
반응형

배열에 대해서 먼저 알아두고 넘어야가 할것은 컬렉션이라는 것이다.

 

컬렉션

컬렉션이란 "여러 개의 값을 하나로 묶어서 보관하고, 다루기 쉽게 만든 데이터 구조를 말한다.

정리하자면 하나의 변수로 여러 값을 저장하고, 반복, 추가, 삭제, 검색 등의 작업을 할 수 있도록 해주는 컨테이너라고 보면 된다.

 

왜 컬렉션이 필요할까

일반적인 변수의 경우는 1개의 값만 저장이 가능하고 동일한 값이 많아지면 변수도 계속 늘어나 비효율적이게 된다.

컬렉션을 사용하면 하나의 변수를 통해서 여러 값을 저장할 수 있고 반복문등으로 효율적으로 값의 처리가 가능하다.

 

다만 컬렉션 내부에 배열이 포함되나 다른 컬렉션 요소의 경우와는 조금 다른점이 있다.

 

배열의 경우는 크기가 고정되어 있으며 단순히 값을 저장하게 된다.

다른 제네릭의 경우는 동적으로 크기가 조절되며 값을 추가, 삭제, 정렬 등 많은 기능을 포함하고 있다는 점이 다르다.

 

배열

배열의 선언

배열의 기본적인 형태는 아래와 같다.

type [] arrName;

- type : 각 배열의 요소가 가지는 타입
- [] : 배열의 차수 기록
- arrName : 배열의 이름
int[] arrI;

위와 같이 배열을 선언할 수 있다.

 

배열을 선언할 때에는 new 키워드를 사용해서 인스턴스화 한다.

이를 한번에 사용도 가능하다

이는 

데이터타입 [] 배열이름 = new 데이터타입[크기];

와 같이 설명할 수 있다.

 

또한 배열을 초기화와 동시에 사용도 가능하다.

이는

데이터타입 [] 배열이름 = new 데이터타입[크기]{값1, 값2, ...};

와 같이 값을 선언과 동시에 할당도 가능하다.

 

만약 이렇게 값을 할당하면서 선언한다면 크기를 지정하지 않아도 값의 갯수에 맞게 크기가 조정되어 배열이 생성된다.

데이터타입 [] 배열이름 = new 데이터타입[크기(생략 가능)]{값1, 값2, ...};

 

마지막으로 new 밎 배열형까지도 생략이 가능하다.

데이터타입 [] 배열이름 = {값1, 값2, ...};

이 경우는 배열의 선언과 동시에만 가능하다.

이렇게 선언 이후에 따로 실행하는 것이 불가능 하다.

 

배열을 사용하는 예시를 몇가지 확인해보면서 배열에 대해서 적응해보자(자바와는 조금 다른점이 있는거 같아서 작성해본다.)

 

1. var를 활용하는 배열

2진수를 배열에 넣은 후 var을 사용해서 타입에 맞게 배열의 값을 활용하는 것이 가능하다.

 

2. 타입에 맞게 값을 입력받아 배열에 넣기

배열의 요소에 값을 사용자에게 입력 받을때 Convert.To~ 메서드의 안에 ReadLine을 넣어 입력을 받아주면 타입에 맞게 입력을 받아서 배열에 저장할 수 있게 된다.

 

다차원 배열의 선언

자바와는 다르게 다차원 배열의 경우는 아래와 같은 형태로 선언이 가능하다.

데이터타입[,]  배열이름;   //2차원 배열 선언
데이터타입[,,] 배열이름;  //3차원 배열 선언

 

그리고 이렇게 선언된 배열을 인스턴스화 하는 방법은 아래와 같다

배열 이름 = new 데이터 형식[요소 개수, 요소 개수]

 

또한 인스턴스화와 같이 배열에 값을 초기화하는 방법은 아래와 같다.

 

또한 배열에 크기를 지정하지 않고 값을 할당하는 방법도 아래와 같이 두가지로 가능하다.

 

차수를 표현하는 Rank 와 길이를 출력하는 Length

1. Rank

배열에 Rank를 사용해보면 해당 배열이 몇차원 배열인지를 출력해준다.

 

2. Length

배열에 Length를 사용해보면 전체 길이를 출력한다

(다차원 배열이 아래 처럼 위 아래로 구분되는것 같아 보이지만 메모리 상에서는 1열로 늘어서 있으며 이를 순서대로 읽어 길이를 찾아 반환해준다)

 

가변 배열

가변배열은 아래와 같이 만들수 있다.

배열 타입[][] 배열이름 = new 배열타입[배열의 길이][];

 

이는 다차원 배열과 비슷해 보이나 차이가 존재한다.

다차원 배열의 경우는 초기화를 하는 시점 혹은 인스턴스화를 하는 시점에 크기가 고정되어야만 한다.

그러나 가변 배열은 이름에 맞게 전체 배열의 갯수는 인스턴스화 시점에 고정되어야하나 배열 내부의 배열은 나중에 설정이 가능하다.

또한 그렇기에 배열의 요소가 메모리에 연속적으로 가지지 않으며, 각각의 배열 요소의 크기가 서로 다를 수 있다.

 

이는 할당 하는 것을 보면 이해가 조금 쉬운데 

아래와 같이 전체 배열의 하나 하나 요소에 크기가 다른 배열들을 나중에 인스턴스화 할 수 있다.

 

물론 각각 배열 요소의 타입은 전체 배열의 타입을 기반으로 해야한다.

이렇게 타입 자체를 다르게 해서 인스턴스화는 불가능하다는 의미이다.

 

var로 배열선언

var로 배열을 선언하는 것도 가능하다.

크게 어려운 부분은 없고 그냥 

이렇게 배열 타입을 선언하는 것도 가능하다.

 

 

반응형