Java 변수와 자료형

안병욱·2022년 2월 23일
1

프로그래밍에서 가장 기본적인 동작은 데이터를 저장하고, 저장한 데이터의 값을 읽어 온다. 데이터를 저장하려면 메모리에 값을 저장할 공간을 생성하고, 이름을 부여해야 한다. 이때 메모리 공간에 부여하는 이름을 '변수'라고 한다. 데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징이 다른데, 이를 자료형(data Type)이라고 한다. 즉, 메모리 공간의 자료형에 따라 지정할 수 있는 값의 종류와 특징이 결정된다.


자료형 선언하기

C,Java 같은 컴파일 언어는 변수를 사용하기전에 반드시 자료형을 선언해야 한다. 변수의 자료형을 선언할 때에는 변수 이름 앞에 자료형을 표기해야 한다. 변수에 자료형이 선언 되면 메모리에는 변수값을 저장할 수있는 공간이 만들어진다.

int a; //a는 int형 변수
String b; //b는 String형 변수
  1. 자료형은 반드시 사용하기 전에 선언
  2. 자료형이 선언되지 않은 변수는 사용할 수 없다.
    • 이전에 선언한 변수에 대해서는 사용이 가능하다.
  3. 자료형은 반드시 한 번만 선언해야한다.

이름을 지을 때 지켜야 하는 필수사항

  • 영문 대소 문자와 한글을 사용할 수 있다.
    abc(O),ABC(O),aBc(O),가나다(O)
  • 특수 문자는 밑줄(_)과 달러($)표기만 사용이 가능하다.
    $abc(O),_abc(O),ab_c(O),$abc_(O)
  • 아라비아 숫자를 사용할 수 있다. 단, 첫 번째 글자로는 사용할 수 없다.
    a3bc(O),ab3c(O),abc3(O),3abc(X)
  • 자바에서 사용하는 예약어는 사용할 수 없다.
    int(X),break(X),public(X),static(X) 등등

이름을 지을 때 지키면 좋은 권장 사항

권장 사항의 핵심은 변수,상수 그리고 메서드를 그 이름이나 구조만으로도 구분할 수 있게 하는 것이다. 즉 의미를 요하는 단어이면 된다.

변수의 생존 기간

변수의 생존 기간은 메모리에 변수가 만들어진 이후 사라지기까지의 기간을 의미한다. 자바에서는 개발자가 직접 변수를 생성한다. 하지만 메모리에서 변수를 삭제하는 작업은 자바 가상 머신이 알아서 한다. 변수를 삭제하는 주체가 개발자가 아니다 보니 메모리에서 변수가 사라지는 시점을 이해하는 것은 매우 중요하다. 만일 사라진 변수값을 읽거나 값을 대입하려고하면 문법 오류가 발생한다. 예를 설명하면 전역변수와 지역변수가 있다.

class Ex_variables{

int global_int;           
// 전역변수(객체변수) : 같은클래스에서 호출이 가능

static int global_statuc_int; 
// 전역변수(클래스변수) : 다른 클래스에서도 호출이 가능
void method()
{
int local_int = 0;  
//지역변수 { }안에 생성되며 { }를 벗어나면

}                
//method() 라는 메소드가 끝나는 시점에 바로 삭제
}
class Ex_variables2 {

    int global_v;

   void addmethod(int a, int b)
   {
        global_v  =  a  + b;
   } 

} 

자료형의 종류


자료형을 이렇게 구분해야 하는 이유는 기본 자료형과 참조 자료형의 값 저장 방식이 서로 다르기 때문이다. 자료형의 구분을 이해하려면 메모리의 구조를 알아야하는데, 메모리는 목적에 따라 크게 3가지 영역으로 나뉜다.
첫 번째 영역은 클래스(Class) 영역, 정적(static)영역, 상수(final) 영역, 메서드(method) 영역이라는 4개의 이름으로 불린다. 클래스를 배우면 첫 번째 영역이 왜 이렇게 다양한 이름이 붙었는지 자연스럽게 이해가 될 것이다. 두번째 영역은 스택(stack)영역으로, 변수들이 저장되는 공간이다. 마지막 영역은 힙(heap)영역으로, 객체들이 저장되는 공간이다.

매서드 영역

프로그램 실행에 대한 코드, 스태틱static 변수 및 메서드, 런타임 상수 풀runtime constant pool이 메서드 영역method area에 생성됩니다. 이 영역에 저장된 내용은 프로그램 시작 전에 로드되고 프로그램 종료 시 소멸됩니다. 런타임 상수 풀에는 컴파일 타임에 알려진 숫자 리터럴03부터 런타임에 확인되어야 하는 메서드 및 필드 참조에 이르기까지 여러 종류의 상수가 포함됩니다.

스택 영역

메서드가 호출되면 지역 변수, 매개변수가 프레임 형태로 생성되어 스택 영역stack area으로 쌓였다가 사라집니다. 이때 프레임 형태는 불투명한 빈 박스box 형태로 이해하면 됩니다. 하나의 박스 안에서는 다른 박스 안의 내용을 알 수 없습니다. 그러므로 프레임 영역을 벗어난 다른 메서드의 변수들은 서로 참조할 수 없습니다. 앞서 변수의 사용 가능 범위에서 배운 내용이 프레임 형태로 적용됩니다.

힙 영역

클래스의 객체(인스턴스), 배열이 new 연산자에 의해 힙 영역heap area에 동적으로 생성됩니다.
생성된 객체는 자동 저장소 관리 시스템인 가비지 컬렉터garbage collector에 의해 사용이 없음이 확인되면 자동으로 제거됩니다. C/C++와 달리 자바는 이렇게 자동으로 메모리를 관리합니다.

0개의 댓글