우리가 변수를 생성할때 int, String, Bicycle 등등 앞에 붙이는 단어들은 어떤 의미가 있을까? 이 단어들은 해당 변수의 자료형(타입)을 나타낸다. 자바의 자료형(타입)은 크게보면 2가지가 있다.
1. 기본 자료형
2. 참조 자료형
기본자료형과 참조 자료형의 차이는 변수를 초기화 할 때 나타난다. 변수를 초기화 할때, 기본자료형은 new 키워드없이 바로 초기화가 가능하지만, 참조 자료형은 new 키워드와 생성자를 사용한다. 단, String클래스의 경우에는 참조 자료형임에도 new 키워드 없이 초기화 할 수 있다.
// 기본자료형의 변수 초기화
int variable = 10;
// 참조자료형의 변수 초기화
Bicycle bicycle = new Bicycle();
// 예외 String
String str1 = "hello world!";
String str2 = new String("hello world!");
먼저, 자바에는 8가지 기본 자료형이 있다.
- boolean
- 기본값 : false
- 참(true) 또는 거짓(false)
- 덧셈, 뺄셈등의 기본 연산도 사용할 수 없음.
- char
- 기본값 : 공백('\u0000')
- 0('\u0000') 에서 216-1(65,535, '\uffff') 까지의 범위를 갖는다.
- 정수 자료형 중에서 유일하게 부호가 없는(unsigned) 자료형
- char 값은 'a', '\u'와 16진수 값, 44032(아스키코드 0~65,535)의 방법으로 생성한다.
- byte
- 기본값 : 0
- -27(-128) 에서 27-1(127) 까지의 범위를 갖는다.
- 1byte는 8bit, 1bit는 0 또는 1의 값을 가질 수 있는 하나의 공간임.
- 원래 최대값은 255임 (2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0 = 255)
- 맨 앞자리를 부호로 결정(0은 양수, 1은 음수)했기 때문에 최대값은 127임.
- 0과 -0은 사실 같은 값이지만, 하나라도 더 많은 값을 표현하기 위해 맨 앞자리만 1인 것은 해당 타입의 최소값으로 규정함. 그래서 -127보다 작은 -128이 최소값임.
- 최대값 01111111 에서 1을 더하면 10000000 최소값이 되고, 10000000 최소값에서 1을 빼면 01111111 최대값이 된다.
- short
- 기본값 : 0
- -215 (-32,768) 에서 215-1 (32,767) 까지의 범위를 갖는다.
- int
- 기본값 : 0
- -231 (-2,147,483,648)에서 231-1(2,147,483,647) 까지의 범위를 갖는다.
- long
- 기본값 : 0
- -263 (-9,223,372,036,854,775,808)에서 263-1 (9,223,372,036,854,775,807)까지의 범위를 갖는다.
- 일반적으로 long타입의 숫자를 명시적으로 초기화 할때는 숫자 맨 뒤에 'L'을 붙여야 한다.
- float
- 기본값 : 0.0
- 소수점 값을 처리하기 위해 사용함.
- 32비트로 표현
- 32비트 범위를 넘어서는 값에 대해서 정확성을 보장하지 못한다.
- single-precision 32-bit IEEE 754 floating point(32비트 단정밀도)
- 부호 1자리 + 지수 8자리 + 가수 23자리 = 32비트
- double
- 기본값 : 0.0
- 소수점 값을 처리하기 위해 사용함.
- 64비트로 표현
- 64비트 범위를 넘어서는 값에 대해서 정확정을 보장하지 못한다.
- double-precision 64-bit IEEE 754 floating point(64비트 배정밀도)
- 부호 1자리 + 지수 11자리 + 가수 52자리 = 64비트
기본 자료형 이외의 String 또는 이전에 만든 Bicycle 등의 클래스는 모두 참조 자료형이다.
※ 기본 자료형의 형변환
- 형 변환은 서로 다른 타입간에 자료형을 변환하는 작업이다.
- boolean 타입을 제외하고 모든 기본 자료형은 형 변환이 가능하다.
- 기본자료형 ↔ 참조자료형 형 변환은 안된다.
- 숫자값을 참조 자료형으로 변경할 수 있는 방법이 전혀 없는 것은 아니다.(Integer, Long)
- byte(1바이트, 8비트) → short(2바이트, 16비트) 아무문제 없음
- short(2바이트, 16비트) → byte(1바이트, 8비트) 1바이트를 버리게됨. -> 예상한 것과 다른 결과를 볼 수 있음. 주의요망.
'Java' 카테고리의 다른 글
[자바의 신] 변수 하나에 여러 개의 데이터를 담을 수 없을까? (0) | 2020.09.15 |
---|---|
[자바의 신] 연산자? (0) | 2020.09.14 |
[자바의 신] 변수에도 이름이 있다? (0) | 2020.09.10 |
[자바의 신] 클래스와 객체는 같은건가? (0) | 2020.09.09 |
[자바의 신] 객체? 클래스? 메소드? (0) | 2020.09.03 |