[자바] 변수, 오류

brand_mins·2024년 1월 12일

Java

목록 보기
39/47

1. 변수의 종류

  • 멤버변수: 클래스에 선언
  • 지역변수: 메서드에 선언, 매개변수도 지역변수의 한 종류

1) 멤버변수

public class Student {
	String name;
    int age;
    int grade;
}
  • name, age, grade는 멤버변수이다.

2) 지역변수

public class Var {
	public static void main(String[] args) {
    	Student student1;
        student1 = new Student();
        Student student2 = new Student();
    }
}
  • student1, student2는 지역변수

(1) 변수 초기화

  • 멤버변수는 자동 초기화
- 인스턴스 멤버 변수는 인스턴스를 생성할 때 자동으로 초기화한다.
- int, boolean, 참조형을 예를 들 수 있다.
  • 지역변수는 수동적으로 초기화해야한다.
- 지역변수는 항상 직접 초기화
package ref;

public class InitData {
    int value1; // 초기화 하지 않음
    int value2 = 10; // 10으로 초기화
}
package ref;

public class InitMain {
    public static void main(String[] args) {
        InitData data = new InitData();
        System.out.println("value1 = " + data.value1);
        System.out.println("value2 = " + data.value2);
    }
}

2. Null

  • 참조형 변수는 항상 객체가 있는 위치를 가리키는 참조값이 들어간다.
  • 하지만 가리키는 대상이 없다면 null이라는 특별한 값을 넣어야 함.
package ref;

public class NullMain1 {
    public static void main(String[] args) {
        Data data = null;
        System.out.println("1. data = " + data);
        data = new Data();
        System.out.println("2. data = " + data);
        data = null;
        System.out.println("3. data = " + data);
    }
}

3. NullPointerException

  • 해당 객체를 접근하는 주소가 없을때 찾아가려고 하면 예외 오류 발생
package ref;

public class BigData {
    Data data; // 참조형이기에 기본값 null
    int count; // 0
}

package ref;

public class NullMain3 {
    public static void main(String[] args) {
        BigData bigData = new BigData();

        System.out.println("bigData.count = " + bigData.count);
        System.out.println("bigData.data = " + bigData.data);

        // NullPointerException 발생
        System.out.println("bigData.data.value = " + bigData.data.value);

    }
}
  • 해결법은 null값인 bigData를 new 연산자를 사용하여 생성한 후 참조값을 할당받는다.
package ref;

public class NullMain4 {
    public static void main(String[] args) {
        BigData bigData = new BigData();
        bigData.data = new Data(); // 새 데이터를 생성하면 참조값이 생김
        System.out.println("bigData.count = " + bigData.count);
        System.out.println("bigData.data = " + bigData.data);

        // NullPointerException 발생
        System.out.println("bigData.data.value = " + bigData.data.value);

    }
}

정리

  • 자바는 항상 변수의 값을 복사해서 대입한다.

(1) 기본형vs참조형

  • 기본형을 제외한 나머지 변수는 모두 참조형.
  • 참조형은 배열을 다루는 변수를 참조형
  • 기본형은 직접 변수의 값을 대입하지만 참조형은 참조값을 저장한다.
  • 기본형은 직접 연산이 가능하지만 참조형은 불가능하다.
  • 기본형은 null을 할당할 수 없지만 참조형은 가능하다.

(2) 기본형vs참조형 - 메서드 호출

  • 메서드 호출 시 기본형은 매개변수 값을 변경해도 호출자의 변수 값에 영향이 없다.
  • 하지만, 참조형은 매개변수가 전달된 멤버변수를 변경하면 호출자의 객체도 변경된다.
profile
IT 개발자가 되기 위한 기록

0개의 댓글