☕Java 변수 유효 범위

hamsang·2022년 5월 22일
3

Java

목록 보기
10/36
post-thumbnail
  • 지역 변수(로컬 변수, local variable)
  • 멤버 변수(인스턴스 변수, instance variable)
  • static 변수(클래스 변수, class variable)

☕ 변수 유형에 따른 용도

변수 유형선언 위치사용 범위메모리생성과 소멸
지역변수
(로컬변수)
함수 내부에 선언함수 내부에서만 사용스택(stack)함수가 호출될 때 생성되고 함수가 끝나면 소멸함
멤버 변수
(인스턴스 변수)
클래스 멤버 수로 선언클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능힙(heap)인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨
static 변수
(클래스 변수)
static 예약어를 사용하여 클래스 내부에 선언클래스 내부에서 사용하고 private이 클래스 이름으로 다른 클래스에서 사용 가능데이터 영역프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 떄 소멸됨

위 표를 글로 정리해보겠습니다!


📌 지역 변수의 유효 범위

  • 로컬 변수라고도 합니다.

  • 스택(stack) 메모리에 생성됩니다.

  • 지역 변수는 함수나 메서드 내부에 선언하기 때문에 함수 밖에서는 사용할 수 없습니다.

  • 스택에 생성되는 지역 변수는 함수가 호출될 때 생성되었다가 함수가 반환되면 할당되었던 메모리 공간이 해제되면서 함께 없어집니다.


📌 멤버 변수의 유효 범위

  • 인스턴스 변수라고도 합니다.

  • 힙(heap) 메모리에 생성됩니다.

  • 클래스가 생성될 때 메모리에 함께 생성되는 변수입니다.

  • 멤버 변수는 클래스의 어느 메서드에서나 사용할 수 있습니다.

  • 힙에 생성된 인스턴스가 GC (garbage collector)에 의해 수거되면 메모리에서 사라집니다.
    ▶ 따라서 클래스 내부의 여러 메서드에서 사용할 변수는 멤버 변수로 선언하는 것이 좋습니다.


📌 static 변수의 유효 범위

  • 클래스 변수라고도 합니다.

  • 사용자가 프로그램을 실행하면 메모리에 프로그램이 상주합니다. 프로그램 영역 중 데이터 영역에 생성됩니다. (상수나 문자열도 데이터 영역에 생성)

  • 인스턴스 변수는 객체가 생성되는 문장 즉 new가 되어야 생성되지만, static 변수는 클래스 생성과 상관없이 처음부터 데이터 영역 메모리에 생성됩니다.

  • 이렇게 생성된 static 변수는 private이 아니라면 클래스 외부에서도 객체 생성과 무관하게 사용할 수 있습니다!

  • 프로그램 실행이 끝난 뒤 메모리에서 내려가면 static 변수도 소멸됩니다.
    ▶ static 변수는 프로그램이 시작할 때부터 끝날 때까지 메모리에 상주하므로 크기가 너무 큰 변수를 static으로 선언하는 것은 좋지 않습니다. (메모리 낭비가 심하기 때문!)


📌 변수는 특성에 맞게 선언해서 사용하는 것이 중요합니다!

예를 들어 클래스의 여러 메서드에서 사용할 변수를 지역 변수로 선언하면 다른 메서드에서 그 변수를 사용해야 할 떄 지역 변수를 메서드의 매개변수로 전달해야하므로 번거롭습니다. 그렇다고 모든 변수를 멤버 변수나 static 변수로 선언하면 메모리가 낭비되고 코드의 가독성도 떨어지게 됩니다.

  • 변수의 특성을 잘 파악하고 용도에 따라 프로그래밍하는 것이 좋은 코드입니다.
profile
햄생

1개의 댓글

comment-user-thumbnail
2022년 5월 22일

그림이나 그려라

답글 달기

관련 채용 정보