1 minute read

Updated:

참조 타입

기본 타입과 참조 타입

  • 기본 타입은 실제 값을 변수에 저장하고, 참조 타입은 객체의 번지 값을 저장한다.
  • 변수는 스택 영역에 생성되고, 문자열 리터럴은 힙 영역에 String 객체로 생성된다.
  • 참조 타입에는 배열, 열거, 클래스, 인터페이스가 있다.

메모리 사용 영역

  • 메소드 영역 : 클래스별로 바이트 코드들이 저장되어 있다. (.java –> .class가 로딩된다.)
  • 힙 영역 : 클래스로부터 생성된 객체와 배열이 저장
  • JVN 스택 영역 : 프레임이 쌓여서 저장된다. 프레임 안에는 메소드가 호출할 때 사용될 변수들이 있다.
    메소드를 호출할 때마다 프레임이 추가되고, 메소드가 종료되면 해당 프레임이 제거

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

  • 참조 타입 변수 간의 번지를 비교한다. 동일한 객체를 참조하는 지 다른 객체를 참조하는 지 알아볼 때 사용.
  • 객체를 비교하는 코드는 일반적으로 if문에서 많이 사용된다.

null과 NullPointerException

  • null : 참조 타입 변수가 객체를 참조하지 않는다는 뜻으로 null값 가질 수 있다.
  • NullPointerException : 참조 타입 변수가 null인 상태에서 존재하지 않는 객체의 데이터나 메소드 사용할 경우 발생. 해당 참조 변수가 객체를 참조하도록 수정하여 해결
int[] intArray = null;
intArray[0] = 10; //NullPointerException

String 타입

선언 type1 : 문자열 리터럴

  • String 변수에 문자열 리터럴을 대입할 경우, String 객체가 생성되고 변수가 String 객체를 참조
  • 문자열 리터럴 동일한 경우 같은 String 객체를 공유
String name1 = "홍길동";
String name2 = "홍길동";

선언 type2 : new 연산자 사용

  • 객체 생성 연산자로, 힙 영역에 새로운 String 객체를 생성한다.
String name1 = new String("홍길동");
String name2 = new String("홍길동);

문자열 비교

  • == : 번지 비교(x) equals() : 문자열 비교(o)
boolean result = str1.equals(str2);
                //원본문자열  //비교문자열

쓰레기 객체

  • String 변수 초기값을 null로 대입. String 변수가 참조하는 객체가 없음을 의미
  • 참조를 잃은 String 객체는 쓰레기 수집기를 통해 메모리에서 자동 제거
String hobby = null;
String hobby = "여행";
hobby = null;

Categories:

Updated: