*이 글은 '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 참조자료형
'코딩 공부 > JAVA' 카테고리의 다른 글
[JAVA] 자바 변수(variable), 상수, 리터럴에 대하여 (0) | 2022.04.28 |
---|---|
[JAVA] 자바 클래스-메서드에 대하여 (0) | 2022.04.27 |