*본 게시물은 개인 공부를 기록하기 위해 작성하였으며, 내용에 오류가 있을 수 있음을 밝힙니다.
변수(Variable)의 분류
변수는 선언하는 위치에 따라 멤버 변수와 지역 변수로 나뉜다. 멤버 변수는 선언 위치가 클래스 영역이고, 지역 변수는 선언 위치가 메서드나 생성자 내부이다. 멤버 변수는 다시 클래스 변수와 인스턴스 변수로 나눌 수 있는데, 클래스 변수는 모든 객체가 공통적으로 같은 속성을 가질 때 사용한다. 또한, 클래스 변수는 static 키워드를 사용하고, 객체를 생성하지 않아도 사용할 수 있다. 인스턴스 변수는 각각의 객체마다 개별적인 속성을 가질 때 사용하고, 클래스 변수와 달리 객체를 생성해야 사용할 수 있다. 지역 변수는 메서드 내에 선언되어 메서드 내에서만 사용할 수 있는 변수이며, 메서드가 종료될 때 자동으로 소멸된다.
위 내용을 표로 정리하면 다음과 같다.

인스턴스 변수 (Instance Variable) 코드 예제


위 코드에 나오는 것처럼 인스턴스 변수 각 객체(인스턴스)마다 각각의 값을 가지는 변수이고, 인스턴스마다 따로 저장되므로, 하나의 객체에서 값을 바꿔도 다른 객체에는 영향을 주지 않는다.
클래스 변수 (Class Variable) 코드 예제


위 코드와 출력값을 보면 알 수 있듯이, 클래스 변수인 count 앞에는 static 키워드가 붙어있고, 이 변수는 모든 인스턴스가 공유한다. 위 코드에서는 생성자가 실행될 때마다 count 값이 1씩 증가하므로 출력값은 2가 나온다.
※이 코드를 보다가 갑자기 궁금한 점이 생겼다.
Q) count++ 같은 실행문은 main 메서드 안에 써야하는거 아닌가? 메인 메서드 밖에서는 선언만 가능한 거 아닌가? 왜 main문 밖에 써도 오류 없이 실행이 되는 거지?
-> 실행문 count++는 현재 생성자 안에 쓰여있다. 생성자도 메서드의 한 종류이므로, 그 안에서는 실행문을 자유롭게 쓸 수 있다.
지역 변수 (Local Variable) 코드 예제


위 코드와 출력값을 보면 add라는 메서드 내에서 사용되는 result라는 지역 변수가 있다. 이 메서드를 main문 내에서 실행시키면 add 메서드 내에서 계산된 결과인 8이 출력된다는 것을 알 수 있다. 이 지역 변수는 메서드나 블록 내부에서 선언되는 변수이므로 해당 블록을 벗어나면 소멸된다. 위 코드를 보면 add 메서드를 호출한 이후의 result값은 add 메서드의 result와 별개라는 것을 알 수 있다. 이러한 특징들 때문에 지역 변수는 보통 일시적인 계산, 임시 저장, 반복 변수 등에 사용된다.