1. 데이터 타입 분류

  • 기본 타입(primitive type): 정수, 실수, 문자, 논리 리터럴을 저장하는 타입
  • 참조 타입(reference type): 객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말함

2. 메모리 사용 영역

자바 메모리 영역

  • 메소드(Method) 영역: JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역.
  • 힙(Heap) 영역: 객체와 배열이 생성되는 영역. JVM이 쓰레기 수집기(Garbege Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거.
  • JVM 스택(Stack) 영역: 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당. 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop).

3. 참조 변수의 ==, != 연산

참조 타입 변수의 값은 힙영역의 객체 주소이므로 결국 주소 값을 비교하는 것.
동일한 객체를 참조하고 있을 때만 ==연산 결과가 true. 값이 같더라도 다른 객체를 참조하고 있는 경우는 false가 나옴.

4. null과 NullPointerException

  • null

참조 타입 변소는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있음. 해당 참조 변수는 스택영역에 생성됨.

  • NullPointerException

null값을 가지고 있는 참조 타입 변수를 사용할 경우 발생하는 예외.

int[] array = null;
array[0] = 10;  // NullPointerException

array 변수가 참조하는 배열 객체가 없기 때문에 NullPointerException발생.

5. String 타입

문자열이 직접 변수에 저장되는 것이 아닌, 문자열은 String 객체로 생성되고 변소는 String 객체를 참조하는 것.

  • 생성 방법
    ```{.java} // 1. 변수 우선 선언 후 문자열 리터럴 대입 String str = null; str = “ABC”;

// 2. 변수 선언 및 문자열 리터럴 대입 String str = “ABC”;

// 3. new연산자 사용 String str = new String(“ABC”);

String은 객체를 참조하기 때문에 문자열의 값만을 비교하는 경우 equals() 메소드 사용.

## 6. 배열 타입
같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조.  
선언과 동시에 저장할 수 있는 데이터 타입이 결정되며, 한 번 생성된 배열의 길이는 늘리거나 줄일 수 없음.

* **선언 방법**   
```{.java}
// 1. 데이터타입[] 변수명;
int[] array;

// 2. 데이터타입 변수명[];
int array[];

// 3. new연산자 사용
int[] array = new int[5];
  • 배열 복사
    1. for문을 사용
      for(int i=0; i<arrayA.length; i++)
      arrayB[i] = arrayA[i];
      
    2. System.arraycopy() 메소드 사용
      System.arraycopy(원본배열, 원본배열 시작 idx, 새배열, 새배열 시작 idx, 복사 개수);
      

cf) 메소드의 매개값이 배열일 경우 new연산자 사용.

int sum = sum( new int[] {10,20} );

7. 열거 타입

한정된 값만을 갖는 데이터 타입.
몇 개의 열거 상수 중에서 하나의 상수를 저장하는 데이터 타입.

  • 열거타입 선언
    열거타입 이름을 정한 후 열거타입 이름으로 소스파일(.java)생성.

  • 열거 객체의 메소드
    열거객체 메소드를 열거 객체에서 사용할 수 있는 이유는 모든 열거 타입은 컴파일 시에 Enum 클래스에 상속하세 되어 있기 때문.

    1. name(): 열거 객체의 문자열 리턴
    2. ordinal(): 열거 객체의 순번(0부터 시작)을 리턴
    3. compareTo(): 열거 객체를 비교해서 순번 차이를 리턴
    4. valueOf(String name): 주어진 문자열의 열거 객체를 리턴
    5. values(): 모든 열거 객체들을 배열로 리턴

참고 서적

이것이 자바다, 신용권 지음, 한빛미디어