코딩 공부/JAVA

[JAVA] 자바 참조자료형에 대해(배열(1차,2차), String)-자바 완전 정복 5

Cosmic-dust 2022. 4. 25. 20:56
728x90
반응형

*이 글은 'Do it! 자바 완전 정복-김동형' 책을 바탕으로 작성하였습니다.*

 

자바 자료형에는

기본자료형(8개) - boolean, byte, short, int, long, float, double, char

참조자료형(무한개) - 배열, 열거, 클래스/인터페이스 등

이 있다.

 

 

이 글에서는 참조자료형 중 배열과 String 를 살펴보려고한다.

 

목차

1. 배열-1차원 배열

(배열의 특징/선언/객체생성/메모리구조)

 

2. 배열-1차원 배열

(세 가지 초기값 부여방식 및 출력하기)

 

3. 배열-2차원 배열

 

4. 배열-main() 메서드 매개변수

 

5. String 참조자료형

 

 

 

1. 배열-1차원 배열

(배열의 특징/선언/객체생성/메모리구조)

배열이란?

동일한 자료형을 묶어 저장하는 참조 자료형이다. 생성할 때 크기를 지정해야 하고, 한 번 크기를 지정하면 절대 변경할 수 없는 특징이 있다. 

 

(1) 배열의 두 가지 특징

특징 1. 동일한 자료형만 묶어서 저장 가능

특징 2. 생성시 크기를 지정 (이후 크기 변경 불가)

 

(2) 배열의 선언

배열은 두 가지 방법으로 선언할 수 있다.

① 자료형[ ] 변수명

ex) int[ ] a;

double[ ] b;

String[ ] c;

② 자료형 변수명[ ]

ex) int a[ ];

double b[ ];

String c[ ];

*보통 자료형 뒤에 바로 선언을 하는 ①을 많이 사용한다

- 배열을 선언하면 스택 메모리에 변수의 공간만 생성하고, 공간 안은 비운 채로 둔다. 아직 배열의 실제 데이터인 객체를 생성하지 않았기 때문

- 스택 메모리에 위치하고 있는 참조 자료형 변수의 빈 공간을 초기화할 때는 null(널) 값을 사용할 수 있다.

- null 값은 힙 메모리의 위치(번지)를 가리키고 있지 않다는 의미다.

- 즉, 연결된 실제 데이터가 없다는 것을 의미함.

 

*Tip1.

선언시 배열의 첫번째 특징(동일한 자료형 저장)이 나타나야 한다.

(어떤 자료형을 저장하는 배열인지 여부

ex) int[ ] a; → int 자료형만 저장 가능

double[ ] a; → double 자료형만 저장 가능

String[ ] a; → String 자료형만 저장 가능

 

*Tip2.

변수형 앞에 자료형을 두는 것이 일관성이 있다

ex) (int 자료형 a) int a;

(int 배열 자료형 a) int[ ] a;

 

*Tip3.

메모리의 구조

class 영역
static 영역
final 영역
메서드 영역
Stack 영역
(기본 자료형, 참조 자료형 상관없이 모든 지역 변수가 위치하는 영역)
Heap 영역
(객체(참조 자료형 변수가 가리키는 실제 데이터)가 위치하는 공간)

* 구조를 그림으로 나타낸다면

 

(3) 힙 메모리에 배열의 객체 생성하기

- 여러 개의 값을 저장할 수 있는 공간

- 모든 참조 자료형의 실제 데이터(객체)는 힙(Heap) 메모리에 생성

- 힙 메모리에 객체를 생성하기 위해서는 new 키워드 사용

- 배열의 객체 생성

new 자료형[배열의 길이]

배열의 길이 : 포함할 수 있는 데이터의 수를 의미

ex) new int[3];

new String[5];

 

* 배열의 두 번째 특징: 배열을 생성할 때 new int[3] 또는 new String[10]과 같이 배열의 길이를 반드시 지정해야 한다.

ex) new int[]; // 객체의 크기를 지정하지 않아 오류 발생

new int[3]; // 정수 자료형 3개를 포함할 수 있는 배열 객체 생성

new double[5]; // 실수 자료형 5개를 포함할 수 있는 배열 객체 생성

new String[10]; // 문자열 자료형 10개를 포함할 수 있는 배열 객체 생성

 

(4) 배열의 선언과 객체 생성

- 방법1. 선언과 동시에 객체 생성

자료형[ ] 변수명 = new 자료형[배열의 길이];

ex) int[ ] a = new int[3]; // cf. int a = 3;

- 방법2. 선언 이후 객체 생성

자료형[ ] 변수명;

변수명 = new 자료형[배열의 길이];

ex) int[ ] a;                  // null값 상태 cf. int a;

     a = new int[3];                              a = 3;

 

- 배열 객체의 선언 및 생성시 메모리 구조

int[ ] : int 자료형만을 저장할 수 있는 배열

a : 참조 변수. 실제 데이터값을 저장하는 것이 아니라 실제 데이터값의 위칫값을 저장함

new : 힙 메모리에 객체를 넣으라는 의미

int[3] : 정수 3개를 저장할 수 있는 공간을 만들어라

 

아래는 메모리 구조

- 스택 메모리 공간은 값을 초기화하지 않으면 빈 공간으로 존재한다. → 해당 변수를 출력하면 오류가 발생한다.

- 힙 메모리 공간은 어떤 상황에서도 빈 공간이 존재하지 않는다. → 값을 주지 않으면 컴파일러가 값을 강제로 초기화한다. → 힙 메모리의 모든 값은 강제 초기화된다.

   - 강제 초기화 값은 자료형마다 다르다.

      - 기본 자료형 : 숫자는 모두 0(실수는 0.0)

      - 불리언 : false

      - 이외 모든 참조 자료형 : null

 

실습 : 1차원 배열의 2가지 선언 방법 방법과 다양한 배열 선언 예

 

(5) 배열 객체의 값 대입 및 값 읽기

- 배열의 값 대입

참조 변수명[인덱스] = 값;

ex) int[] a = new int[3];

a[0] = 3;

a[1] = 4;

a[2] = 5;

 

 

2. 배열-1차원 배열

(세 가지 초기값 부여방식 및 출력하기)

 

(1) 방법 ① 배열 객체 생성 + 값 대입(여러줄)

(2) 방법 ② 배열 객체 생성 및 값 대입(한줄)

 

(3) 방법 ③ (값 대입) : 대입할 값만 입력

- 메서드의 입력매개변숫값으로는 사용 X

(4) 방법 ② vs ③ 비교


실습 : 1차원 배열의 원소 값 대입의 3가지 방법

(5) 배열 객체의 강제 초기값

 

 

실습 : 스택 메모리의 초깃값과 참조 자료형의 강제 초깃값

 

(6) 참조자료형으로서의 배열 특징

실습 : 기본 자료형과 참조 자료형의 특징 비교

 

(7) 반복문을 이용해 배열 데이터 읽기

 

연산자(.) : 해당 참조 변수가 가리키는 곳으로 가라

배열의 길이 구하기 : 배열 참조 변수.length

 

3. 배열-2차원 배열

 

 

 

 

4. 배열-main() 메서드 매개변수

 

5. String 참조자료형

 

 

728x90
반응형