자바로 개발을 하지만 자바에 대해 많이 모른다고 느껴질 때가 있습니다.
Java의 정석으로 한번 더 학습하면서 간단하게 정리하거나 생각을 기록하려고 합니다.
이 포스트는 자바의 정석을 읽으면서 공부한 내용을 한번 더 정리하며 기록하는 포스트이고, 주관적인 생각이 들어갈 수 있습니다.
자바 공부를 하시는 분들이라면 "자바의 정석" 도서를 추천하고, 학습 시 모르는 부분은 저자 남궁성 님께서 운영하시는 카페를 통해 학습하시면 더 좋은 성과가 있을 거라 기대합니다.
https://cafe.naver.com/javachobostudy
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다. 댓글로 남겨주시면 확인 후 수정하겠습니다.
1-1. 배열(Array)이란?
"배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것"
1-2. 배열의 선언과 생성
기본형(Primitive) 변수 타입을 제외하고는 모두 참조형 변수 타입임을 기억합시다.
int[] array; // 배열의 선언(배열을 다루기 위한 참조변수 선언)
array = new int[5]; // 배열을 생성(실제 저장공간을 생성)
int[] array = new int[5]; // 위 코드를 한 줄로 변경
1-3. 배열의 길이와 인덱스
배열의 길이 : 생성한 배열이 담을 수 있는 저장공간의 수를 의미
배열을 생성할 때 배열의 길이를 적어줘야 하는데 "양의 정수이어야 하며 최대값은 int의 최대값인 약 20억"까지
배열의 길이에 대한 정보 : 배열이름.length
int[] array = new int[5]; // 길이가 5인 배열을 담는 참조변수 array
System.out.println(array.length); // 5 출력
인덱스 : 배열의 요소(저장공간)마다 붙여진 일련번호
인덱스의 범위 : "0"부터 "배열의 길이 - 1" 까지
int[] array = new int[5]{1, 2, 3, 4, 5};
System.out.println(array[0]); // 1 출력
System.out.println(array[2]); // 3 출력
System.out.println(array[4]); // 5 출력
System.out.println(array[5]); // ArrayIndexOutOfBoundsException 발생!
배열의 길이가 5이지만 인덱스는 0부터 시작하므로 5번째 요소에 접근 시 에러 발생 유의
1-4. 배열의 초기화
배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화된다.
배열을 기본값으로 초기화하지 않고 임의의 값으로 초기화 할 수 있다. (아래 코드 참조)
int[] score = new int[5]; // [0, 0, 0, 0, 0] 기본값 0으로 초기화되어 생성
int[] score = new int[5]{100, 80, 50, 30, 0}; // [100, 80, 50, 30, 0] 저장되어 생성
int[] score = {100, 80, 50, 30, 10}; // new int[5] 생략 가능
1-5. 배열의 출력
배열에 저장되어 있는 값을 출력하고 싶을 때가 있다.
int[] nums = {1, 2, 3, 4, 5};
// nums 변수는 참조변수이기 때문에 배열의 주소가 출력된다.
System.out.println(nums); // 타입@주소
// 1. 일반적인 for문과 배열의 인덱스를 통해 출력
for(int i=0; i<nums.length; i++) {
System.out.print(nums[i]); // 12345 출력
}
// 2. 향상된 for문을 통한 출력
for(int num : nums) {
System.out.print(num); // 12345 출력
}
// 3. Arrays.toString(배열이름) 메서드를 사용한 출력
System.out.println(Arrays.toString(nums));
Arrays.toString() 메서드를 사용하여 비교적 간단하게 배열의 내용을 출력할 수 있다.
예외적으로 char 배열은 Arrays.toString() 메서드를 사용하지않고 println 만으로도 출력이 가능하다.
1-6. 배열의 복사
한번 생성한 배열의 길이는 변경할 수 없다.
생성한 배열의 길이보다 더 많은 저장공간 필요하다면 더 큰 배열을 생성하고 복사하여야한다.
- for문을 이용한 배열 복사
- System.arraycopy()를 활용한 배열 복사
int[] a = {1, 2, 3, 4, 5}; // [1, 2, 3, 4, 5]
int[] b = new int[7]; // [0, 0, 0, 0, 0, 0, 0, 0]
System.arraycopy(a, 0, b, 0, a.length);
System.out.println(Arrays.toString(b)); // [1, 2, 3, 4, 5, 0, 0]
b = new int[7];
System.arraycopy(a, 2, b, 2, 3);
System.out.println(Arrays.toString(b)); // [0, 0, 3, 4, 5, 0, 0]
배열의 복사는 for문보다 System.arraycopy()를 사용하는 것이 더 효율적이다.
1-7 다차원 배열(2차원 배열)
2차원 배열은 DB의 테이블 또는 행렬로 이해하면 쉽게 이해가 될 것이다."[ ]"의 개수가 차원의 수를 의미한다.
위 그림은 가장 이해가 잘 되는 그림인 것 같다.
2차원 배열을 초기화하는 방법과 길이는 아래와 같다. 1차원 배열과 크게 다르지않다.
// 2차원 배열 초기화
int[][] score = {
{100, 100, 100}
, {20, 20, 20}
, {30, 30, 30}
, {40, 40, 40}
};
// 2차원 배열의 길이
System.out.println(score.length); // 4 출력, 행의 수라 생각
System.out.println(score[0].length); // 3 출력, 0번째 행(배열)의 길이
System.out.println(score[1].length); // 3 출력
System.out.println(score[2].length); // 3 출력
System.out.println(score[3].length); // 3 출력
1-8. 가변배열
가변배열은 다차원 배열에서 마지막 차수의 크기를 정하지 않고 각각 다르게 지정한다.
// 가변배열 생성
int[][] score = new int[5][]; // 마지막 차수는 비워둠
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
score[3] = new int[2];
score[4] = new int[3];
// 가변배열 생성 및 초기화
int[][] score = {
{100, 100, 100, 100}
, {20, 20, 20}
, {30, 30}
, {40, 40}
, {40, 50, 50}
};
'Java' 카테고리의 다른 글
[Java] 오버로딩(overloading) / 오버라이딩(overriding) (0) | 2021.08.28 |
---|---|
[Java] Class(클래스)와 객체(Object) (2) | 2021.08.23 |
[Java의 정석/3강정리] 03. 연산자 (0) | 2021.08.04 |
[Java의 정석/2강정리] 02. 변수 (0) | 2021.08.03 |
[Java의 정석/1강정리] 01. 자바를 시작하기 전에 (0) | 2021.08.01 |
댓글