배열
배열이란?
- 같은 타입의 데이터들을 한 공간에 저장하여 사용
배열이 필요한 이유
- 배열이 없다면, 같은 타입의 변수를 여러 개 선언하여 데이터를 저장해야 함
int score1, score2, score3, score4, score5
- 배열을 선언하여, 같은 타입의 변수를 한꺼번에 관리할 수 있음
int [] score = new int[5] // 5개의 int 데이터를 저장할 수 있음
특징
- 배열의 요소들이 메모리에 연속적으로 생성
- 배열의 생성 시에, 배열의 크기를 지정해야 함(고정)
- 한번 생성된 배열의 길이는 변경할 수 없음
- 생성한 배열의 크기를 변경하고 싶다면 : 새로 생성해야 함
- 배열 자체는 객체
- 같은 타입의 데이터만 저장 가능
- 대괄호( [ ] ) 내부에 변수의 인덱스를 지정하여, 각 변수에 접근할 수 있음
- 인덱스는 0부터 시작
1차원 배열 생성하는 방법
- 실제 배열을 생성하려면, new 연산자를 이용해야 함
- new연산자를 사용하여 배열을 생성하면, 배열 선언과 초기화를 따로 할 수 있음
int [] score; // 배열 선언
score = new int [5] // 배열 생성
- 배열의 선언과 생성을 동시에 할 수 있음
int [] score = new int [5] // 선언 및 배열 생성
1차원 배열 초기화
- 인덱스 번호에 해당하는 배열 요소(배열명[idx])에 우측 값을 저장
- 배열 선언 시에 지정한 데이터 타입과 동일한 데이터만 저장할 수 있음
String [] nameArr = new int[3];
// 배열명[index] = 저장할 값;
name[0] = "홍길동";
name[1] = "이순신";
name[2] = "임꺽정";
- 배열 선언 시에 지정한 데이터 타입과 다른 데이터는 저장 불가
int [] intArr = new int[3];
intArr[0] = “정공자”; // 에러, “정공자”는 String타입
intArr[1] = 10001; // 가능, int타입
배열 선언과 동시에 값 목록을 초기화하기
int [] score2 = {50,60,70,80,90}
int [] score = new int[] {10,20,30,40,50};
값 목록을 이용해서 배열을 생성할 때 주의할 점
1. 반드시 배열 선언과 초기화를 같은 행에서 해야 함
int [] score2 = {50,60,70,80,90}
[ 에러 발생 ]
- 배열의 선언과 초기화를 따로 하는 경우
int [ ] score; // 배열 선언
score = {50, 60, 50, 80, 90}; // 초기화 - 에러 발생!
[ 배열 선언과 초기화를 따로 할 때, 에러가 발생하는 이유 ]
- 배열의 참조 변수를 생성(score)한 경우, 해당 변수는 stack 메모리 영역에 생성되는데
(참조변수는 배열 인스턴스의 위치값(주소값)을 저장하는 변수)
- 배열은 객체이고, 객체는 heap 영역에 저장을 하여야 하는데
배열의 인스턴스가 생성되지 않아서(배열이 생성되지 않아서) 값을 초기화 할 수 없음
2. 배열 선언을 한 이후에, 초기화를 하는 경우 : new 생성자를 사용하여 값 초기화
int [] score; // 배열 선언
score = new int[] {10,20,30,40,50}; // new 연산자 이용하여 값 초기화
System.out.println(score[1]); //20
[ 주의할 점 ]
new 연산자를 이용하여 값을 초기화 하는 경우에는, 배열 크기를 지정 x
❓ ❓ ❓ 객체는 Heap(힙) 영역에 저장
int [] score = new int[5];
<stack 영역>
- 배열 참조 변수인 score 초기화
- score에는 주소가 저장됨
- score는 참조 변수 = 8byte
<heap 영역>
- 배열의 생성
- 메모리 크기 : 4byte(int) * 5개 = 20byte
- 기본형 타입의 데이터(int)의 값 자체가 저장됨
String [] name = new String[3];
<stack 영역>
- 배열 참조 변수인 name초기화
- name에는 주소가 저장됨
- name은 참조 변수 = 8byte
<heap 영역>
- 배열의 생성
- 메모리 크기 : 8byte(주소값을 저장하기 때문에) * 3개 = 24byte
- 참조형 타입의 데이터(String)가 저장된 주소가 저장
'JAVA' 카테고리의 다른 글
[JAVA] 메서드의 return문(형식, 특징, 주의할 점) (0) | 2024.04.17 |
---|---|
[JAVA] 배열 관련 메서드(equals, toString, sort) (0) | 2024.04.17 |
[JAVA] 2차원 배열(선언, 초기화, 길이 구하기) (0) | 2024.04.17 |
[JAVA] 반복문(break문과 continue문 사용하기) (0) | 2024.04.16 |
[JAVA] 증감연산자, 전위와 후위 (0) | 2024.04.16 |