데이터 타입 분류
- 자바의 데이터 타입
- 기본 타입(primitive type) : 정수, 실수, 문자, 논리 리터럴을 저장하는 타입.
- 참조 타입(reference type) : 객체(object)의 번지를 참조하는 타입.
- 배열, 열거, 클래스, 인터페이스 타입
// 기본 타입 변수
int age = 25;
double price = 100.5;
// 참조 타입 변수
String name = "신용권";
String hobby = "독서";
- 변수는 스택 영역에 생성되고 객체는 힙 영역에 생성된다.
- String 클래스 변수는 name과 hobby에 대한 힙 영역 주소 값(100, 200)을 가지고 있다.
메모리 사용 영역
- 메소드(Method) 영역
- 코드에서 사용되는 클래스들을 클래스 로더로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장한다.
- JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
- 힙 영역(Heap) 영역
- 객체와 배열이 생성되는 영역
- JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.
- 참조하는 변수나 필드가 없으면 JVM은 Garbage Collector를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.
- JVM 스택(stack) 영역
- 각 스레드마다 하나씩 존재하고, 스레드가 시작될 때 할당된다.
- JVM 스택은 메소드를 호출할 때마다 프레임(Frame) 추가(push)하고, 메소드가 종료되면 해당 프레임 제거(pop)
- 프레임 내부의 로컬 변수 스택은 기본 타입 변수와 참조 타입 변수가 추가(push) 되거나 제거(pop)된다. 변수가 생성되는 시점은 초기화가 될 때, 제거되는 시점은 블록을 벗어나는 경우이다.
참조 변수의 연산
- 기본 타입 변수의 ==, != 연산은 변수의 값이 같은지 확인
- 참조 타입 변수의 ==, != 연산은 동일한 객체를 참조하는지 확인
null 과 NullPointerException
- 참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있다.
- NullPointerException : 참조 타입 변수를 잘못 사용할 경우. null 을 가지고 있는 참조 타입 변수를 사용할 경우 발생.
배열 타입
- 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조
- 인덱스는 0부터 시작
String[] names = {'a', 'b', 'c'};
names[0] -> a
names[1] -> b
names[2] -> c
- new 연산자로 배열 생성
int[] intArray = new int[5];
- 타입별 배열의 초기값
- 배열의 길이
int[] intArray = {10,20,30};
int num = intArray.length; // 배열의 길이
커맨드 라인 입력
- "java 클래스"로 프로그램을 실행하면
- JVM은 길이가 0인 String 배열을 먼저 생성하고 main() 메소드를 호출할 때 매개 값으로 전달한다.
- "java 클래스 문자열0 문자열1 문자열2"으로 프로그램을 실행하면
- 문자열 목록으로 구성된 String[] 배열이 생성되고 main() 메소드를 호출할 때 매개 값으로 전달된다.
- Integer.parseInt() : 문자열은 산술 연산이 불가능 하기 때문에 메소드를 사용해서 정수로 변환시킨다.
다차원 배열
- 1차원 배열과는 달리 행과 열로 구성된 배열을 2차원 배열이라고 한다.
int[][] scores = new int[2][3];
배열 복사
- System.arraycopy() 메소드 사용
열거 타입
- 한정된 값만 갖는 데이터 타입
- 몇 개의 열거 상수 중에서 하나의 상수를 저장하는 데이터 타입
- 열거 타입 선언
- 열거 타입 이름을 정하고, 소스 파일(.java) 생성
- 이름은 첫 문자를 대문자로 하고, 나머지를 소문자로 구성. 여러 단어로 구성된 경우 단어 첫 문자는 대문자로 구성.
- public enum 열거타입이름 {...}
public enum Week {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, ...}
public enum LoginResult {LOGIN_SUCCESS, LOGIN_FAILED}
- 열거 타입 변수
- 열거타입 변수 = 열거타입.열거상수;
Week today = Week.SUNDAY;
Week birthday = null;
열거 객체의 메소드
- name() : 열거 객체가 가지고 있는 문자열 리턴
- ordinal() : 전체 열거 객체 중 몇 번째 열거 객체인지 알려준다.
- compareTo() : 매개값으로 주어진 열거 객체를 기준으로 전후로 몇 번째 위치하는지 비교
- valueOf() : 매개값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 리턴
- values() : 열거 타입의 모든 열거 객체들을 배열로 만들어 리턴
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] 자바 메모리 구조 - Heap, Stack, JVM, GC (0) | 2022.06.23 |
---|---|
Ch06. 클래스 (0) | 2022.01.02 |
Ch04. 조건문과 반복문 (0) | 2022.01.01 |
Ch03. 연산자 (0) | 2022.01.01 |
Ch02. 변수와 타입 (0) | 2022.01.01 |