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 가 초기화 되지 않아 실행되지 않는다.