변수와 초기화, null

한라봉봉·2023년 12월 15일

JAVA

목록 보기
4/16
post-thumbnail

변수의 종류

  1. 멤버변수 : 클래스에 선언
  2. 지역변수 : 메서드에 선언, 매개변수도 지역변수의 한 종류
    특정 지역(블록)에서만 사용되므로 메서드가 끝나면 제거된다.

변수의 값 초기화

  1. 멤버변수: 자동초기화
    1) 인스턴스의 멤버변수는 인스턴스를 생성할때 자동으로 초기화된다.
    2)int = 0, boolean = false, 참조형 = null(참조할 대상이 없다는 뜻)
    3) 개발자가 초기값을 직접 지정할 수있다.
    4) 전역, 정적(static) 변수도 자동초기화됨
public class InitData {
  int value1; // 초기화 하지 않음
  int value2 = 10; //10으로 초기화

}

  1. 지역변수: 수동초기화
    1) 지역변수는 항상 직접 초기화해야 한다.
    2) int num;을 선언하더라도 여기 값에는 비어있는 값이 들어있는 것이 아닌
    메모리에 있는 쓰레기 값이 들어있다.
    3) 초기화 시키지 않을경우 컴파일 오류가 난다.

null

  1. 참조형 변수에서는 아직 가리키는 대상이 없거나, 아직 정해지지않아 나중에 입력하고 싶다면 null이라는 값을 넣어둔다.
public class Data {
    int value;
}
        Data data = null; // 직접할당가능
        System.out.println(data);
        data = new Data(); // 객체 생성시 참조값 저장
        System.out.println(data);
        data = null; //다시 null 재할당, 위의 Data 인스턴스는 아무도 참조x
        System.out.println(data);

  1. GC
    JVM의 가비지 컬렉션은 1번 예제와 같이 아무도 참조하지 않는 인스턴스를 메모리에서 제거한다. 다시 접근할 방법이 없고 자리만 차지하기 때문.

NullPointerException

참조값 없이 객체를 찾아가면 NullPointerException 발생.
주소가 없는곳을 찾아갈때 발생하는 예외이다.

        Data data = null;
        data.value = 10;
        System.out.println(data);

Exception in thread "main" java.lang.NullPointerException
at NullMain2.main(NullMain2.java:4)

  1. 앞선 예제와 같이 지역변수의 경우에는 null 문제 파악이 쉽다. 아래와 같이 멤버변수가 null인 경우에는 주의가 필요하다.
public class BigData {
	Data data //null
    int count //0
}
        BIgData bigData = new BIgData();
        System.out.println("bigData.count= "+bigData.count);
        System.out.println("bigData.data= "+bigData.data); // data는 null


        //null인 bigData.data에 점을 찍어 참조하면 NullPointerException
        System.out.println("bigData.data.value= "+bigData.data.value); 
  1. 1번에서 NullPointerException은 Data 인스턴스를 만들면 주소값이 들어가므로해결된다.
        BIgData bigData = new BIgData();
        bigData.data = new Data(); 
        System.out.println("bigData.count= "+bigData.count);
        System.out.println("bigData.data= "+bigData.data); // data는 null


        //null인 bigData.data에 점을 찍어 참조하면 NullPointerException
        System.out.println("bigData.data.value= "+bigData.data.value); 
profile
백엔드 개발공부 로그를 기록합니다

0개의 댓글