1) 배열명
: 모든 변수의 대표 이름
2) 인덱스
: 첨자, 모든 변수를 구분하는 숫자
3) 배열요소
: 배열에 속한 각 변수를 의미
- 배열 선언
1)int[] 배열명
-- 추천
2)int 배열명[]
-- ( C언어 계열에서 사용되는 형식 )- 배열 생성
배열명 = new int[생성할 변수의 갯수]
- 배열에 저장된 각 변수를 의미한다.
- 일반 변수와 다르게 자동으로 초기화된다.
0
,0.0
,false
,null
- 배열요소 호출방법
배열명[인덱스]
// 배열의 선언 & 생성 int[] a = new int[5]; // 배열의 순회 // 배열의 길이는 "배열명.length"로 알아낼 수 있다. for(int i = 0; i < a.length; i++) { System.out.println(a[i]); }
- 배열을 생성하면 자동으로 초기화 된다.(0, 0.0, false, null)
- 중괄호(
{}
)를 이용해서 초기화 하고자 하는 값을 지정할 수 있다.- 배열의 초기화는 배열을 선언할 때만 사용할 수 있다.
- 형식
int[] a = {10, 20, 30};
// 배열의 초기화 int[] a = {10, 20, 30}; // 배열의 순회 for(int i = 0; i <a.length; i++) { System.out.println(a[i]); }
int day = 14; int nDay = 10; day += nDay; // 14일로부터 10일 후 String[] weeknames = {"금", "토", "일", "월", "화", "수", "목"}; System.out.println(day + "일은 " + weeknames[day % 7] + "요일입니다.");
참조 타입(reference type)
이다.메모리의 연속된 공간을 할당
받는다. /*
*
* int[] a = {10, 20, 30};
*
* ┌--------------┐
* a│ 0x10000000 │
* │--------------│
* │ ... │
* │--------------│
* │ 10 │0x10000000
* │--------------│
* │ 20 │0x10000004
* │--------------│
* │ 30 │0x10000008
* └--------------┘
*/
// 배열의 선언 & 생성 int[] a = new int[5]; // 배열명 확인 System.out.println(a); // 배열의 참조 값(주소 값) 확인
/*
* ┌--------------┐
* a│ 0x10000000 │---------------
* │--------------│ │
* │ ... │ │
* │--------------│ │
* │ 10 │0x10000000 │
* │--------------│ │
* │ 20 │0x10000004 │ b = a;
* │--------------│ │
* │ 30 │0x10000008 │
* │--------------│ │
* │ ... │ │
* │--------------│ │
* b│ 0x10000000 │◀-------------
* └--------------┘
*/
// 배열의 초기화 int[] a = {10, 20, 30}; // 배열의 선언 int[] b; // 배열a 참조 값을 배열 b로 전달하면, 배열 a와 b는 동일한 메모리 공간을 참조할 수 있다. b = a; // 배열 순회 for(int i = 0; i < b.length; i++) { System.out.println(b[i]); // 10, 20, 30 } // 자바는 메모리 관리를 스스로 한다. (메모리 누수 방지)
// 기존 배열 int[] a = {10, 20, 30}; // 신규 배열 int[] b = new int[5]; // 신규 배열 <- 기존 배열 /* b[0] = a[0] b[1] = a[1] b[2] = a[2] for(int i = 0; i < a.length; i++) { b[i] = a[i]; } */ // 배열을 복사하는 기능이 시스템 클래스에 만들어져 있다. System.arraycopy(a, 0, b, 0, a.length); // 배열 a의 인덱스 0부터 복사 시작, 배열 b의 인덱스 0으로 보내기 시작, a.length개 복사 // 기존 배열 a의 참조 값을 새로운 배열 b의 참조값으로 변경 a = b;
- 이제 더 이상 배열 a가 참조하던 0x10000000 영역을 참조하는 변수가 없다.
- 0x10000000 영역의 메모리 누수가 발생한다.
- 이런 영역을 C++ 같은 언어에서는
delete
명령으로 개발자가 직접 메모리를 해제해야 하지만- Java는 스스로 메모리를 해제한다. (garbage collector가 담당 :
System.gc()
)
/*
* ┌--------------┐
* a│ 0x10000000 │◀------------ 원래 배열 a의 참조(주소)
* │ 0x20000000 │◀------------┐ 바뀐 배열 a의 참조(주소)
* │--------------│ │
* │ ... │ │
* ┌--------------┐ │
* │ 10 │0x10000000 │
* │--------------│ │
* │ 20 │0x10000004 │ a = b;
* │--------------│ │
* │ 30 │0x10000008 │
* └--------------┘ │
* │ ... │ │
* │--------------│ │
* b│ 0x20000000 │--------------┘
* │--------------│
* │ ... │
* ┌--------------┐
* │ 10 │0x20000000
* │--------------│
* │ 20 │0x20000004
* │--------------│
* │ 30 │0x20000008
* │--------------│
* │ 0 │0x2000000C
* │--------------│
* │ 0 │0x20000010
* └--------------┘
* │ ... │
* └--------------┘
*/
배열 확인 (단순 조회는 Java의 기능을 이용할 수 있다.)
Arrays.toString
이용
System.out.println(Arrays.toString(배열명));
ctrl + 클릭
: 시스템 클래스 열기🤣하❕너무 재미따❕