[Java] 변수의 스코프

이경환·2021년 12월 3일
1

JAVA

목록 보기
1/6

변수와 스코프

스코프는 유효 범위이다 일반적으로 블록내에 변수에 접근/사용 할수있는 범위이다.
개인적으로 변수의 생명주기라는 생각이 들었다.

변수의 라이프 타임

변수에는 크게 지역변수(local 변수),클래스 변수(class 변수),인스턴스 변수 가있다
이들은 각각 다른 라이프타임 (메모리에 변수가 살아있는 시간)을 가진다

1.인스턴스 변수

정의
클래스 내부와 모든 메소드 및 블록 외부에서 선언된 변수 전역 변수 라고도한다

scope
클래스 메서드를 제외한 클래스 전체 클래스 메서드 (static이 붙은 메서드)에서는
객체를 생성해서 써야한다
우리가 public main 메소드에서 인스턴스를 생성해서 썼던이유

라이프타임
객체가 메모리에 남아있을 때까지.

2.클래스 변수

정의
클래스 내부, 모든 블록 외부에서 선언되고 static이 붙은 변수이다 전역 변수 라고도한다
단 전역변수에는 인스턴스변수도 포함된다.

scope
클래스 전체

라이프타임
프로그램이 종료될때까지

3. 차이점

여기서 인스턴스 변수와 가장 큰 차이는 인스턴스 변수들은 각각 고유의 값을 가진다 (독립적인 저장공간)하지만 클래스 변수는 하나의 값을 공유한다 (인스턴스들이 하나의값을 공유한다)
클래스가 로딩될 때 생성된다( 메모리에 딱 한번만 올라간다)
좋은 개발자는 static 변수들을 남발하지 않고 공유 하는 정보가 무엇인지
체크해 신중하게 쓴다 본인도 static 변수를 남발하다 애먹은 적이있다
예시

    static int staticVariables =10;   //클래스 변수 전연벽수
    public void scopeTest(int value) {
        int localVariables = 10;  //지역 변수
        System.out.println(instanceVariables);
        System.out.println(localVariables);
        System.out.println(value);
    }

    public void scopeTest2(int value2) {
        System.out.println(instanceVariables);
        //   System.out.println(localVariables); 컴파일에러
        //  System.out.println(value);
        System.out.println(value2);
    }


    public static void main(String[] args) {
        //객체를 생성하지  않아도 Static은 사용 할 수있다
        //   System.out.println(instanceVariables);컴파일에러
        //  System.out.println(localVariables);
        //   System.out.println(value);
        System.out.println(staticVariables);
    }

객체의 동적할당

Java 메모리 할당

데이터 영역

  • 전역변수, 정적 변수가 저장되는 영역 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸.

스택 영역

  • 함수의 호출과 관계 되는 지역변수 매개변수가 저장되는 영역

힙 영역

  • 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.

느낀점

동적영역,정적영역 개념이 많이 이해가 안가는거 같다 나중에 다시 한번 정리해봐야겠다
스코프와 여러 변수들의 특징을 복습, 이해 할 수 있어 좋은 시간이였다.

profile
안녕하세요

0개의 댓글