목표

- 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

 

학습할 것

 

참고 자료

  • 프로그래머스 자바 입문 강의 => 링크
  • [java]클래스 변수, 인스턴스 변수 차이 => 링크

 

 

# 변수의 스코프란?

 

스코프는 영역이라는 뜻을 가지고 있습니다.

프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가진다. 그 범위를 변수의 스코프라고 한다.

변수의 유효 범위(scope)라고도 불리며, 해당 변수가 접근할 수 있는 변수, 객체 그리고 함수의 집합을 의미합니다.

 

 

 

public class ValableScopeExam {
    static int staticVal = 7;	// 스태틱 변수
    int globalScope = 10;	// 전역변수, 인스턴스 변수
    
    public void scopeTest(int value) {
    	int localScope = 10;	// 지역변수
        System.outprintln(localScope);	// 오류 X
    }
    
    public static void main(String[] args) {
    	System.outprintln(globalScope);	// 오류발생
    	System.outprintln(localScope);	// 오류발생
    	System.outprintln(staticVal);	// 사용가능
    }
}

 

지역 변수(Local variable)

  • 특정 스코프({}) 내에서 생성되어 그 스코프 안에서만 사용 가능하다.
  • ex) 함수 속에 선언되어 해당 함수 속에서만 사용이 가능한 변수

 

 

전역 변수(Global variable)

  • 클래스의 속성으로 선언된 변수 globalScope의 사용 범위는 클래스 전체이다.
  • 메인 메소드가 같은 클래스 안에 있어도 globalScope 변수를 사용할 수 없다.
  • 인스턴스 변수(Instance variable)와 클래스 변수(class variable)가 있다.
    => 클래스변수는 클래스가 메모리에 올라갈때,
         인스턴스 변수는 인스턴스가 생성되었을 때 생성된다.
  • 객체 생성 시마다 매번 새로운 변수가 생성된다.

* main은 static한 메소드이다. static한 메서드에서는 static 하지 않은 필드를 사용 할 수 없다.

 

 

클래스 변수(static 멤버)

  • 클래스 내에 static 키워드로 선언된 변수
  • 처음 JVM이 실행되어 클래스가 메모리에 올라갈 때 ~ 프로그램이 종료될 때까지 유지
  • 동일한 클래스의 모든 객체들에 의해서 공유된다.
  • main 메소드는 static 이라는 키워드로 메소드가 정의되어 있다. 이런 메서드를 static 한 메소드 라고 한다.
  • static한 필드(필드 앞에 static 키워드를 붙힘)나, static한 메소드는 Class가 인스턴스화 되지 않아도 사용할 수 있다.
  • static한 변수는 공유된다.
    => static하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성된다.
         그러므로, 인스턴스가 여러개 생성되도 static한 변수는 하나다.

 

 

ValableScopeExam v1 = new ValableScopeExam();
ValableScopeExam v2 = new ValableScopeExam();

v1.globalScope = 20;
v2.globalScope = 30;

System.outprintln(v1.globalScope);	// 20 이 출력된다.
System.outprintln(v1.globalScope);	// 30 이 출력된다.

v1.staticVal = 10;
v2.staticVal = 20;

System.outprintln(v1.staticVal);	// 20 이 출력된다.
System.outprintln(v2.staticVal);	// 20 이 출력된다.
  • globalScope 같은 변수(필드)는 인스턴스가 생성될 때 생성되기 때문에 인스턴스 변수라고 한다.
  • staticVal 같은 static한 필드를 클래스 변수라고 한다.

 

 

반응형

+ Recent posts