티스토리 뷰
원문 사이트 : tutorialspoint.com/Member-variables-vs-Local-variables-in-Java
1. 로컬 변수
- 로컬 변수는 메소드, 생성자 또는 블록 내부에서 선언된다.
- 로컬 변수는 메소드, 생성자 또는 블록에 진입할 때 생성되고, 메소드, 생성자 또는 블록을 빠져나가면 소멸된다.
- 로컬 변수에는 접근제어자(Access Modifier)를 사용하지 않는다.
- 로컬 변수는 내부적으로 stack 레벨에서 수행된다.
- 로컬 변수에 대한 기본값은 없다. 때문에 로컬 변수는 변수를 하용하기 전에 변수 선언과 초기화가 이루어져야 한다.
2. 객체(Instance)/멤버 변수
- 객체 변수는 클래스에서 선언된다. 클래스 내부이자 메소드, 생성자 또는 블록 외부여야 한다.
- heap에서 객체(object)에 대한 공간이 할당되면, 각 객체 변수에 대한 slot이 생성된다.
- 'new' 키워드를 사용하여 객체(object)를 생성할 때 객체 변수가 생성되고, 객체가 파괴될 때 같이 소멸된다.
- 객체 변수는 값을 가지고 있고, 그 값은 하나 이상의 메소드, 생성자 또는 블록, 또는 클래스 도처에 존재하는 객체 상태의 필수적인 부분(essential parts of an object's state that must be present throughout the class)에 의해 참조되어야 한다.
- 객체 변수는 사용 전 또는 후에 클래스 내부에서 선언될 수 있다.
- 객체 변수에는 접근제어자가 주어진다.
- 객체 변수는 클래스 내의 모든 메소드, 생성자 그리고 블록에서 볼 수 있다. 일반적으로 객체 변수는 접근제어자를 private으로 하여 만들기를 권장한다. 그러나 하위 클래스에서 이 변수들을 사용하기 위해서는 접근제어자를 수정하여 사용할 수 있다.
- 객체 변수는 초기값을 가지고 있다. 숫자의 경우 초기값은 0이고, Boolean의 초기값은 false, object 객체의 초기값은 null이다. 생성자가 선언되는 동안 또는 생성자 내부에서 초기화될 수 있다.
- 객체 변수는 클래스 내부에서 변수명을 호출함으로써 직접적으로 접근할 수 있다. 그러나 static 메소드 내부에서라서면 (객체 변수에 접근성이 주어질 때), 객체 변수는 the fully qualified name(객체명.변수명)으로 호출할 수 있다.