참조 타입(reference type)
- 객체의 메모리 번지를 참조하는 타입
- 배열, 열거, 클래스, 인터페이스
메모리 사용 영역
힙 영역
- 객체와 배열이 생성되는 영역
- 참조하는 변수나 필드가 없으면 의미 없는 객체(쓰레기)
JVM 스택 영역
- 스레드마다 1개씩 존재
- 추가적인 스레드가 없으면 main 스레드만 존재
- 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 제거함
- 프레임 내부에 로컬 변수 스택이 존재
참조 변수의 ==, !=
null
- 참조 타입 변수는 힙 영역의 객체를 참조하지 않는단 의미로 사용
- null로 초기화된 참조 변수는 스택 영역에 생성
String 타입
- 문자열 리터럴이 동일하면 String 객체를 공유함
- new 연산자는 힙 영역에 새로운 객체를 만들 때 사용하는 연산자(객체 생성 연산자)
- new를 사용해 객체를 생성하면 내용이 같아도 다른 객체를 참조
- 문자열 자체를 비교할 때는 equals() 메서드 사용
배열 타입
- 같은 타입의 많은 데이터를 다룰 때 필요한 자료구조
- 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스(index)를 부여
- 한 번 생성된 배열은 길이늘 변경할 수 없음
- 길이를 변경하려면 새로운 배열을 생성하고 기존 배열을 복사하여 사용
배열의 선언
타입[] 변수명;
타입 변수명[];
값 목록으로 초기화
타입[] 변수명 = {값0, 값1, ...};
- 배열 변수를 이미 선언하고 중괄호를 사용한 생성은 불가능
- 최초 배열을 선언한 후면, new 연산자를 사용
변수명 = new 타입[] {값0, 값1, ...};
- 메서드의 매개값이 배열일 경우에도 new 연산자 사용
new 연산자로 배열 생성
- 값 목록은 없으나 미리 배열을 만들고 싶을 때, new 연산자로 배열 생성
타입[] 변수명 = new 타입[길이];
- 이미 배열 변수를 선언한 후에도 가능
타입[] 변수명 = null;
변수명 = new 타입[길이];
- new 연산자로 배열을 처음 생성하면 배열은 자동적으로 0으로 초기화됨
- String 배열을 생성했다면 모두 null로 초기화됨
배열의 길이
- 배열에 저장할 수 있는 전체 항목 수
변수명.length;
- length는 읽기 전용, 값을 바꿀 수 없음
커맨드 라인 입력
프로그램 실행에 main() 메서드가 필요
main()의 매개변수 String[] args
- 'java 클래스'로 프로그램을 실행하면 JVM은 길이가 0인 String배열을 먼저 생성하고 main() 메서드를 호출할 때 매개값으로 전달
- 'java 클래스' 뒤에 공백으로 구분된 문자열 목록을 주고 실행하면 main()메서드를 호출할 때 매개값으로 전달됨
java 클래스명 문자열0 문자열1 ... 문자열 n-1
다차원 배열
객체를 참조하는 배열
- 기본 타입 배열은 각 항목에 직접 값을 가짐
- 참조 타입 배열은 각 항목에 객체의 번지를 가짐
배열 복사
- 배열은 한 번 생성하면 크기 변경이 불가능 하므로 새로운 배열을 생성하고 복사가 필요
- for문을 사용하거나 System.arraycopy()메서드 사용
System.arraycopy()메서드
System.arraycopy(원본 배열, 원본 배열의 복사를 시작할 인덱스, 복사 배열, 복사 배열의 붙여넣기를 시작할 인덱스, 복사할 개수);
for문
for(타입 변수명 : 배열) {
...실행문...
}
- 배열 및 컬렉션 항목의 크기만큼 반복하고 자동으로 for문을 빠져나감
열거 타입
- 한정된 값만을 갖는 데이터 타입
ex) 요일, 1 ~ 12월
열거 타입 선언(public enum)
- 열거 타입의 이름을 정하고 그 이름으로 소스파일(.java) 생성
- 첮 문자를 대문자로하고 나머지는 소문자
- public enum 키워드는 열거 타입을 선언하기 위한 키워드
public enum 열거타입이름 {....}
열거 타입 변수
열거 타입 메서드
- 열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있음
- 메서드는 java.lang.Enum 클래스에 선언된 메서드
- 모든 열거 타입은 컴파일 시에 Enum 클래스를 상속하게 됨
리턴 타입 | 메서드 | 설명 |
---|
String | name() | 열거 객체의 문자열 리턴 |
int | ordinal() | 열거 객체의 순번을 리턴(0부터 시작) |
int | compareTo() | 열거 객체를 비교해서 순번 차이를 리턴 |
열거 타입 | valueOf(String name) | 주어진 문자열의 열거 객체를 리턴 |
열거 배열 | values() | 모든 열거 객체들을 배열로 리턴 |