728x90
변수 유효 범위란?
- 지금까지 3 가지 종류의 변수를 배웠습니다.
- 첫 번째, 함수나 메서드 안에서만 사용할 수 있는 지역 변수(로컬 변수 local variable)
- 두 번째, 클래스 안에서 사용하는 멤버 변수(인스턴스 변수 instance variable)
- 세 번째, 여러 인스턴스에서 공통으로 사용할 수 있는 static 변수(클래스 변수 class variable)
- 변수는 어디에 어떻게 선언되느냐에 따라 유효 범위(scope)가 달라집니다.
지역 변수의 유효 범위
- 지역 변수는 함수나 메서드 내부에 선언하기 때문에 함수 밖에서는 사용할 수 없습니다.
- 즉, 하나의 함수에 선언한 지역 변수는 다른 함수에서 사용할 수 없습니다.
- 그 이유는 스택 메모리와 관련이 있습니다.
- 일반 메서드와 함수는 호출될 때 스택에 생성됩니다. 그리고 이때 지역 변수도 함께 생성됩니다.
- 그리고 함수가 수행을 마치고 반환되면 할당되었던 스택 메모리 공간이 해제되면서 지역 변수도 함께 사라지게 됩니다.
- 그렇기 때문에 자연스럽게 함수나 메서드 내부에서 선언한 지역 변수는 다른 함수에서 사용할 수 없습니다.
멤버 변수(인스턴스 변수, 동적변수)의 유효 범위
- 멤버 변수는 인스턴스 변수라고도 합니다.
- 멤버 변수(인스턴스 변수)는 클래스가 생성될 때 힙(heap) 메모리에 생성되는 변수입니다.
- 멤버 변수는 클래스의 어느 메서드에서나 사용할 수 있습니다.
- 멤버 변수(인스턴스 변수)는 힙(heap) 메모리에 생성된 인스턴스가 작동을 마치고 가비지 컬렉터(garbage collector)가 수거하면, 인스턴스와 함께 메모리에서 사라집니다.
- 따라서 클래스 내부의 여러 메서드에서 사용할 변수는 멤버 변수로 선언하는 것이 좋습니다.
- 멤버 변수(인스턴스 변수)는 다른 클래스에서 사용될 때 무조건 new 예약어를 통해 생성된 인스턴스를 통하여 사용됩니다.
static 변수(클래스 변수, 정적변수)의 유효 범위
- 사용자가 프로그램을 실행하면 메모리에 프로그램이 상주합니다.
- 이때 프로그램 영역 중에 데이터 영역이 있습니다.
- 데이터 영역에는 상수나 문자열, static 변수가 생성됩니다.
- 인스턴스 변수는 객체가 생성되는 문장(예약어) new 가 되어야 힙 메모리에 생성되지만, static 변수는 클래스 생성과 상관 없이 처음부터 데이터 영역 메모리에 생성됩니다.
- 이렇게 생성된 static 변수는 private이 아니라면 클래스 외부에서도 객체 생성과 무관하게 사용할 수 있습니다.
- static 변수는 다른 클래스에서 사용될 때 클래스 명을 통해서 바로 사용 가능합니다.
변수 유형을 나눈 이유
- 앞에서 배운 세 가지 변수를 표로 정리하면 아래와 같습니다.
- 변수는 특성에 맞게 선언해서 사용하는 것이 중요합니다.
- 클래스의 여러 메서드에서 사용할 변수를 지역 변수로 선언하면 다른 메서드에서 그 변수를 사용해야 할 때 지역 변수를 메서드의 매개변수로 전달해야 하므로 번거롭습니다.
- 그렇다고 모든 변수를 멤버 변수나 static 변수로 선언하면 메모리가 낭비되고 코드의 가독성도 떨어집니다.
- 따라서 용도에 따라 변수 유형을 정해서 프로그래밍하는 것이 효율적입니다.