JAVA

[JAVA] 리터럴변수&변수의스코프와 라이프타임

EJUN 2023. 3. 21. 22:43

리터럴이란?

보통 리터럴과 상수의 차이에 대해 궁금해하는 사람이 있을 수도 있다.

 

상수란? 

변하지 않는 변수를 의미 ex)클래스와 구조체

기본형에서 파생된 객체나 유도형 같은 데이터를 넣을 수 있음

final int num;

리터럴이란?

데이터 그 자체를 의미한다.

int a=10; //a는 상수가 되고, 10이 리터럴

위 코드 처럼 10이라는 값이 바로 리터럴이다. 하지만 여기서 final키워드를 사용하면 상수가 된다.

※인스턴스는 리터럴이 될 수 없다. 

그 이유는 인스턴스(객체)는 동적으로 사용하기 위한 용도로 작성

불변 클래스

데이터가 변하지 않도록 설계를 해놓은 클래스

String str="seok"; //"seok"이라는 문자열이 객체 리터럴이다.
리터럴 선언 방법

리터럴을 선언하는 방법은 변수를 선언함과 동시에 그 값을 지정해주는 표기법이다.

int n=6;
변수의 스코프와 라이프타임
변수의 스코프

변수가 접근할 수 있는 유효 범위

라이프 타임

변수가 유효한 시간(프로그램이 구동되는 동안 변수가 값을 담고 있을 수 있는 주기)

 

변수의 종류에는 크게 클래스변수, 인스턴스 변수, 로컬변수가 있다.
변수의 종류 선언위치 Scope Life Cycle
클래스 변수 클래스 영역 클래스 전체 클래스가 메모리에 올라간 후
프로그램이 종료할 때
인스턴스 변수 클래스 영역 static블록과 메소드를 제외한 클래스 전체 인스턴스가 생성 후, 메모리에 살아있을 때 까지
로컬 변수 메소드, 생성자 블럭 내부 변수가 선언된 블럭 내부 변수가 선언된 블럭을 벗어나기 전까지
class Main
{
	int x,y; //인스턴스 변수
   	static int z; //클래스 변수
    
	void run()
	{
		int a,b; //a,b는 로컬변수     
        }
}
로컬 변수

a,b는 run()이라는 메소드 안에 선언된 로컬변수이다. 

따라서 a,b라는 변수가 run()메소드를 벗어나면 메모리상에서 지워진다.

 

인스턴스 변수

x,y는 클래스 내부에 선언된 인스턴스 변수이다.

따라서 x,y는 클래스가 종료되기 전, 즉 메모리에 생존해 있을때까지 살아있다.

 클래스 변수

클래스변수는 인스턴스변수에 static키워드만 붙이면 된다.

이럼으로써 인스턴스 변수는 각각 고유한 값을 가지지만 클래스변수는 모든 인스턴스가 동일한 값을 공유하게 된다.

따라서 클래스가 메모리에 올라간 후 프로그램이 종료되기 전 까지 생존해있다.

 

'JAVA' 카테고리의 다른 글

[JAVA] 산술연산자 & 비트연산자  (0) 2023.03.22
[JAVA] 타입변환&타입추론 var  (0) 2023.03.22
[JAVA] Primitive Type vs Reference Type  (0) 2023.03.21
Java의 역사  (0) 2023.03.12
Spring framework 핵심기술 - IoC 컨테이너  (0) 2023.01.05