변수(Variable)란 값을 저장할 수 있는 메모리의 공간을 의미한다.

상수(Constant)란 값을 한 번 저장하면 변경할 수 없는 변수이다.

리터럴(Literal)이란 값의 종류(type)에 따라 구분되며, 변하지 않는 값을 의미한다.


상수와 리터럴은 유사한 의미라 여길 수 있지만 엄연한 차이점이 존재한다.



int y;    -> 변수 선언 (int는 자료형이며, y는 변수 이름이다.)

int y = 5;   -> 변수 초기화 (선언과 동시에 초기화도 가능하다.)



static final int Y = 5;  -> 상수 선언 (상수는 대문자로 해주어야 한다.)

여기서 static final 이 상수란 뜻이고 Y 가 변하지 않는 값(리터럴)이 들어있는 메모리 공간을 의미한다.

즉, 리터럴은 메모리 공간에 들어있는 값(5)이다.


    * 변수의 종류

    변수는 크게 두 가지 종류인 기본형 변수참조형 변수로 나누어진다. 기본형은 byte, short, int, long, float, double, char, boolean으로 8가지의 자료형을 말하며, 그 외 나머지 자료형을 참조형이라고 한다. 참조형도 크게 클래스, 인터페이스, 배열 세 가지로 나눌 수 있다.



    * 변수의 성질

    1. 선언과 동시에 초기화도 가능하다.
    2. 초기화되지 않은 변수는 읽을 수 없으므로 에러가 발생한다.
    3. 선언된 블록 내에서만 사용 가능하다.
    4. 메소드(함수) 블록에 선언된 변수를 로컬 변수(local variable)라고 부르는데, 그 블록(영역)을 벗어나면 메모리에서 자동으로 없어진다.


    우선, 변수 이름이란 메모리 주소에 붙여진 이름이다.

    변수의 이름 앞에 붙는 자료형(Type)은 변수에 저장되는 값의 범위와 종류를 결정하는 요소이다.

    프로그램은 변수 이름을 통해 메모리 공간을 구별하고 접근한다. 메모리 공간, 메모리 주소, 메모리 위치 모두 같은 말이다.




    * 자료형 (기본 타입)


     값의 종류

    기본 타입 

    메모리 사용 크기 

     저장되는 값의 범위 

     정수

     byte

    1 byte 

    8 bit 

    -128 ~ 127

    char

    2 byte 

    16 bit 

     0 ~ 65,535

     short

    2 byte 

    16 bit 

    -32,768 ~32,767 

     int

    4 byte 

    32 bit 

    -2,147,483,648 ~ 2,147,483,647 

     long

    8 byte 

    64 bit 

     실수

     float

    4 byte 

     32 bit 

    (+/-)1.4E-45 ~ (+/-)3.4028235E38 

    double 

    8 byte 

    64 bit 

    (+/-)4.9E-324 ~ (+/-)1.7976931348623157E308

     논리

     boolean

    1 byte 

    8 bit 

    true, false 




    - long 타입


    정수를 표현하는데 있어서 int의 저장범위를 벗어날 경우 long을 사용한다. 여기서 초기화할 때 반드시 소문자 'l'이나 대문자 'L'을 꼭 붙여야 한다. 그렇지 않으면 에러가 발생한다.



    - float 타입


    float과 double의 차이점은 가수를 표현하는 데 있어서 float에 비해 double이 약 두배의 자릿수가 배정되어 있으므로 더 정밀한 값을 저장할 수 있다. 


    자바는 실수 리터럴의 기본 타입을 double로 생각한다. 즉, 실수 리터럴을 float 타입 변수에 그냥 저장할 수 없다는 뜻이다. 따라서 저장하기 위해 실수 리터럴 뒤에 소문자 'f'나 대문자 'F'를 붙여야 한다. 그렇지 않으면 에러가 발생한다.



    - char 타입 


    자바는 모든 문자를 유니코드(Unicode)로 처리한다.

    유니코드란 전 세계의 문자들을 코드값으로 매핑한 국제 표준 규약이다. 유니코드의 범위는 0~65,535 이고 2 byte의 크기를 가진 정수값이다. 유니코드의 자세한 정보를 원한다면 (http://www.unicode.org)를 들어가보면 된다.

    또한, 유니코드는 음수가 없기 때문에 char 타입의 변수에는 음수 값을 저장할 수 없다.


    char 변수에 작은 따옴표(')로 감싼 문자가 아니라 직접 유니코드 정수값을 저장할 수도 있다.

    이 때의 정수값은 10진수로 저장해도되고 16진수로 저장해도 되는데 16진수의 형태는 '\u+16진수값'이다.


    char x = 'A';

    char x = 65;

    char x = '\u0041';




    * 클래스 타입 (String)


    자바에서 변수에 문자열을 저장하고 싶다면 String 타입을 이용할 수 있다. String은 클래스 타입이므로 String 변수는 참조 변수이다. 즉, 문자열을 String 변수에 대입하면 문자열이 메모리 공간에 직접 저장되는 것이 아니라 String 객체가 생성되고, String 변수는 객체의 번지를 참조하게 된다. 간단하게 설명하자면 문자열을 저장하고 싶을 때는 String을 사용하면 된다.



    자바의 실행 과정은 컴파일러에서 바이트 코드가 생성되고 자바 가상 기계를 통해 바이트 코드가 기계어로 변환된다.


    Q) 왜 컴파일러와 자바 가상 기계라는 두 단계를 거치는 걸까?


    A) 사용자가 모든 컴퓨터에서 응용 프로그램들을 다시 컴파일하지 않고 실행되게 하기 위해서이다.


    Q) 자바 가상 기계는 별도로 설치해야 되는가?


    A) 자바 가상 기계는 실제로 존재하는 컴퓨터가 아니라 가상 컴퓨터를 시뮬레이션하는 소프트웨어이다. 자바 가상 기계를 이용하면 하드웨어와 운영 체제를 프로그램으로부터 숨길 수 있다. 또한, 자바 가상 기계는 자바 컴파일러가 코드를 생성할 대상이 되는 추상화된 기계의 명세에 의하여 소프트웨어로 작성된다.


    대부분의 프로그래밍 언어의 경우, 컴파일러에 의해 소스 코드 -> 기계어로 변환되어야 컴퓨터에서 실행할 수 있다. 그러나 자바 컴파일러는 특정한 컴퓨터를 위한 코드를 바로 생성하는 것이 아니라 자바 가상 기계(Java virtual machine)를 위한 바이트 코드(byte code)를 생성한다.


    즉,

      

    위와 같은 형태를 띄게 된다. 아래는 자바 실행 과정이다.



    Hello.java (원본 파일)

    Compiler

       Hello.class (바이트 코드)  

    JVM 

      Hello(내용물)



    Q) 자바 플랫폼(Platform)의 구성요소는 자바 가상 기계만 있는가?


    A) 자바 플랫폼이란 프로그램이 실행되는 하드웨어(Hardware)나 소프트웨어(Software)의 환경을 뜻한다. 자바 플랫폼은 두 가지의 요소로 이루어져 있다.


    - 자바 가상 기계 (JVM : Java Virtual Machine)

    - 자바 응용 프로그래밍 인터페이스(API: Application Programming Interface)



    Q) API란 무엇을 의미하는가?


    A) 운영 체제(OS)나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 하여 응용 프로그램에서 사용할 수 있도록 만든 인터페이스이다. 파일 제어, 창 제어, 화상 처리, 문자 제어 등이 있다.



    + Recent posts