개인공부

[Java] 참조 타입

러쉬봠 2023. 5. 6. 09:40

데이터 타입 분류

참조 타입이란 ?

  • 객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다.

메소드 영역

  • 코드에서 사용되는 클래스(.class)들을 클래스 로더로 읽어 클래스별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장한다. 메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.

힙 영역

  • 객체와 배열이 생성되는 영역이다.
  • JVM은 쓰레기 수집기(Garbage Collertor)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.

JVM 스택(Stack)영역

  • 각 스레드마다 하나씩 존재하며 스레드가 시작할 때 할당된다.
  • 메소드를 호툴할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행한다.

메모리 사용 영역

  1. Java MemoryExample
  2. JVM 구동
  3. MemoryExample 로딩
  4. main 스레드 생성 - JVM 스택 생성
  5. main() 메소드 생성
  6. public static void main(String[] args){}
  7. int sum = 0;
  8. if(sum == 0) { int v2 = 10;
  9. int v3 = 20;
  10. sum = add(v2, v3);
  11. public static int add(int a, int b){ return a + b}
  12. System.out.println(sum);
  13. JVM 종료

null과 NullPointerException

  • null(널)
    • 변수가 참조하는 객체가 없을 경우 초기값으로 사용 가능
    • 참조 타입의 변수에만 저장가능
    • null로 초기화된 참조 변수는 스택 영역 생성
  • NullPointerException
    • 예외(Exception)
      • 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
    • NullPointerException
      • 참조 변수가 null 값을 가지고 있을 때, 객체의 필드나 메소드를 사용하려고 했을 때 발생
int[] intArray = null
intArray[0] = 10; 		// NullPointerException

String str = null;
System.out.println("총 문자수 : "  str.length()); 	// NullPointerException