자바의 자료형은 크게 기초형(primitive type)과 참조형(referene type)으로 나뉜다. 그리고 기본형은 다시 정수형, 실수형, 문자형, 논리형 네 가지로 분류할 수 있다.
자료형
1. 기초형
- 정수형
- 실수형
- 문자형
- 논리형
분류 | 데이터형 | 크기(비트) | 최소 - 최댓값 |
정수형 | byte | 8 | -127 ~ +128 |
short | 16 | -32,768 ~ + 32,767 | |
int | 32 | -2,147,483,648 ~ +2,147,483,647 | |
long | 64 |
-9,223,372,036,854,775,808~ +9,223,372,036,854,775,807 |
|
실수형 | float | 32 | 단정도 실수형 (유효 숫자 7 ) |
double | 64 | 배정도 실수형 (유효 숫자 15) | |
문자형 | char | 16 | 유니코드 문자열 |
논리형 | boolean | 8 | true, false |
1. 정수형
정수형은 정수를 저장하는 자료형으로서 byte, short, int, long 네 가지가 있으며 저장할 수 있는 정수의 범위가 각각 다르다. 저장할 수 있는 정수의 범위는 byte < short < int < long 순으로 넓다.
만일 범위를 벗어나는 값을 대입하게 되면 다음과 같은 에러가 생긴다.
class StrongType {
public static void main(String[] args) {
byte n = 300;
System.out.println(n);
}
}
실행결과
StrongType.java:7: error: incompatible types: possible lossy conversion from int to byte
byte n = 300;
^
1 error
<<< Process finished (PID=12172). (Exit code 1)
================ READY ================
byte 형의 최대값은 127이기에 이를 초과하는 정수 값을 넣게되면 에러가 생기는 것을 확인할 수 있다.
2. 상수, 리터럴(literal)
상수 또는 리터럴이란, 아래 12345 와 같이 소스 코드에 쓰여있는 값이다.
정수형 상수는 10진수, 8진수, 16진수, 2진수와 같이 여러 진법으로 표시가 가능하다. 정수형 상수는 부호있는 int 형으로 저장되는 것이 기본이며, 만약 아주 큰 수를 다루고 있다면 80L 과 같이 숫자 끝에 대문자 'L' 또는 소문자 'l' 을 붙이면 long 형으로 저장할 수 있다.
int x = 12345;
- 예제 -
1. long 타입의 정수 변수를 사용하여 빛이 1년 동안 진행하는 거리를 계산하시오.
/*
long type 사용
하나의 예로 빛이 1년 동안 진행하는 거리를 계산하시오.
*/
class Light {
public static void main(String[] args) {
long lightspeed;
long distance;
lightspeed = 300000L; // long type 이라는 것을 컴파일러에게 알려준다. (아무것도 없으면 int)
distance = lightspeed * 365L * 24 * 60 * 60;
System.out.println("빛이 1년 동안 가는 거리: " + distance + "km");
}
}
실행 결과
빛이 1년 동안 가는 거리: 9460800000000km
2-1. final 기호 상수
the final keyword is used in several contexts to define an entity that can only be assigned once.
final 은 entity를 한 번만 할당한다. 즉 한번 초기화하면 값의 변경이 불가능하다.
final variables
Java 에서 상수를 선언할 때 final을 사용하여 값의 변경을 불가능하게 만들 수 있다. 한번 선언하면 변하지 않는 immutable 형식이라는 것을 명시적으로 표현한다. 만일 변경을 시도하더라도 컴파일 도중 에러가 발생한다.
고정불변의 값인 대표적인 예 PI
final double PI = 3.141592;
두 번 할당하려한 경우 다음과 같이 에러가 발생한다.
public class Final {
public static void main(String[] args) {
final int MAX_NUMBER = 77;
MAX_NUMBER = 100;
System.out.println(x);
}
}
실행 결과 : error
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
x cannot be resolved to a variable
at Final.main(Final.java:5)
3. boolean 논리형
논리형은 true 아니면 false 만을 가질 수 있다. 논리형은 논리 연산을 수행하는데 사용된다.
public class BooleanTest {
public static void main(String[] args) {
boolean b;
b = true;
System.out.println("b : " + b);
b = (1 > 2);
System.out.println("b : " + b);
}
}
실행 결과
b : true
b : false
4. float, double 실수형
부동소수점(floating point)형은 실수를 나타내는 데 사용되며 double 형과 float 형으로 나뉜다.
- float 형 : 32비트
- double 형 : 64비트
float temperature = 25.6F;
숫자끝에 f, F 를 붙이면 float 형 상수가 된다.
정밀도 pricision는 변수가 얼마나 많은 유효 숫자를 가질 수 있느냐인데, float의 정밀도는 7개, double 은 약 15개 정도의 유효 숫자를 가진다. 그러나 금액을 나타낼 때는 근본적으로 부정확한 부동소수점형을 사용하면 안된다. 대신 the java.math.BigDecimal 같은 클래스를 사용하는 것이 좋다.
- 예제 -
반지름이 5인 원의 면적을 구하시오.
public class AreaTest {
public static void main(String[] args) {
double radius;
double area;
final double PI = 3.141592;
radius = 5;
area = PI * radius * radius;
System.out.printf("원의 면적은 %.4f이다.", area);
}
}
실행 결과
원의 면적은 78.5398이다.
5. char 문자형
char 은 하나의 문자를 저장할 수 있다. Java에서는 유니코드(unicode)를 지원하기 위해 문자 하나가 16비트로 표현된다.
- char : 16비트 유니코드 문자
- byte : 8비트 정수
char 과 String 의 차이
type | 자료형 | 기호 | 사용 방법 |
char | 기초형 - 문자형 | ' ' | 문자 하나 |
String | 참조형 - 문자열 | " " | 문자열 덩어리 |
- char 예시 -
char ch1 = '가';
char ch2 = 'c';
6. boolean 논리형
논리형은 참과 거짓.
- reference -
www.ibm.com/developerworks/java/library/j-jtp1029/index.html
ko.wikipedia.org/wiki/IEEE_754
blog.lulab.net/programming-java/java-final-when-should-i-use-it/
'BackEnd > Java' 카테고리의 다른 글
for 문 (0) | 2021.01.05 |
---|---|
변수와 자료형 (0) | 2020.12.27 |
Java 프로그래밍 기초 - class, method, statement (0) | 2020.12.27 |
실수 타입 - Double (0) | 2020.12.24 |
Java 프로그래밍 기초 - Scanner 스캐너 클래스 (0) | 2020.12.23 |