프로그래밍 언어에는 크게 두가지 타입이 있습니다.
1. 정적인 언어 : 컴파일 때 이미 변수에 대한 데이터 타입이 확정되어 다른 데이터 타입을 할당할 수 없는 언어입니다.
예를들어 C, C++, JAVA와 같은 언어가 여기에 속합니다.
2. 동적인 언어 : 여기 언어들은 변수에 다른 데이터 타입을 할당할 수 있습니다. Ruby, Python 등의 언어가 있죠.
자바는 정적인 언어이기 때문에 변수를 사용하려면 데이터 타입을 꼭 지정해줘야 합니다. 자바에서 사용되는 타입은 다음과 같습니다.
자바의 데이터 타입은 크게 두 가지 Primitive 와 Non-Primitive 타입으로 나눌 수 있습니다.
- Primitive Data Type : boolean, char, int, short, byte, long, float, double
- Non-Primitive Type : String, Array 등
Primitive Data Type
Primitive 데이터는 오직 한 값만 가지며 다른 특수한 기능이 없습니다. 그 값 자체라고 생각하면 됩니다.
boolean, byte, short, int, long, float, double 이렇게 8가지 데이터 타입이 있으며 하나씩 살펴보겠습니다.
먼저 각 자료형마다 표현할 수 있는 범위가 정해져 있습니다. boolean은 1bit, byte는 8bit 처럼 말이죠.
여기서 1bit는 0 또는 1로 표현되는 한자리 값입니다. 즉, 2^1 = 2 가지 값을 표현할 수 있습니다.
마찬가지로 1byte(= 8bit)는 2진수로 00000000 ~ 11111111 사이의 값을 가지며 2^8 = 256 가지 값을 표현합니다.
데이터의 표현 범위는 여기까지 하고 한 자료형씩 보겠습니다.
1. boolean : 1bit의 값으로 참/거짓(true/false)만을 나타내는 자료형입니다.
True는 1, False는 0의 값으로 표현합니다. 두 가지 값만 필요하니 1bit로 모든 값을 표현할 수있습니다.
class Test {
public static void main(String args[])
{
boolean b = true;
if (b == true)
System.out.println("Hi boolean"); // Hi boolean 출력
}
}
2. byte : 8 bit(1 byte)의 값으로 -128 ~ 127 범위의 값을 표현할 수 있습니다.
정수 자료형 중 가장 작은 범위를 지니고 있습니다. 8bit 이므로 2^8=256 개의 값인 -128~127을 표현합니다. 범위안에 0이 있어 128까지가 아님에 유의합니다.
class Test {
public static void main(String args[])
{
byte a = 126;
System.out.println(a); // 126 출력
a++;
System.out.println(a); // 127 출력
// 표현 가능한 범위(-128 ~ 127)를 넘었으므로 -128로 돌아갑니다.
a++;
System.out.println(a); // -128 출력
// -128에서 1이 증가합니다.
a++;
System.out.println(a); // -127 출력
}
}
3. short : 16 bit(2 byte)의 값으로 -32,768 ~ 32,767 범위의 값을 표현합니다.
2^16= 65,536개의 값을 표현하며, byte와 마찬가지로 중간에 0을 포함하여 양수의 갯수가 하나 더 적습니다.
4. int : 32 bit(4 byte)의 값으로 -2,147,483,648 to 2,147,483,647 범위의 값을 표현합니다.
정수형 중 가장 많이 사용되는 자료형입니다. 범위를 봤을 때 대부분의 변수사용이 이 범위로 커버가 가능하므로 가장 많이 사용됩니다. 만일 사용하는 변수가 21억 이상의 값이 할당될 가능성이 있다면 더 큰 자료형인 long을 사용해야 합니다.
5. long : 64 bit(8 byte)의 값으로 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 범위의 값을 표현합니다.
2^64개의 변수를 표현합니다. 값이 엄청나게 커진걸 볼 수 있습니다. 변수를 선언하게 되면 그 공간만큼 메모리가 할당되므로 사용하는 변수에 맞는 자료형을 선택해야 합니다.
물론 요즘 사용하는 하드웨어들이 메모리가 빵빵하기 때문에 자료형 몇개로 부족해지지는 않겠지만 습관을 들이는게 좋습니다.
6. float : 32 bit(4 byte)의 값으로 실수를 표현합니다.
위 5개 자료형과는 다르게 실수형 데이터 타입입니다. 실수형이란 소수점을 가진 값으로 이 소수점을 표현하기 위해 가진 bit중 일부를 사용합니다. 소수임을 알리기 위해 값에 f를 붙혀 할당합니다.
public class Main {
public static void main(String[] args) {
float number = 0.9f;
System.out.println(number); // 0.9 출력
}
}
7. double : 64 bit(8 byte)의 값으로 실수를 표현합니다.
float와 마찬가지로 소수점을 표현하기 위해 bit 일부를 사용하지만 f를 붙혀주지 않아도 됩니다.
public class Main {
public static void main(String[] args) {
double number = 0.09;
System.out.println(number); // 0.09 출력
}
}
8. char : 16 bit(2 byte)의 유니코드 문자를 표현합니다.
표현범위로는 '\u0000' (0) to '\uffff' (65535) 입니다. '\u' 는 유니코드라는 의미이고 16진수로 '0000'(0) ~ 'ffff'(65535) 까지 값이 할당된다는 의미입니다.
자바에서는 문자를 표현할 때 2바이트를 사용하고 있지만 C, C++은 1바이트를 사용합니다. C, C++은 아스키(ASCII)로 문자를 표현하여 일부 문자가 표현이 불가능 합니다. 하지만 자바는 문자(Character)에 Unicode를 사용하므로 대부분 나라의 언어를 포함하여 표현이 가능합니다.
아래 테스트를 보면 char형으로 문자 한개를 표현할 수 있고, int 자료형이 4byte로 더 크므로 할당이 가능한 걸 볼 수 있습니다.
public class Test {
public static void main(String[] args) {
char a = 'a';
char b = 'b';
System.out.println(a); // a
System.out.println(b); // b
int intFromChar1 = a;
int intFromChar2 = b;
System.out.println(intFromChar1); // 97
System.out.println(intFromChar2); // 98
char x = 'ㄱ';
char y = 'ㄲ';
System.out.println(x); // ㄱ
System.out.println(y); // ㄲ
int intFromChar3 = x;
int intFromChar4 = y;
System.out.println(intFromChar3); // 12593
System.out.println(intFromChar4); // 12594
}
}
'개발 > JAVA' 카테고리의 다른 글
Java string 비교(==와 equals 메서드 그리고 String.intern()) (0) | 2020.12.10 |
---|---|
NullpointerException 과 해결법 (0) | 2020.12.09 |
lambda(람다) 지역변수 사용시 Final or Effectively Final 제약 (0) | 2020.12.07 |
equals, hashcode (0) | 2020.12.07 |
JVM, JRE, JDK 간단 개념 (0) | 2020.12.07 |