본문 바로가기
JAVA/Do it 자바 완전정복

5-1장 참조 자료형-배열

by 자이구 2022. 2. 24.

기본 자료형은 스택 메모리에 실제 데이터값을 저장하고 있으므로 기본 자료형 변수를 복사하면 실제 데이터값이 1개 더 복사된다. 이후 복사된 값을 아무리 변경해도 원본 값은 아무런 영향을 받지 않는다. 

 

참조자료형은 스택 메모리에 실제 데이터값이 아닌 힙 메모리에 저장된 객체의 위치를 저장하고 있다. 참조 자료형 변수를 복사하면 실제 데이터가 복사되는 것이 아니라 실제 데이터의 위칫값이 복사된다. 따라서 하나의 참조 변수를 이용해 데이터를 수정하면 다른 참조 변수가 가리키는 데이터도 변하게 되는 것이다. 

 

<객체의 위치를 참조 변수에 저장하는 이유>

 

new 키워드를 이용해 객체를 생성하면 JVM은 힙 메모리 내에 비어 있는 공간에 객체를 생성한다. 힙 메모리에 비어 있는 공간은 그때그때 다를 것이므로 객체가 생성될 때마다 다른 위치에 저장될 수 있다. 따라서 JVM이 생성한 객체의 위치를 반드시 알아야 개발자가 해당 객체를 사용할 수 있다. 

 

스택 메모리 변수를 초기화하지 않으면 메모리 공간은 텅 비어 있다. 이 상태에서는 해당 변수를 출력할 때 오류가 발생한다. 기본 자료형 변수이든, 참조 자료형 변수이든 모든 변수는 스택 메모리에 위치하고 있다. 모든 변수는 초기화 이후

에만 출력할 수 있다. 기본 자료형의 초깃값으로는 '값', 참조 자료형의 초깃값으로는 'null'을 사용하면 된다. 

 

배열 : 동일한 자료형을 묶어 저장하는 참조 자료형

생성할 때 크기를 지정 / 한 번 크기를 지정하면 절대 변경할 수 없는 특징

1차원 배열 메모리 구조

1차원 배열 생성 방법

 

-배열 객체를 생성하고 값 대입하기

EX) int[] a = new int[3]; a[0] =3; a[1] =4; a[2] =5;

 

-배열 객체 생성과 함께 값 대입하기 

EX) int[] a = new int[]{3,4,5};

     int[] a; a = new int[]{3,4,5};

 

-대입할 값만 입력하기 (--선언과 대입을 분리할 수 없으므로 메서드의 입력 매개변숫값으로는 사용불가--)

EX) int[] a ={3,4,5}; 

     int[] a; a = {3,4,5}; <-- 불가능

 

 

 

 

메모리는 2차원 데이터를 바로 저장할 수 없다. 2차원 배열은 1차원 배열을 원소로 포함하고 있는 1차원 배열이다.

2차원 배열 메모리 구조

2차원 배열 생성 방법

 

-배열 객체를 생성하고 값 대입하기

EX) int[][] a = new int[2][3]; a[0][0] =1; a[0][1] =2; a[0][2] =3; a[1][0] =4; a[1][1] =5; a[1][2] =6; 

 

-배열 객체의 행 성분부터 생성하고 열 성분 생성하기

EX) int[][] a = new int[2][]; 

     a[0] = new int[3]; a[0][0] =1; a[0][1] =2; a[0][2] =3; 

     a[1] = new int[3]; a[1][0] =4; a[1][1] =5; a[1][2] =6; 

 

-배열의 자료형과 함께 대입할 값 입력하기

EX) int[][] a = new int[][] {{1,2,3},{4,5,6}};

 

-대입할 값만 입력하기

EX) int[][] a = {{1,2,3},{4,5,6}};

 

 

2차원 비정방 행렬 배열이란 각 행마다 열의 길이가 다른 2차원 배열을 의미한다. 

2차원 비정방 행렬 배열

2차원 비정방 행렬 배열 생성 방법

 

-배열 객체의 행 성분부터 생성하고 열 성분 생성하기

EX) int[][] a = new int[2][]; 

     a[0] = new int[3]; a[0][0] =1; a[0][1] =2; a[0][2] =3; 

     a[1] = new int[2]; a[1][0] =4; a[1][1] =5; 

 

-배열의 자료형과 함께 대입할 값 입력하기

EX) int[][] a = new int[][] {{1,2,3},{4,5}};

 

-대입할 값만 입력하기

EX) int[][] a = {{1,2,3},{4,5}};

댓글