상수(contant) / JAVA의 데이터 타입 (기본형 & 참조형)
▶▶ 상수 (contant)
– 항상 같은 값을 갖는, 즉 변하지 않는 데이터.
– 자바에서 사용하는 실제 데이터를 리터럴(Liternal)이라고 함.
ex ) 정수 5 / 실수 3.14 / 문자 'A' / 문자열 "Hello, World!" 등
EX )
System.out.println(1); // 정수형 리터럴
System.out.println(3.14); // 실수형 리터럴
System.out.println(true); // 논리형 리터럴
System.out.println(false); // 논리형 리터럴
System.out.println('A'); // 문자형 리터럴
System.out.println(5L); // 정수형(long형) 리터럴 // 접미사 L 붙임
System.out.println(1.5f); // 실수형(float형) 리터럴 //접미사 f 붙임
System.out.println("Hello, World!"); // 문자열형(String) 리터럴
✓ 정수형(long형) 리터럴에는 무조건 대문자 'L'을 붙이지만, 실수형(float형) 리터럴에는 관례적으로 소문자 'f'를 붙임.
▶▶ 데이터 타입(Data Type) = 자료형
– 사용할 데이터의 종류를 구분해 놓은 것이며, 크게 두 가지 타입으로 분류함.
1. 기본 데이터타입 (Primitive Type)
2. 참조 데이터타입 (Reference Type)
▶ 기본 데이터타입 (Primitive Type)
1Byte(8bit) | 2Byte(16bit) | 4Byte(32bit) | 8byte(64bit) | |
논리형 | boolean | |||
정수형 | byte | short | int | long |
실수형 | float | double | ||
문자형 | char |
✓ 위의 8가지를 제외한 나머지는 모두 참조형 데이터타입이므로 기본 데이터타입은 외워두는게 좋음.
▸ 정수형 데이터타입
– 메모리 크기에 따라 표현 가능한 정수의 범위가 달라짐.
• byte (1Byte = 8bit) : 2^8 = 256가지 = -128 ~ +127 표현 가능 (0포함)
• short (2Byte = 16bit) : 2^16 = 65536가지 = -32768 ~ +32767 표현 가능
• int (4Byte = 32bit) : 2^32 = 약 -21억 ~ +21억 = 정수의 기본형
• long (8Byte = 64bit) : 2^64 = 약 -922경 ~ +922경 = int보다 큰 데이터타입 숫자 사용시
✓ 사실상, 현대에서는 메모리 공간이 충분히 여유롭기 때문에 byte & short타입을 사용하지 않고 int & long타입을 사용.
EX ) byte타입 변수
→ byte타입에 들어갈 수 있는 정수의 범위는 -128 부터 +127 까지.
✓ 128이라는 정수는 byte타입의 변수b에 들어갈 수 없음.
EX2 ) short타입 변수
→ short타입 저장 가능한 정수의 범위는 -32768부터 +32767까지.
→ short타입 변수s를 선언하고 정수 128과 정수 32767도 저장가능 하지만,
32768은 저장 가능한 범위를 벗어났기 때문에 오류 발생함.
EX3 ) int타입 변수
✓ 오류 1
– int타입 저장 가능한 정수의 범위는 최대치가 2147483647까지만 표기 가능함.
– int범위를 벗어나는 리터럴은 반드시 접미사'L'을 붙여서 long타입으로 표기해야함.
✓ 오류 2
– int타입의 범위를 벗어나는 정수에 접미사 L을 붙여서 long타입으로 만들어 줬으나,
정작 long타입 정수는 int타입 변수에 저장할 수 없으므로 오류가 발생함.
– int타입보다 크지 않은 정수도 접미사L을 붙이면 long타입으로 취급됨.
✓ 오류 3
– 정수5는 int 범위에 포함되지만, 접미사 L을 붙이면 long타입으로 취급되므로 5L은 long타입.
int타입 변수 i에 저장할 수 없음.
▸ 실수형 데이터타입
• float f = 3.14f;
– 접미사가 없으면 double타입으로 인식되므로 float타입에 변수를 저장할 수 없음.
– 접미사는 f & F 둘 다 되지만, 관례적으로 소문자f를 사용함.
• double d = 3.14;
– 실수형 데이터타입(double) 변수d에 3.14 초기화.
▸ 논리형 데이터타입 – boolean
– 특수한 값인 true 또는 false만 사용 가능하며, 무조건 소문자로만 작성.
EX )
✓ 오류 1
– boolean타입인 bool 변수에는 true 또는 false값만 넣을 수 있으므로 '1' 이라는 값은 저장할 수 없음.
✓ 오류 2
– true와 false값은 무조건 소문자만 사용 가능.
▸ 문자형 데이터타입 – char
– 내부적으로 정수형 데이터로 처리됨.
2byte(16bit) 크기의 범위를 사용하며, 정수 범위 0~65535 사이의 값을 가짐. (음수 사용x)
– 1개의 문자를 작은따옴표(' ')로 둘러싸서 표현 → 작은따옴표 내의 문자 1개가 정수형으로 변환되어 처리됨.
– 유니코드(unicode) 표현 방법 사용
아스키코드(ASCII, 7bit – 미국 표준 문자 코드)를 기반으로 나머지 문자를 추가하여 만든 코드 체계.
전 세계의 모든 문자를 표현할 수 있음.
ex ) 'A' = 65, 'a' = 97, '0' = 48
– 10진수로 된 코드값을 사용하지만 입력 시 16진수 코드 4자리를 사용하며,
' \ ' 기호와 ' u '를 쓰고 16진수 xxxx형태의 유니코드 값을 표현함.
ex ) 65 = \u0041
EX ) char타입 변수 만들기
char ch = 'A';
ch = 'ABC'; // 오류! 반드시 1개의 문자 포함되어야 함
ch = ''; // 오류! 반드시 1개의 문자 포함되어야 함
ch = ' '; // 공백 사용 가능
ch = 65; // 10진수 코드값으로 지정도 가능(정수65 = 'A')
ch = '\u0041'; // 유니코드 표기법 사용 가능(16진수 0041 = 정수65)
ch = 'A';
→ char타입 리터럴을 표기하기 위해 작은따옴표로 둘러싸며, 작은따옴표 사이에는 반드시 1개의 문자가 포함되어야 함.
✓ 65 == \u0041 == A 모두 같은 값을 가짐.
ch = '가';
System.out.println(ch); // == 가
ch = '\uAC00';
System.out.println(ch); // == 가
ch = '\uAC01';
System.out.println(ch); // == 각
→ 한글 다른 나라 문자도 표현 가능.
✓ '\uAC00' == 가 에서 맨 끝자리를 +1 하면, '\uAC01' == 각 이 나옴.
2. 참조 데이터타입 (Reference Type)
– 기본 데이터타입을 제외한 모든 것이 참조 데이터타입.
▸ 문자열을 저장하기 위한 데이터타입 — String
– 기본 데이터타입이 아닌 참조 데이터타입 (메모리크기가 모두 4Byte)
– 문자 데이터를 표현하는 char타입은 1개의 문자만을 작은따옴표('')로 둘러싸지만,
문자열 데이터를 표현하는 String타입은 0개 이상의 문자열을 큰따옴표("")로 둘러싸서 표현함.
– 아무 문자도 포함하지 않는 "" 이러한 문자열은 널스트링(null String)이라고 함.
EX )
✓ 아무 문자도 포함하지 않는 "" 널스트링에서는 아무것도 출력이 안됨.
✓ char A와 String A는 데이터 타입이 다르므로, String A는 정수65로 표현이 안되고 문자열 'A'로 표현됨.
Comment

옛날에는 컴퓨터 메모리 공간이 충분하지 않아서 byte & short타입을 사용해가며
어떻게든 최대한 공간을 활용해서 그득그득 넣으려 했다는데...
요즘은 컴퓨터 사양이 좋아 그럴 필요가 없다는게 놀라우면서도 신기하당ㅋㅋㅋ
데이터 타입을 이렇게 분류할 수 있고
각각 표현할 수 있는 범위가 정해져 있는것도 참 흥미롭다! !!! ! !
빨리 데이터타입뿐만 아니라 데이터크기와 진수개념도 다 잡아야지!~!!!