📚 이것이 자바다 [개정판]
- 자바의 데이터 타입은 기본 타입과 참조 타입으로 분류된다
- 참조 타입(reference type)
- 배열타입
- 열거타입
- 클래스
- 인터페이스
✍🏻 기본 타입 변수 vs. 참조 타입 변수
[기본 타입 변수]int age = 25;
,double price = 100.5;
선언된 변수는 값 자체를 저장하고 있다[참조 타입 변수]
String name = "자바";
String job = "programmer";
선언된 변수는 객체가 생성된 메모리 번지를 저장한다
- java 명령어로 JVM이 구동되면 운영체제에서 할당받은 메모리를 사용
메소드 영역 | 클래스별로 상수, 정적 필드, 메소드 코드, 생성자 코드 등이 저장 |
---|---|
힙 영역 | new 연산자를 통해 생성한 객체 저장, 메소드 영역과 스택 영역의 상수와 변수를 통해 객체의 번지를 참조한다.런타임 시 동적으로 할당하여 사용하는 메모리 영역 |
스택 영역 | 메소드를 호출할 때 저장되고, 호출이 끝날 때 제거 |
배열은 같은 타입의 값만 관리한다
- 배열의 길이는 늘리거나 줄일 수 없다
- 배열을 생성한 경우 항목은 모두 해당 타입의 기본값으로 초기화된다
// 배열 변수 선언
타입[] 변수명;
타입 변수명[];
// 배열 생성
타입[] 변수명 = {값0, 값1, 값2, ...};
타입[] 변수명 = new 타입[길이];
// 😨 배열 변수를 미리 선언한 후에 값 목록을 변수에 대입할 수 없다
타입[] 변수명;
변수명 = {값0, 값1, 값2, ...};
// 배열 변수 선언
타입[][] 변수명;
타입 변수명[][];
타입[] 변수명[];
// 배열 생성
타입[] 변수명 = {
{값0, 값1, 값2, ...},
{값0, 값1, 값2, ...},
{값0, 값1, 값2, ...}
}
타입[][] 변수명 = new 타입[1차원 길이][2차원 길이];
스택 메모리에 1차원의 주소 저장, 1차원 인덱스에 2차원 주소 저장
- 참조 타입 배열은 각 항목에 객체의 번지를 저장한다
String[] strArr = new String[4];
strArr[0] = "Java";
strArr[1] = "Java";
strArr[2] = "Python";
strArr[3] = new String("Java");
- 윈도우의 명령 프롬프트 또는 맥OS의 터미널에서 프로그램을 실행할 때 요구하는 값이 있을 수 있다
- 예를 들어 두 수를 입력받아 덧셈을 수행하는 Sum 프로그램을 실행해보자.
java Sum 10 20
- 공백으로 구분된 10과 20은 문자열로 취급되며 Stirng[] 배열의 항목 값으로 구성된다
public static void main(String[] args) {...}
- main() 메소드가 호출될 때 String배열인 args 변수에 배열 항목 값으로 저장되어 매개값으로 사용된다
몇 가지로 한정된 값을 갖는 데이터 (계절, 요일 등)
- 한정된 값을 갖는 타입을 의미한다
- 모두 대문자로 작성하며, 여러 단어일 경우 언더바(_)로 연결하는 것이 관례
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
Week today; // 하나의 데이터 타입이므로 변수를 선언하고 사용해야 한다
Week today = Week.SUNDAY;
Week birthday = null; // 참조 타입이므로 null 대입이 가능하다