주인장의 프로그래밍 개발 공부방

[Chapter 5 배열] 6-2. (심화) 객체 배열과 가변 배열 본문

프로그래밍 기본 지식/Chapter 5 배열

[Chapter 5 배열] 6-2. (심화) 객체 배열과 가변 배열

거신 2021. 8. 19. 18:02

이전의 객체 배열 설명이 길어진 관계로

두 편으로 나누어 작성합니다.

 

2. 가변 배열

 

지금까지 여러 배열에 대해서 알아봤는데 우리가 앞서 알아봤던 2차원 이상의 배열에서

조금 더 확장된 개념의 배열이 있다.

 

바로 가변 배열인데 의미 그대로 가변적인 크기의 배열을 뜻한다.

다시 말해, 각 배열의 요소마다 방크기를 임의대로 정할 수 있다는 뜻이다.

이게 무슨 소린가 싶겠지만 아래의 예시를 보면 쉽게 이해할 수 있을 것이다.

 

예시2)

String[][] strArr = new String[3][];

 

위의 예시2String[][] 타입2차원 배열에서 하나의 인덱스만 지정한 형태이다.

행렬로 비유하자면 행의 수만 지정한 상태인 것이다.

일반적인 2차원 배열의 형태라면 각 행마다 열의 수는 모두 동일하겠지만

가변 배열은 이름에 걸맞게 각 행마다 열의 수를 다르게 지정할 수 있는 것이다.

 

예시3)

String[][] strArr = new String[3][];
strArr[0] = new String[4];
strArr[1] = new String[1];
strArr[2] = new String[3];

위의 예시2와 같이 선언된 상태에서 예시3처럼

배열의 각 요소마다 각기 다른 크기의 배열로 지정할 수 있는 것이다.

마찬가지로 배열의 요소를 크기로 아래의 예시4와 같이 값을 바로 넣어 초기화하는 것도 가능하다.

 

예시4)

String[][] strArr = new String[3][];
strArr[0] = new String[] {"A", "BC", "DEF"};
strArr[1] = new String[] {"A"};
strArr[2] = new String[] {"A", "BC", "DEF", "GH", "I"};

 

조금 더 쉽게 보기 위해 구조를 그림으로 그려보면

 

그림2)

이러한 형태가 되는 것이다.

이렇게 사용할 수 있는 이유는 배열이라는 것도

주소를 참조하는 참조형 타입이기 때문에 가능한 것이다.

 

3. 마무리

 

객체 배열은 뭔가 달라 보일 수 있으나 배열의 요소가 객체 타입일 뿐 일반적인 배열과 다를 바가 없다.

선언과 초기화하는 형태도 동일하고 사용하는 방법도 동일하다.

대표적으로 우리가 많이 봐왔던 String타입의 배열의 경우

String[] strArr = new String[] {};

로 선언할 수 있고

strArr = new String[3];

와 같이 배열의 크기를 지정해 초기화하거나

strArr = new String[] {"A", "BC", "DEF"};

처럼 값을 직접 넣어 초기화할 수도 있다.

 

이를 조금 더 풀어보면

strArr = new String[] {new String("A"), new String("BC"), new String("DEF")};

의 형태로 초기화되는 것이기 때문에

객체 배열은 말그대로 객체를 배열의 요소로 가지는 것이다.

 

가변 배열2차원 이상 배열에서 사용할 수 있는데

일반적으로 요소마다 방크기가 동일한 것과 다르게

각 배열의 요소마다 방의 크기를 임의로 지정할 수 있는 것이다.

String[][] strArr = new String[3][];

처럼 첫 번째 인덱스의 크기만 지정하고

두 번째 인덱스의 크기는

strArr[0] = new String[3];
strArr[1] = new String[1];
strArr[2] = new String[4];

처럼 임의의 크기로 지정하는 것이 가능하다.

Comments