[참고] Oracle > Java Documentation > Primitive Data Types
[참고] 위키백과 - 원시 자료형
[참고] 위키백과 - Primitive wrapper class in Java
[참고] TCP School > JAVA > 9) 기본 자료
[참고] TCP School > JAVA > 10) 실수의 표현
운영체제(OS) : Windows10 64bit
개발환경 : JDK8
개발도구 : Eclipse IDE
기본 자료형(Primitive Data Type)이란
-
Data Type은 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 한다.
-
Java에서는 여러 형태의 타입을 미리 정의하여 제공하고 있는데, 이것을 기본 자료형(Primitive Data Type)이라고 한다.
-
Java의 기본 자료형은 8종류로 크게 정수형, 실수형, 문자형, 논리형으로 나눌 수 있다.
리터럴(Literal)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package variables;
public class PrimitiveDataType {
public static void main(String[] args) {
/*
* 1. 원시 유형은 클래스에서 생성된 개체가 아닌 언어로 기본 제공되는 특수 데이터 유형이다.
* 2. 리터럴(Literal)은 고정 값의 소스 코드 표현이며, 계산하지 않고도 코드에 직접 표시된다.
* 즉, 변수의 값이 변하지 않는 데이터(메모리 위치 안의 값)를 의미한다.
*/
boolean result = true; // 리터럴은 true
char capitalC = 'C'; // 리터럴은 'C'
int i = 100000; // 리터럴은 100000
}
}
|
cs |
기본 자료형(Primitive Data Type) 8가지
자료형 | 예약어 | 메모리 크기 | 기본값 | 표현 범위 |
논리형 | boolean | 1byte (1bit) |
false | true, false |
문자형 | char | 2byte (16bit=216) |
0(='\u0000') | 0~65535('\u0000' ~ '\uffff') (Unicode(UTF-16) : 영어/숫자=1byte, 그 외 다국어=2byte) |
정수형 | byte | 1byte (8bit=28) |
0 | -128 ~ 127(-27 ~ 27-1) |
short | 2byte (16bit=216) |
0 | -32,768 ~ 32,767(-215 ~ 215-1) | |
int | 4byte (32bit=232) |
0 | -2147483648 ~ 2147483647(-231 ~ 231-1) | |
long | 8byte (64bit=264) |
0L | -9223372036854775808 ~ 9223372036854775807(-263 ~ 263-1) | |
실수형 | float | 4byte (32bit=232) |
0.0f | ±1.4E-45 ~ ±3.4028235E38(±1.4 x 10-45 ~ ±3.4028235 x 1038) (ANSI/IEEE 754-1985 표준) |
double | 8byte (64bit=264) |
0.0d | ±4.9E-324 ~ ±1.7976931348623157E308 (±4.9 x 10-324 ~±1.7976931348623157 x 10308) (ANSI/IEEE 754-1985 표준) |
논리형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package variables;
public class PrimitiveDataType {
public static void main(String[] args) {
/*
* 1. 참/거짓 조건을 추적하는 간단한 플래그에 사용한다.
* 2. 메모리 크기는 1byte를 나타내지만 사용하는 CPU마다 다르기 때문에
* 정확한 bit의 크기는 알 수 없다.
*/
boolean bf = false, bt = true;
System.out.println(bf); // false
System.out.println(bt); // true
}
}
|
cs |
문자형과 문자형 및 문자열 리터럴(Character and String Literals)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package variables;
public class PrimitiveDataType {
public static void main(String[] args) {
/*
* 1. 문자 하나를 표현할 수 있는 타입.
* 2. Unicode를 사용하며 문자를 표현한다(ASCII코드로도 표현할 수 있다).
* 3. char 및 String 리터럴에 unicode escape와 escape sequence를 지원한다.
* 4. char 값은 따옴표('') 안에 한 글자만 작성이 가능하다.
*/
char minn = 0, maxn = 65535;
char minc = '\u0000', maxc = '\uffff';
System.out.println(minn + ", " + maxn + ", " + minc + ", " + maxc);
// 표현 범위로 작성된 것은 Console창에 쉼표(,)말곤 안 나온다.
char c1 = 'a', c2 = 'A', c3 = '1', c4 = 'ㅁ', c5 = '$';
System.out.println(c1 + ", " + c2 + ", " + c3 + ", " + c4 + ", " + c5);
// a, A, 1, ㅁ, $
}
}
|
cs |
-
char 및 String 유형의 리터럴에는 유니코드(UTF-16) 문자가 포함될 수 있다. 편집기와 파일 시스템에서 허용하는 경우 코드에서 직접 이러한 문자를 사용할 수 있다. 그렇지 않은 경우 '\u0108'(곡절 악센트 대문자 C) 또는 "S\u00ED Se\u00F1or"(Si Seøor 스페인어)와 같은 "Unicode escape"를 사용할 수 있다.
-
Java 프로그래밍 언어는 cher 및 String 리터럴에 대한 몇 가지 특수 이스케이프 시퀀스도 지원한다. 주로 JSON에 쓰인다.
-
\t : 수평 탭.
-
\n : 줄 바꿈.
-
\r : 줄 바꿈, 커서가 행의 앞으로 이동.
-
\' : 홑 따옴표.
-
\" : 큰따옴표.
-
\\ : backslash.
-
-
모든 참조 유형의 값으로 사용할 수 있는 특수 null 리터럴도 있다. null은 원시 유형의 변수를 제외한 모든 변수에 할당할 수 있다. null 값의 존재 여부를 테스트하는 것 외에는 수행할 수 있는 작업이 거의 없다. 따라서 null은 프로그램에서 일부 개체를 사용할 수 없음을 나타내는 표시로 사용되는 경우가 많다.
-
마지막으로, 클래스 리터럴이라고 불리는 특별한 종류의 리터럴도 있는데, 이것은 형식 이름을 따서 ".class"를 붙여서 형성된다. 예를 들어, String.class. 유형 자체를 나타내는 클래스 유형의 개체를 나타낸다.
정수형과 정수 리터럴(Integer Literal)
-
부호(+,-)가 있는 정수(2의 보수)를 가지며, 소수 부분이 없는 수를 의미한다.
-
표현 범위를 벗어나면 Overflow 또는 Underflow가 발생해 전혀 다른 값이 저장될 수 있다.(참고)
-
Overflow : 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상. Overflow가 발생하면 최상위 비트(MSB)를 벗어난 데이터가 인접 비트를 덮어쓰므로, 잘못된 결과를 얻을 수 있다.
-
Underflow : 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상.
-
-
byte, short는 메모리 절감이 중요한 대규모 Array에서 메모리를 저장하는데 유용할 수 있다.
-
long 값이 int의 최솟값 or 최댓값을 초과할 경우 long 값 뒤에 l(or L)을 붙여야 한다.
-
정수 리터럴은 다음과 같은 숫자 시스템으로 표현될 수 있다.
-
10진수(Decimal) : 숫자 0~9인 10개로 구성. 평소 사람이 읽기 위한 숫자 시스템.
-
16진수(Hexadecimal) : 숫자 0~9, 문자 A~F인 16개로 구성.
-
2진수(Binary) : 숫자 0과 1인 2개로 구성. 기계어이다(JavaSE7 이상에서 이진 리터럴을 만들 수 있음).
-
-
범용 프로그래밍의 경우 십진법만 사용할 수 있다. 그러나 다른 숫자 시스템을 사용해야 하는 경우 다음 예제로 볼 수 있다.
(접두사 0x는 16진수이고 0b는 2진수이다)-
int decVal = 26; // 숫자 26, 10진수(Decimal)
-
int hexVal = 0x1a; // 숫자 26, 16진수(Hexadecimal)
-
int binVal = 0b11010; // 숫자 26, 2진수(Binary)
-
실수형과 부동 소수점 리터럴(Floating-Point Literals)
-
ANSI/IEEE 754-1985 표준 부동 소수점 방식을 따르고 있다. 과거에는 실수를 표현할 때 float을 많이 사용했지만, 하드웨어의 발달로 인한 메모리 공간의 증가로 현재에는 double형을 가장 많이 사용한다.
-
ANSI/IEEE 754-1985 표준 부동 소수점(floating point) 방식(float) : 부호(1bit), 지수부(8bit), 가수부(23bit). 총 32bit.
-
ANSI/IEEE 754-1985표준 고정 소수점(fixed point) 방식(double) : 부호(1bit), 지수부(11bit), 가수부(52bit). 총 64bit.
-
정수로 표기된 float 값이 int의 최솟값 or 최댓값을 초과할 경우 float 값 뒤에 f(or F)를 붙여야 한다. 소수점으로 표기 시 무조건 f(or F)를 붙여야 한다.
-
정수로 표기된 double 값이 int의 최솟값 or 최댓값을 초과할 경우 double 값 뒤에 d(or D)를 붙여야 한다. 이 외엔 규칙에 의해 값 뒤에 d(or D)는 생략이 가능하다.
기본 자료형(Primitive Data Type)과 참조 자료형(Reference Data Type)의 차이
-
기본 자료형(Primitive Data Type)은 Java에서 사전 정의돼있다. 참조 자료형(Reference Data Type)은 프로그래머가 작성하며 Java에서 정의하지 않는다. (String 제외).
-
참조 자료형(Reference Data Type)은 특정 작업을 수행하기 위해 메서드를 호출하는 데 사용할 수 있지만 기본 자료형(Primitive Data Type)은 할 수 없습니다.
-
기본 자료형(Primitive Data Type)은 null값을 넣을 수 없지만 참조 자료형(Reference Data Type)은 넣을 수 있다.
-
기본 자료형(Primitive Data Type)은 첫 글자가 소문자로 시작하는 반면 참조 자료형(Reference Data Type)은 대문자로 시작한다.
-
기본 자료형(Primitive Data Type)의 크기는 데이터 유형에 따라 다르지만 참조 자료형(Reference Data Type)은 모두 동일한 크기를 갖는다.
-
참조 자료형(Reference Data Type)의 예로는 String, Arrays, Classes, Interface 등이 있다.
숫자 리터럴(Numeric Literals)에서 밑줄 문자 사용
-
JavaSE7 이상에서는 숫자 리터럴의 숫자 사이에 임의의 수의 밑줄 문자(_)가 나타날 수 있습니다. 예를 들어 이 기능을 사용할 수 있다. 숫자 리터럴로 자릿수 그룹을 구분하여 코드의 가독성을 향상할 수 있다.
-
다음 예에서는 숫자 리터럴에서 밑줄을 사용할 수 있는 다른 방법을 보여준다.
-
long creditCardNumber = 1234_5678_9012_3456L;
-
long socialSecurityNumber = 999_99_9999L;
-
float pi = 3.14_15F;
-
long hexBytes = 0xFF_EC_DE_5E;
-
long hexWords = 0xCAFE_BABE;
-
long maxLong = 0x7fff_ffff_ffff_ffffL;
-
byte nybbles = 0b0010_0101;
-
long bytes = 0b11010010_01101001_10010100_10010010;
-
-
밑줄은 자리 사이에만 배치할 수 있으며, 다음 위치에는 밑줄을 배치할 수 없다.
-
숫자의 시작 또는 끝에
-
부동 소수점 리터럴의 소수점 근처에 있음
-
F 또는 L 접미사 이전
-
자릿수의 문자열이 필요한 위치
-
-
다음 예제는 숫자 리터럴로 표시된 유효하거나 잘못된 밑줄 배치를 보여준다.
-
float pi1 = 3_.1415F; // 유효하지 않음: 밑줄을 소수점 근처에 놓을 수 없습니다.
-
long socialSecurityNumber1 = 999_99_9999_L; // 유효하지 않음: L 접미사 앞에 밑줄을 넣을 수 없습니다.
-
int x1 = 5_2; // OK (decimal literal)
-
int x2 = 52_; // 유효하지 않음: 리터럴 끝에 밑줄을 넣을 수 없습니다.
-
int x3 = 5_______2; // OK (decimal literal)
-
int x4 = 0_x52; // 유효하지 않음: 0x radix 접두사에 밑줄을 넣을 수 없습니다.
-
int x5 = 0x_52; // 유효하지 않음: 숫자의 시작 부분에 밑줄을 넣을 수 없습니다.
-
int x6 = 0x5_2; // OK (hexadecimal literal)
-
int x7 = 0x52_; // 유효하지 않음: 숫자의 끝에 밑줄을 넣을 수 없습니다.
-
'IT 개발 > JAVA' 카테고리의 다른 글
변수(Variables) (0) | 2021.01.11 |
---|---|
객체 지향 프로그래밍 개념 - 클래스(Class) (0) | 2021.01.10 |
객체 지향 프로그래밍 개념 - 객체(Object) (0) | 2021.01.10 |