본문 바로가기
java/개념

데이터 타입

by unhyepnhj 2024. 4. 29.

데이터 타입(data type): 자바에서 다룰 수 있는 데이터의 종류

 

1. 기본 타입: 8개

  • boolean
  • char
  • byte
  • short
  • int 
  • long 
  • float
  • double

- 자바는 플랫폼 독립적 언어이므로 데이터 타입의 크기가 CPU나 운영체제 등과 관계없이 항상 일정

- 다루는 값의 범위에 따라 적절한 타입을 선택

 

2. 레퍼런스 타입: 1개

- 한 가지이지만 용도는 3가지이다.

  • 배열에 대한 레퍼런스
  • 클래스에 대한 레퍼런스
  • 인터페이스에 대한 레퍼런스

문자열

- 문자열은 기본 타입에 속하지 않음

- String 클래스로 문자열 표현

String toolName="JDK";

- 문자열과 기본 타입의 +연산 시 기본 타입의 값이 문자열로 바뀌고 두 문자열이 연결된 새로운 문자열 탄생

toolName+1.8
"("+3+","+5+")"
System.out.println("toolName+"이 출시됨");

변수와 선언

 

변수

- 데이터를 저장하는 공간

- 프로그램 실행 중에 값을 임시 저장

- 변수를 선언하면 타입 크기의 메모리가 할당 -> 프로그램 실행 중에 값을 읽고 쓰는 공간으로 활용

 

변수 선언

- 데이터 타입과 이름으로 변수 선언

- 같은 타입의 변수를 여러 개 선언하려면 콤마로 분리

- 변수 선언과 동시에 초깃값 지정 가능 -> "초기화"

- 변수 선언 이후에 변수에 값을 저장하고 읽을 수 있음

double area;			//데이터 타입 + 변수 이름
char c1, c2, c3;		//같은 유형 변수일 경우 콤마로 분리

int radius = 10;		//초기화

area = radius*3.14;		//변수 radius의 값을 읽고 area에 radius*3.14의 값 저장

리터럴

- 프로그램에 직접 표현한 값

- 정수, 실수, 문자, 논리, 문자열 리터럴

 

1. 정수 리터럴

  • 10진수: 0으로 시작하지 않는 수
  • 8진수: 0으로 시작하는 수
  • 16진수: 0x로 시작하는 수
  • 2진수: 0b로 시작하는수
int n = 15;		//십진수
int m = 015;		//8진수->(13)₁₀
int k = 0x15;		//16진수->(21)₁₀
int b = 0b0101;		//2진수->(5)₁₀

- int 타입으로 자동 컴파일됨

- long타입으로 지정하려면 숫자 뒤에 L 또는 l

long g = 24L;		//24l이어도 됨

 

2. 실수 리터럴

- 소수점이나 지수(exponent)형태로 실수를 표현

- double 타입으로 자동 처리됨

- 숫자 뒤에 F나 f를 붙이면 float, D나 d를 붙이면 double 타입으로 변환 가능

double d = 0.1234;
double e = 1234E-4;		//1234*10^(-4)=0.1234

float f = 0.1234f;		//f = 0.1234로 하면 컴파일 오류
double 2 = .1234D;		// .1234와 동일

 

3. 문자 리터럴

- ('  ')로 문자를 표현

- \u 다음에 유니코드 값 사용하여 표현

char a = 'A';
char b = '글';
char c = \u0041;		//'A'유니코드 값(0041)사용
char d = \uae00;		//'글' 유니코드 값(ae00)사용

 

4. 논리 리터럴과 boolean 타입

- 논리 리터럴은 true, false 두 개 뿐

- boolean 타입 변수에 직접 치환하거나 조건문에 사용

boolean a = true;
boolean b = 10>0;		//10>0이 참이므로 b = true
boolean c = 1;			//타입 불일치 오류(C/C++와 달리 자바에서 true=1 아님)
while(true){...}		//무한루프(while(1) 안 됨)

 

5. 기본 타입 이외의 리터럴

- null 리터럴

int n =  null;			//오류(기본 타입에 사용 불가)
String str = null;		//객체 레퍼런스에 대입

- 문자열 리터럴

String str = "GOOD";			//큰따옴표로 표현

※모든 문자열은 String 클래스의 객체

 

+ JDK7부터 숫자에 '_' 허용 -> 가독성 증가

- 숫자 리터럴의 아무 위치에나 언더스코어('_') 허용: 컴파일러는 리터럴에서 '_'를 제외하고 처리

int price = 20_100;						//price = 20100
long cardNumber = 1234_5678_1357_2468L;				//1234567813572468
long controlBits = 0b10110100_01011011_10110011;
int age = 2________5;						//age = 25

int x = 15_;						//오류(리터럴 끝에 _ 사용 불가)
double pi = 3_.14;					//오류(소수점 앞뒤에 사용 불가)
long idNum = 12344_32532_L;				//오류(L/F 앞에 사용 불가)
int y = 0_x15;						//오류(0x 중간이나 끝에 사용 불가)

 

+ JAVA 10부터 지역 변수 선언 시 타입 대신 var 키워드 사용 가능

var price = 200; 			//int 타입으로 결정
var name = "yourname";			//String 타입으로 결정
var pi = 3.14;				//double 타입으로 결정
var point = new Point();		//Point 타입으로 결정

- 변수 선언 시 초깃값이 주어지지 않으면 오류 발생

- 지역 변수에만 사용 가능 


상수

 

상수 선언

- final 키워드 사용

- 선언 시 초깃값 지정 -> 실행 중 값 변경 불가

final double PI = 3.141592;			//상수 선언+데이터 타입+상수 이름+초깃값

타입 변환: 변수나 상수, 리터럴의 타입을 다른 타입으로 변환

 

1. 자동 타입 변환

- 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때

- 컴파일러는 작은 타입을 큰 타입으로 자동 변환함 

long m = 25;			//리터럴 25는 int 타입이므로 25(작은 타입)가 long(큰 타입)으로 자동 변환 
double d = 3.14*10;		//실수 연산 위해 int 타입의 10이 double 타입의 10.0으로 자동 변환

 

2. 강제 타입 변환(캐스팅 casting)

- 개발자가 강제로 타입 변환을 지시

int n = 300;
byte b = n;			//컴파일 오류(int 타입은 byte 타입으로 자동 변환 불가)

byte b = (byte)n;		//() 안에 타입을 명시하여 강제 타입 변환

※강제로 타입 변환하더라도 데이터 손실 발생(byte 타입의 b에 300이 저장되지 않고 256을 뺀 나머지 44가 저장)


예제 2-2 상수 PI를 선언하고 원의 면적을 구하는 프로그램 작성

  • 원주율 PI=3.14
  • 원의 반지름 radius=10.0
  • 원의 면적 circleArea
  • 원의 면적을 출력

 

예제 2-3 아래 코드의 실행 결과

'java > 개념' 카테고리의 다른 글

반복문  (0) 2024.05.02
조건문  (0) 2024.04.30
연산  (0) 2024.04.30
키 입력  (0) 2024.04.30
식별자  (0) 2024.04.29