GOJ : CH 4.2 ~ 4.5

청주는사과아님·2024년 3월 11일
post-thumbnail

Chapter 04 : 정보를 어디에 넣고 싶은데


2. 예제를 통해서 지역 변수를 확실히 익히자

Java 에서 지역변수는 (C/C++ 과 다르게) 다음과 같은 문법을 허용하지 않는다.

void some_method()
{
    int local = 10;
    {
        int local = 5;  // compile error : 
        // variable `local` is already defined in method
    }
}

5. 기본 자료형은 8 개에요

Java 의 자료형은 크게 2 가지로 나뉜다. 기본형 (primitive type)참조형 (reference type) 이다.

기본형 데이터 타입은 모두 자바의 예약어로 등록되어 있으며, 그 값을 다른 기본형 타입의 값과 공유하지 않는다. [2]

Java기본형 은 다음 8 개 타입을 뜻한다.

  • Numeric Types

    • byte : 1 byte
    • short : 2 byte
    • int : 4 byte
    • long : 8 byte
    • char : 2 byte
  • Floating Point Type

    • float : 4 byte
    • double : 8 byte
  • boolean : 1 byte

Java 에는 unsigned 키워드가 존재하지 않는다. 때문에 short, int, long 등의 타입은 모두 signed value 이다.
반면 특이하게 char 의 경우, unsigned value 이며 2 byte 를 차지한다. [3]

이에 대한 별다른 이유는 없고, 그냥 Java 가 설계될 당시 "2 byte 면 충분할 것 같아서" 라고 한다. [6]

Java참조형class, interface, array 타입과 null 을 뜻한다. [4]

각 자료형이 정의없이 어느 필드에 선언되었을 때, 초기화되는 default value 는 다음 표와 같다. [5]

TypeDefault value
byte0
short0
int0
long0L
char0
float0.0f
double0.0d
boolean0, \u0000
Referencenull

모두 직관적으로 "0" 으로 초기화 된다. (compiler 가 해준다)

+ 필드 변수 (인스턴스 변수, 클래스 변수 등) 과 달리, 지역변수는 절대로 compiler 가 자동으로 초기화 해주지 않는다. 애초에 지역변수는 초기화 되지 않으면 (garbage value 는 고사하고) 컴파일 에러를 뱉어낸다. [6]

또한 다음과 같은 코드는 컴파일 에러를 일으킨다. 유의하자.

public void some_method()
{
    // Long.MAX_VALUE :9_223_372_036_854_775_807

    // compile error : The literal of type int is out of range 
    long value          = 9_223_372_036_854_775_807;
    
    long proper_value   = 9_223_372_036_854_775_807L;
}

덧붙여 C 에서는 "아주 큰 수" 를 계산하기 위해 GMP (The GNU Multiple Precision Arthimetic Library) 같은 라이브러리를 이용한다.

Java 에도 이런게 존재한다. BigDecimal [7]GMP 와 동일하게 임의 정밀도 (arbitrary precision) [8] 를 이용한다. 때문에 메모리가 남아도는 한, int 와 같은 numeric value 에 대한 연산은 무한정 "늘릴" 수 있다.


Reference


profile
나 같은게... 취준?!

0개의 댓글