본문 바로가기

Java

자바의 변수와 타입

자바의 데이터 타입에는 크게 기본형, 참조형 두가지의 타입이 존재한다. 이 두가지 타입의 특징을 공부해보자

기본형 타입(Primitive type)

  타입 할당 메모리 기본값 범위
논리형 boolean 1byte false true, false
정수형 byte 1byte 0 - 2^7 ~ 2^7 - 1
short 2byte 0 -2^15 ~ 2^15 - 1
int 4byte 0 -2^31 ~ 2^31 - 1
long 8byte 0L -2^63 ~ 2^63 - 1
실수형 float 4byte 0.0F (3.4 X 10^38) ~ (3.4 X 10^38) 의 근사값
double 8byte 0.0 (1.7 X 10^308) ~ (1.7 X 10^308) 의 근사값
문자형 char 2byte  '\u0000'  0 ~ 2^16 - 1
  • 총 8가지의 기본형 타입(Primitive type)을 미리 정의하여 제공한다.
  • 기본값이 있기 때문에 Null이 존재하지 않는다.
  • 실제 값을 저장하는 공간으로 스택(Stack) 메모리에 저장된다.
  • 만약 컴파일 시점에 담을 수 있는 크기를 벗어나면 에러를 발생시키는 컴파일 에러가 발생한다.

 

참조형 타입(Reference type)

  • 기본형 타입을 제외한 타입들이 모두 참조형 타입(Reference type)이다.
  • 빈 객체를 의미하는 Null이 존재한다.
  • 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 힙(Heap) 메모리에 저장된다.
  • 문법상으로는 에러가 없지만 실행시켰을 때 에러가 나는 런타임 에러가 발생한다. 예를 들어 객체나 배열을 Null 값으로 받으면 NullPointException이 발생하므로 변수값을 넣어야 한다.

 

변수의 종류

변수의 사용 용도에 따라 자바에는 총 4개의 변수 종류가 있다.

  • 클래스 변수(static 변수)
    메소드의 밖과 클래스의 안에 선언된 변수중 static 예약어가 붙은 변수를 말한다.

  • 인스턴스 변수
    클래스 변수와 같게 메소드 밖과 클래스 안에 선언된 변수중 static 예약어가 붙지 않은 변수를 말한다.

  • 지역 변수
    중괄호 내에 선언된 변수를 말한다.

  • 매개 변수
    메소드나 생성자에 넘겨주는 변수를 말한다.

다음의 코드를 통해 각 변수가 무엇인지 확인할 수 있을 것이다.

public class Example {
	static int staticVariable = 1;
    int classVariable = 2;
    
    private void method(int parameterVariable) {
    	if (parameterVariable == 3) {
        	int localVariable = parameterVariable;          
        }
    }
}

 

변수의 생명주기

  • 클래스 변수(static 변수)
    자바프로그램의 실행부터 종료까지 유효하다.

  • 인스턴스 변수
    해당 클래스의 객체가 생성될 때 부터 해당 객체가 소멸될 때 까지 유효하다.

  • 지역 변수
    지역 변수를 선언한 중괄호 내에서만 유효하다

  • 매개 변수
    해당 메소드가 실행 부터 종료할 때 까지 유효하다.

static

여기서 static이란 예약어에 대해서 조금 더 짚고 넘어가보자

 

static이란 인스턴스를 생성하지 않아도 클래스의 매소드와 필드에 접근을 가능하게 하는 예약어 이다.

 

특징

  • static 메모리 영역에 저장되어 고정된 메모리 영역을 사용한다
  •  따라서 프로그램 종료시까지 메모리에 할당된 채로 존재한다.(가비지 컬렉터의 관리를 못받음)
  •  Static 메서드는 Interface를 구현하는데 사용될 수 없다
  • Static은 따로 객체를 생성하지 않고 메모리의 Static영역에 할당된 곳에서 여러 클래스들이 데이터를 불러온다.

위의 특징을 통해 알 수 있듯이 static으로 선언된 변수는 자바 프로그램이 시작부터 끝까지 존재하여 자칫하면 메모리의 낭비로 이어질 수 있게 되는데, 이를 사용할때 제대로 이해하고 사용하면 오히려 메모리를 효율적으로 사용할 수 있으므로 잘 이해하도록 하자

'Java' 카테고리의 다른 글

자바의 Collection  (0) 2023.01.20
if-else 문과 switch, enum  (0) 2023.01.19
JVM & GC  (2) 2022.11.29
객체지향 프로그래밍  (2) 2022.11.10