반응형
목표
- 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
참고 자료
# 변수의 스코프란?
스코프는 영역이라는 뜻을 가지고 있습니다.
프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가진다. 그 범위를 변수의 스코프라고 한다.
변수의 유효 범위(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한 필드를 클래스 변수라고 한다.
반응형