Java/개념

3. 참조타입(데이터 타입/ String 타입/ 배열 타입)

열지희공 2021. 1. 17. 22:34

 

1. 데이터 타입 분류

자바의 데이터 타입-기본타입(primitive type), 참조타입(reference type)

 

출처: https://m.blog.naver.com/PostView.nhn?blogId=jo759515&logNo=220685730920&proxyReferer=https:%2F%2Fwww.google.com%2F

기본타입에 대해선 지난 포스팅에서 공부했으므로 넘어가고 참조타입에 대해 설명하겠슴당

 

참조타입 : 객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말함.

 

→기본 타입 변수는 실제 값을 변수 안에 저장하지만,

참조타입 변수메모리의 번지으로 가짐.

 

 

 

2. 메모리 사용 영역

자바는 메모리영역을 다음과 같이 세부 영역으로 구분해서 사용한다.

출처: https://programmer-seva.tistory.com/72

(1) 메소드 영역

메소드 영역에서는 코드에서 사용되는 클래스들을 클래스 로더로 읽어 클래스별로 런타입 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장한다.

 

(2) 힙 영역

힙 영역은 객체와 배열이 생성되는 영역이다.

힙 영역에서 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.

 

(3) JVM 스택 영역

JVM 스택 영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.

JVM스택은 메소드를 호출할 때마다 프레임을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.

프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가(push)되거나 제거(pop)된다.

 

기본 타입 변수는 스택 영역에 직접 값을 가지고 있지만,

참조 타입 변수는 값이 아니라 힙 영역이나 메소드 영역의 객체 주소를 가진다.

 

 

 

3. String 타입

자바는 문자열을 String 변수에 저장하기 때문에 String 변수를 선언하고 문자열을 저장해야 한다.

 

String 변수;

변수 = "문자열";

->이렇게 변수를 선언과 문자열 저장을 따로 할 수도 있고

 

String 변수 = "문자열";

-> 변수 선언과 문자열 저장을 동시에 할 수도 있음

 

문자열은 String 객체로 생성되고 변수는 String 객체를 참조한다.

 

예를들어,

String name1 = "박지희";

String name2 = "박지희";

와 같이 

저장된 문자열 리터럴이 동일하다면 String 객체를 공유한다.

 

하지만 문자열 리터럴 대신 new 연산자를 사용해서 직접 String 객체를 생성시킬 수도 있다.

new 연산자는 힙 영역에 새로운 객체를 만들 때 사용하는 연산자로 객체 생성 연산자라고 한다.

 

String name1 = "박지희";

String name2 = new String("박지희");

String name3 = new String("박지희");

 

위의 name1, name2, name3는 모두 다른 String 객체를 참조한다.

 

 

 

4. 배열 타입

(1) 배열

배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조

 

*배열의 특징 

-같은 타입의 데이터만 저장할 수 있음

-선언과 동시에 저장할 수 잇는 데이터 타입이 결정됨

-한 번 생성된 배열은 길이를 늘리거나 줄일 수 없음

 

(2) 배열 선언과 생성

 

*배열 선언

타입[] 변수;

타입 변수[];

 

배열 변수는 참조 변수에 속한다.

배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 객체를 참조하게 된다.

 

*값 목록으로 배열 생성

데이터타입[] 변수 = { 값0, 값1, 값2, 값3, ...};

 

*new 연산자로 배열 생성

타입[] 변수 = new 타입[길이];

→배열 객체 생성

 

변수[인덱스] = 값;

→새로운 값 저장

 

*타입별 배열의 초기값

분류 데이터 타입 초기값
기본타입(정수) byte[]
char[]
short[]
int[]
long[]
0
'\u0000;
0
0
0L
기본타입(실수) float[]
double[]
0.0F
0.0
기본타입(논리) boolean[] false
참조타입 클래스[] null
인터페이스[] null

*배열 길이

:배열에 저장할 수 있는 전체 항목 수

 

배열변수.length;

로 구할 수 있음.

 

 

(3) 다차원 배열

*2차원 배열

1차원 배열과 달리 값들이 행과 열로서 구성된 배열

 

int[][] scores = new int[2][3];

이런식으로 2x3행렬의 2차원 배열을 만들 수 있다.

 

(4) 가변 배열

자바는 일차원 배열이 서로 연결된 구조로 다차원 배열을 구현하기 때문에

수학 행렬 구조가 아닌 계단식 구조를 가질 수 있다.

 

int[][] scores = new int[2][];

scores[0] = new int[2];

scores[1] = new int[3];

 

위의 방식 대로 코드를 짜면

이런식으로 행을 조절할 수 있다.