본문 바로가기
Work/책 정리

[이것이 자바다] Chap02. 변수와 타입

by ★용호★ 2017. 1. 31.

2.1 변수

2.1.1 변수란?

  • 프로그램은 작업을 처리하는 과정에서 필요에 따라 데이터를 메모리에 저장한다.
    • 이 때 변수를 사용
    • 변수 : 값을 저장할 수 있는 메모리의 공간
  • 변수에는 한 가지 타입의 값만 지정할 수 있다.

2.1.2 변수의 선언

  • 변수를 사용하기 위해서는 먼저 변수를 선언해야 한다.
    • 타입과 이름 결정
    • 타입은 변수에 저장되는 값의 종류와 범위를 결정 짓는 요소.
  • 변수 이름은 메모리 주소에 붙여진 이름이다.
    • 프로그램은 변수 이름을 통해서 메모리 주소에 접근하여 값을 저장하거나 읽는다.
    • 변수 이름은 자바 언어에서 정한 명명 규칙을 따른다.

2.1.3 변수의 사용

변수값 저장

  • 변수에 값을 저장할 때 대입 연산자(=)를 사용.
  • 변수를 선언하고 처음에 값을 저장할 경우 이러한 값을 초기값이라고 한다.
    • 변수에 초기값을 주는 행위를 변수의 초기화라고 한다.
  • 변수의 초기값은 코드에서 직접 입력하는 경우가 많은데 소스 코드 내에서 직접 입력된 값을 리터럴(literal)이라고 부른다.
    • 정수/실수/문자/논리 리터럴로 구분.
    • 리터럴들은 정해진 표기법대로 작성되어야 한다.
    • 리터럴은 상수(constant)와 같은 의미지만, 프로그램에서는 상수를 값을 한번 저장하면 변경할 수 없는 변수로 정의하기 때문에 이와 구분하기 위해 리터럴이라는 용어를 사용한다.

변수값 읽기

  • 변수는 초기화가 되어야 읽을 수 있고, 초기화되지 않은 변수는 읽을 수가 없다.

2.1.4 변수의 사용 범위

  • 변수는 중괄호 {} 블록 내에서 선언되고 사용된다.

    • 클래스, 생성자, 메소드
  • 이 장에서는 모든 변수가 메소드 블록 내에 존재한다고 생각하고 진행.

    • 이후 클래스와 생성자를 설명하는 장에서 다시 언급 예정.
  • 메소드 내에 선언된 변수를 로컬 변수(local variable)라고 부른다.

    • 로컬 변수는 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.
  • 변수는 메소드 블록 내 어디서든 선언할 수 있지만, 변수 사용은 제한이 따른다.

    변수는 선언된 블록 내에서만 사용이 가능하다.
    
    • 메소드 블록 내에서도 여러가지 중괄호 {} 블록들이 존재할 수 있다.
      • if, for, while 등.

2.2 데이터 타입

  • 모든 변수에는 타입이 있으며 타입에 따라 저장할 수 있는 값의 종류와 범위가 달라진다.
  • 변수를 선언할 때 주어진 타입은 변수를 사용하는 도중에 변경할 수 없다.

  • 코드에서 정상적으로 변수에 올바른 값을 저장하더라도 프로그램이 실행하는 도중에 변수의 값은 변경된다.

    • 실행 중에 저장할 수 있는 값의 범위를 초과하면 최소값부터 다시 반복 저장된다.
      • byte일 경우 -128(최소값)부터 시작해서 127(최대값)을 넘으면 다시 -128부터 시작하게된다.
      • 다른 정수 타입들도 같은 방식으로 처리된다.
      • 그러므로 값을 초과하면 엉터리 값이 변수에 저장된다. (쓰레기 값)
  • 자바는 모든 문자를 유니코드로 처리한다.
    • 유니코드는 세계 각국의 문자들을 코드값으로 매핑한 국제 표준 규약.
    • 자바에서는 하나의 유니코드를 저장하기 위해 2byte 크기인 char 타입을 제공한다.
    • 유니코드에는 음수가 없기 때문에 char 타입의 변수에는 음수 값을 저장할 수 없다.
    • 유니코드 표현 범위는 0 ~ 65535, char의 범위도 0 ~ 65535 (2^16)
  • 숫자 표현
    • short : 2Byte로 표현.
      • C 언어와의 호환을 위해 사용되며 비교적 자바에서는 잘 사용되지 않는 타입.
    • int : 4Byte로 표현.
      • 자바에서 정수 연산을 하기 위한 기본 타입.
      • byte타입 또는 short 타입의 변수로 연산을 수행하더라도 int로 변환된 후 연산을 수행하고 결과 또한 int로 반환된다.
        • 그러므로 byte나 short를 사용한다고 해서 성능의 차이가 나지는 않는다.
    • long : 8Byte로 표현.
      • long타입의 변수를 초기화 할 때에는 정수값 뒤에 'L'을 붙인다.
        • 8Byte 정수임을 컴파일러에게 알리기위함.


댓글