본문 바로가기

BackEnd/Java

자료형 - 기초형 (primitive data type)

자바의 자료형은 크게 기초형(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