본문 바로가기
교육, 학습/멀티캠퍼스_풀 스택

JAVA 문법 - 배열(array), 확장된 for문, 다차원 배열

by 개발하는 경제학도 2022. 1. 11.

강의 소개

현재 수강하고 있는 멀티캠퍼스 k-digital 지능형 웹서비스 풀 스택 과정을 수강하며 적은 내용입니다.

교재로는 자바의 정석을 사용하고 있습니다.


 

배열(array)

 

배열(array)

배열은 동일한 타입의 여러 변수들을 묶은 것이다. 유한 개의 변수들을 가지고 있는 집합이다.

 

- 배열의 선언과 생성 

데이터타입[] 배열이름; // 배열의 선언. (데이터타입 배열변수명 []도 무관: []가 끝에 있든, 중간에 있든 동일하다.)
배열이름 = new 데이터타입[배열길이]; // 배열을 생성.

 

위 코드를 한 줄로 합쳐 아래와 같이 작성할 수도 있다.

데이터타입[] 배열변수명 = new 데이터타입[배열길이];

 

- 배열의 선언 & 생성을 동시에 하는 예시

String[] book; // 1. 배열을 선언한다.
book = new String[3]; // 2. 배열을 생성한다.(String 타입의 값을 5개 저장할 메모리를 확보한다)

위의 코드는 배열의 선언과 생성을 합쳐 한 줄로 합칠 수 있다.

String[] book = new String[3];

 

- 배열과 메모리 할당 순서

예시처럼 String[] book;으로 배열을 선언하면 스택에는 book이라는 배열에 대한 공간이 생긴다. 

그런 다음, new String [3];으로 배열을 생성하면 힙에는 그 주소에 저장된 실제 값(배열의 요소)들을 저장하기 위한 공간이 생기며, 그 힙 공간에 대한 주소가 할당된다.

마지막으로, '=' 연산자를 통해 배열의 주소가 스택에 저장된다.

 

- 배열의 초기화

자바에서 인스턴스를 생성하고 값을 최초로 넣어주는 것을 초기화라 한다. 배열에 값을 넣어줄 때, 배열 이름[인덱스]으로 초기화한다.

만약, 초기화해주지 않으면 자동초기화가 된다. 기본형 타입은 0으로, 참조형 타입은 null로 자동 초기화된다.

String[] book = new String[3]; // 배열의 길이가 5인 String타입의 배열의 선언과 생성

book[0] = "자바의정석"; // 배열의 초기화
book[1] = "스프링완전정복";
book[2] = "이것이자바다";

 

- 배열의 선언 & 초기화 동시에 하는 방법

이렇게 배열을 선언할 때 초기화를 동시에 진행하여 한 문장으로 표현할 수도 있다.

String book = new String{"자바의정석", "스프링완전정복", "이것이자바다"};  // 배열 길이가 3인 String 타입의 배열 생성.

 

- 배열의 길이

배열이름.length를 통해 배열의 길이를 알 수 있다.

앞선 예시에서 지속적으로 book이라는 배열의 길이가 3이었으므로 코드로 확인한다면 아래와 같다.

book.length;  // 3

 

- 확장된 for문(= 향상된 for문)

배열을 이용하여 확장된 for문을 사용할 수도 있다.

for (변수타입 변수명: 배열 또는 컬렉션) {
	// 반복수행할 문장
}

 

확장된 for문의 예시를 들어보자면 아래와 같이 사용할 수 있다.

for (String onebook : book) {
	System.out.println(onebook);
}

이 코드는 book이라는 배열에 저장되어 있는 요소들을 하나씩 꺼내서 onebook이라는 변수에 대입해준다.

그렇게 하나씩 꺼낸 변수(onebook)들을 하나씩 출력하는 예시이다.

확장된 for문이 아닌 일반적인 for문으로 바꾸어도 출력 결과는 동일하다.

for (int i = 0; i<book.length; i++) {
	System.out.println(book[i]);
}

 

 

다차원 배열

이제까지는 1차원 배열이었으나, 2차원 이상의 배열을 생성할 수 있다.

다차원 배열은 배열 각각의 요소로 또 다른 배열을 가지고 있다고도 이해할 수 있다.

 

2차원 배열

데이터타입[행의 수][열의 수] 배열이름;

2차원 배열은 위와 같은 형식을 가지고 있다.

행의 개수를 확인할 때는 배열 이름. length로 알 수 있고

열의 개수를 확인할 때는 배열 이름[0]. length, 배열 이름[1]. length 등과 같이 접근해야 한다.

 

예시로, 5명의 학생의 국어, 수학, 영어 점수를 저장하는 2차원 배열의 코드를 작성해보자.

// 5명 학생의 국어, 영어, 수학 점수를 저장하는 이차원 배열

int scores [][] = new int[3][5]; // 정적인 길이의 배열 
System.out.println("총 학생수= " + scores[0].length);  // 5
System.out.println("총 과목수= " + scores.length);  // 3
System.out.println("총 점수 갯수= " + scores.length * scores[0].length);  // 15

 

가변 배열

int[][] arr = new int[3][];

// 서로 다른 열의 길이를 줄 수 있다
arr[0] = new int[1];
arr[1] = new int[5];
arr[2] = new int[2];

이렇게 2차원 배열의 수를 지정하지 않으면, 유동적인 가변 배열을 생성할 수 있다.

즉, 각 행마다 다른 길이를 가진 배열을 생성할 수 있어 고정된 형태를 가지지 않는다.

 

 

출처: 자바의 정석(남궁 성 저), 멀티캠퍼스

참고자료: 이것이 자바다(신용권 저)

댓글