Java 변수와 초기화

변수 종류

  • 멤버 변수(필드): 클래스에 선언
  • 지역 변수: 메소드에 선언, 매개변수도 지역 변수에 포함한다.

멤버변수(필드)

클래스 코드부터 살펴보도록 한다.

public class Stduent {
    String name;
    int age;
    int grade;
}

이 코드에서 다음과 같이 멤버 변수를 갖고 있다.

  • 멤버변수 name
  • 멤버변수 age
  • 멤버변수 grade

지역 변수

public class starter {
    public static void main(String[] args)
    {
        Stduent stduent1;
        student1 = new Student();
        
        Stduent stduent1 = new Student();
    }
}

코드에서 main의 지역 변수는 다음과 같이 있다.

  • 지역변수 student1
  • 지역변수 student2

지역 변수 특징은 main 블록에 선언된 student1, student2 지역변수가 있다.
만약 main 블록이 끝나게 되면 student1, student2 지역변수를 더는 사용할 수 없다.
이는 메소드 블록에서 지역변수를 선언해도 마찬가지이다.

다음 코드에서는 primaitiveValue 내부 매개변수로 int x 선언 후 x = 100; 할당하는 부분이 있다.
primaitiveValue 메소드 블록을 벗어나게 되면 x의 값은 사용할 수 없게 되므로 main 함수에서 x 값이 100이 되지 않는다.

public static void primitiveValue(int x) {
    x = 100;
    // x = 100; 는 이 primitiveValue 지역 변수에서만 사용한다.
}

public static void main(String[] args) {
    int a = 1;
    System.out.println("메소드 호출 전 a의 값: " + a);
    primitiveValue(a);
    System.out.println("메소드 호출 후 a의 값: " + a);
}

초기화

멤버 변수 또는 지역 변수에 따라 초기화 동작이 다르다.

  • 멤버 변수: 변수 자동 초기화
  • 지역 변수: 변수 수동 초기화

멤버변수 초기화

멤버 변수는 인스턴스를 생성할 때 자동으로 초기화하도록 한다.
또는 개발자가 수동으로 리터럴 값 할당으로 초기화를 지정할 수 있다.
자동으로 초기화 한 경우 타입별 초기화 값이 다르다.

  • int: 값 0 초기화
  • double: 값 0.0 초기화
  • boolean: 값 false 초기화
  • 참조형 클래스: 값 null 초기화
public static class Point {
    int x; // 초기화 하지 않음
    int y = 10; // 초기화 값 10 할당
}

public static void main(String[] args) {
    Point p = new Point();
    System.out.println("p 의 x 값: " + p.x + ", y 값: " + p.y);
}

실행결과

p 의 x 값: 0, y 값: 10

지역 변수 초기화

지역 변수는 자동으로 초기화 되지 않기 때문에 오류가 발생한다.

public static void main(String[] args) {
    int x;
    int y = 10;
    System.out.println("x 값: " + x + ", y 값: " + y);
}

위의 코드를 실행 시 변수 x 가 초기화 되지 않아 실행되지 않는다.