본문 바로가기
JAVA

JAVA 4일차(2)

by teg0 2025. 8. 8.

배열

변수 : 하나의 공간에 하나의 값을 담을 수 있음, 메모리공간에 이름을 붙여서 사용

배열 : 하나의 이름(참조변수)에 여러 개의 "같은 자료형"의 값을 저장할 수 있는 연속적인 메모리 공간을 사용.

 

배열을 왜 사용하는 이유

변수만을 사용하면 대량의 데이터를 보관하고자할 때 각각의 변수를 만들어서 따로 관리를 해야 한다.

 

배열 사용방법

1. 선언 : 자료형 [] 배열이름;

int[] arr3;

배열의 참조변수만 생성, 아직 사용가능한 메모리가 없음

 

2. 생성(메모리를 할당) : 배열이름 = new 자료형 [길이];

arr3 = new int[3];

정수 10개를 저장할 수 있는 공간 생성

 

반복문을 이용한 값 할당

for(int i=0; i <배열의 길이; i++) {

for(int i=0; i<arr3.length ; i++) {
	arr3[i] = (i + 1) * 10;
}

 

반복문을 이용한 값 출력

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

 

for-each문 : 배열을 전체적으로 탐색할 때 쉽게 사용할 수 있는 문법

 

for(배열의 값을 받아줄 변수 : 배열) {

        반복할 코드

}

for(int num : arr3) {
	System.out.println(num + "을 가져옴");
}

 

자바는 메모리의 주소를 확인할 수 없다.

객체 메모리의 암호화된 해시값을 hashCode()로 가져올 수 있다.

double[] dArr = new double[3];
System.out.println(dArr.hashCode());

//dArr 전체 출력(for-each)
for(double j : dArr) {
	System.out.print(j + " ");
}
System.out.println();

 

실제 리터럴값을 곧바로 담을 수 있는 변수를 일반변수

다른 메모리의 주소값을 담고 있는 변수를 참조변수

-> C언어 포인터 개념과 비슷하다.

 

기본자료형(원시타입) : int, double, float, char, long...

-> 실제 리터럴값을 바로 담을 수 있음.

 

그 외 자료형(String, Scanner, int [], double []...) -> 참조타입

-> 필요한 메모리의 크기가 가변적이기 때문에.

 

배열생성 시 따로 초기화하지 않아도 기본값이 담겨있음.

Heap이라는 메모리공간은 절대 빈 공간을 허용하지 않기 때문.

-> 메모리가 할당될 때 JVM이 기본값으로 모두 초기화

 

NullPointerException -> 참조변수가 가지고 있는 주소값이 없다.

ArrayIndexOutOfBoundsException -> 배열의 크기를 벗어난 index를 제시하면 발생하는 에러

 

배열의 가장 큰 단점 : 배열은 한번 지정하면 크기변경이 불가

int[] arr = new int[5];
System.out.println(arr.hashCode());
arr = new int[10];
System.out.println(arr.hashCode());

주소값이 변경된 걸 볼 수 있음 -> 수정이 불가하여 새로운 메모리공간을 할당한다.

 

연결이 끊어진 기존 배열의 메모리공간은 Heap영역에 남아있다.(어떤 변수에도 참조되지 않는 상태)

=> 일정시간이 지나면 "GC(가비지컬렉터)"가 알아서 회수한다.

=> 자바에서의 "자동메모리관리" 특징 => 개발자는 코드에 집중할 수 있음.

arr = null;

 

배열 비교

int[] arr4 = {1,1,1,1,1};
int[] arr5 = {1,1,1,1,1};

System.out.println(arr4 == arr5);

==통해서 비교할 경우 문자열처럼 주소비교

 

 

'JAVA' 카테고리의 다른 글

JAVA 5일차(1)  (2) 2025.08.11
JAVA 4일차(3)  (2) 2025.08.08
JAVA 4일차(1)  (4) 2025.08.08
JAVA 3일차  (4) 2025.08.07
JAVA 2일차(2)  (2) 2025.08.06