도서/자바의 신

[도서/자바의 신] #7 여러 데이터를 하나에 넣을 수는 없을까요?

yulee_to 2022. 12. 21. 05:21

자바의 신

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 


하나에 많은 것을 담을 수 있는 배열이라는 게 있다는데...

  • 배열 : 한 가지 타입에 대해서, 하나의 변수에 여러 개의 데이터를 넣을 수 있는 자료구조
자료형 [] 배열이름;

[]를 이용해 배열임을 정의하는데, 대괄호의 위치는 배열 이름 앞이든 뒤든 상관없다.

배열의 선언

  • = new 자료형[크기];
  • = { 값1, 값2, ... }; // 값과 값 사이에는 줄바꿈이 있어도 됨

배열이름[인덱스]를 사용하면 배열의 해당 인덱스에 위치한 값을 참조할 수 있는데 이 인덱스는 0~(배열의 크기 -1)까지 있다.

할당한 배열의 인덱스를 넘어가는 곳에 값을 할당하거나, 참조하게 되면 ArrayIndexOutOfBoundsException이라는 예외가 발생한다.

 

배열의 자료형에는 모든 자료형이 올 수 있다.

배열의 기본값

기본 자료형 배열의 기본값은 각 자료형의 기본값과 동일하다.

기본 자료형 배열인 지역 변수의 경우 값의 초기화를 하지 않고 크기만 정해줘도 기본값이 할당되어 참조할 수 있다.

 

참조 자료형 배열의 경우 값의 초기화를 해주지 않으면 배열의 각 인덱스의 값은 "null"이 된다.

String만 예외적으로 쌍따옴표 만으로 값을 초기화할 수 있다.

new를 사용해 배열의 값에 객체를 생성해 초기화해주고 System.out.println으로 출력해주면 "타입이름@고유번호"가 출력된다.

배열을 그냥 출력해보면 어떻게 나올까?

"new 자료형[크기]"자체를 출력해보면 해당 객체가 배열이라는 의미인 [과 배열의 타입을 나타내는 문자, 어떤타입의 배열인지, @ 문자 뒤에 해당 배열의 고유번호가 순서대로 출력된다.

자료형에 따라 배열의 타입을 나타내는 문자가 다르다.

boolean(Z), byte(b), char(C), double(D), float(F), int(I), long(J), short(S), 참조자료형(L)

별로 사용하지는 않지만, 알고 있어야 하는 2차원 배열

2차원 배열은 "표"처럼 생긴 배열로 "배열의 배열"을 의미한다.

자료형 [][] 배열이름;

선언할 때는 배열 이름 앞 뒤 위치 상관없이 대괄호 두개를 써주면 된다. 자료형 [] 배열이름 []; 이런 형태도 가능하다.

 

2차원 배열 array[0]은 값이 아닌 1차원 배열을 의미하고,

array[0][0]이 저장된 데이터 값이다. 

 

크기를 선언할 때는 1차원의 크기만 지정할 수도 있다. 

2차원 크기만 지정하거나 둘다 안하면 컴파일 에러.

1차원의 크기만 지정한 경우 각 1차원 배열마다 크기가 다른 배열을 할당해줄 수 있다.

 

1차원 배열과 마찬가지로 중괄호를 이용해 값을 직접 초기화해줄 수도 있다.

= { {배열1값1, 배열1값2, ...}, { 배열2값1, 배열2값2, ...} ... };

배열의 길이는 어떻게 알 수 있을까?

배열이름 뒤에 ".length"를 붙여주면 배열의 길이 값을 받을 수 있다.

2차원 배열의 경우 .length를 하면 1차원(열)의 길이를 알려주고, 1차원 배열에 .length를 붙이면 1차원 배열(행)의 길이를 알려준다.

 

.은 참조 자료형에서만 사용할 수 있다.

 

for 루프를 통해 배열의 값들을 출력할 수 있다.

다만 조건문에 직접 .length를 사용하는 것보단 길이를 저장하는 변수를 하나 할당하여 조건문에 사용하는 것이 성능적인 측면에서 효과적이다.

배열을 위한 for 루프

JDK 5부터 개선된 사항으로 for 루프를 더 편하게 사용하는 방법이 있다.

for (타입이름 임시변수명 : 반복대상객체) {
}

임시 변수에 반복 대상 객체가 하나씩 순서대로 할당된다. 

이 반복문은 "for each문"이라고도 부른다.

자바 실행할 떄 원하는 값들을 넘겨주자

public static void main의 매개변수인 String[] args도 String 배열로 터미널에서 java 명령어로 실행할 때 클래스 이름 뒤에 값들을 공백으로 구분하여 적어주면 해당 배열에 값이 들어간다.


정리해 봅시다

1. 배열을 선언할 때 어떤 키워드를 타입 앞이나 뒤에 사용해야 하나요?

[] 

2. 배열의 첫번째 위치는 0인가요? 1인가요?

0

3. 배열을 선언할 때 boolean 배열의 크기만 지정했다면 boolean 배열의 [0] 위치에 있는 값은 무엇인가요?

false

4. ArrayIndexOutOfBoundException이라는 것은 언제 발생하나요?

배열의 크기를 넘어가는 공간에 값을 할당하거나 참조할 때

5. 중괄호를 이용하여 배열을 초기화할 때 중괄호 끝에 반드시 어떤 것을 입력해주어야 하나요?

;

6. 2차원 배열을 정의할 때에는 대괄호를 몇개 지정해야 하나요?

두개

7. 배열을 쉽게 처리해주는 for문의 문법은 어떻게 되나요?

for (타입이름 임시변수명 : 반복대상객체){}

8. 자바 프로그램에 데이터를 전달해주려면 클래스 이름 뒤에 어떻게 구분하여 나열하면 되나요?

공백으로 구분하여 나열해주면 된다.

9. 자바 프로그램이 시작될 때 전달 받는 내용은 어떤 타입의 배열인가요?

String

 

728x90