본문 바로가기
프로그래밍/Java-문법정리

【Java문법】데이터 타입

by 코이킹 2022. 1. 9.
반응형

안녕하세요 코이킹입니다. 

 

이 포스트에서는 데이터 타입(=자료형)에 대해서 설명해보겠습니다. 

 


1. 데이터 타입이란?

  변수가 어떤 형식의 데이터 인지를 정의하는 것이 데이터 타입입니다. 

자바에서 데이터 타입은 크게 원시 데이터 타입과 참조 데이터 타입으로 나눌 수 있습니다. 

 

2. 원시 데이터 타입

 원시 데이터 타입이란 변수에 값 자체가 저장되는 데이터 타입입니다. 

참고로 '변수에 저장되는 값 자체'리터럴이라고 합니다.  

 

자바에서 원시 데이터 타입은 총 8개가 존재하며 자세한 내용은 아래 표에 정리해 두었습니다.  

 

※ 자바의 원시 데이터 타입

데이터 분류 데이터 타입 메모리 공간 값의 표현 가능 범위 해설
정수 byte 1 byte -128 ~ 127 정수데이터를 넣을 수 있는 데이터 타입
가장 많이 쓰이는 데이터 타입은 int

short 2 byte -32,768 ~ 32,767
int 4 byte -2,147,483,648 ~ 
2,147,483,647 
long 8 byte -9,223,372,036,854,775,808 ~ 
9,223,372,036,854,775,808 
부동소수점수 float 4 byte 1.4E-045 ~ 3.4E+038 부동소수점수 데이터를 넣을 수 있는 데이터 타입
가장 많이 쓰이는 데이터 타입은 double
double 8 byte 4.9E-324 ~ 1.8E+308
문자 char 2 byte  0 ~ 65,535의 유니코드 문자 작은 따옴표('')로 감싸는 문자 1개의 값을 가질 수 있는 데이터 타입.
논리 boolean 1 byte ture 또는 false true 또는 false의 값을 넣을 수 있는 데이터 타입.

 

 

※ 같은 데이터 데이터 분류에 해당하는 데이터 타입이 여러 개 존재하는 이유 

정수 데이터의 경우 데이터 타입이 byte, short, int, long네개나 존재합니다. 

데이터 타입이 복수 본재하는 이유는 메모리를 효율적으로 사용하기 위해서 입니다. 

 

예를 들어 변수 a가 있다고 가정해 봅시다. 

변수 a에 대입하는 값이 절대로 127을 넘어가지 않는다는 조건하에, 변수a의 데이터 타입을 long으로 설정한다면, 

변수 a가 차지하는 메모리 공간은 8 byte가 됩니다. 

 

long을 대신하여 변수 a의 데이터 타입을 byte로 설정하면 변수 a가 차지하는 메모리 공간은 1 byte가 됩니다. 

변수 a의 데이터 타입을 long으로 설정하면 변수가 차지하는 메모리 공간이 8배나 많아지게 됩니다. 

변수 a하나만 이라면 현재의 하드웨어 수준에서는 큰문제가 되진 않을 겁니다. 하지만, 변수를 수백, 수천 개 사용한다고 한다면 확실히 메모리를 불필요하게 낭비하게 될 것입니다.  

 

 

※ 각 데이터 타입별로 변수를 선언하고 초기화 해보기 

// 변수 선언
short short1;
int int1;
long long1;
float float1;
double double1;
char char1;
byte byte1;
boolean boolean1;
        
// 데이터 타입별 값 대입
byte1 = 1;
short1 = 1;
int1 = 2;
long1 = 4L;
float1 = 0.4f;
double1 = 0.4;
char1 = 'a';
boolean1 = true;

 

3. 참조 데이터 타입

참조 데이터 타입이란 자바의 1) 라이브러리 또는 2) 프로그래머가 직접 만든 클래스를 변수의 데이터 타입으로 사용하는 것을 말합니다. 

참조 데이터 타입은 원시 데이터 타입과 달리 리터럴값이 저장되는 것이 아니라, 인스턴스의 주소값이 저장됩니다. 

 

'new'연산자를 사용하여, 인스턴스를 생성하고 인스턴스의 메모리주소 값을 참조변수에 넣을 수 있습니다.

1) 라이브러리 클래스

// Java 기본 라이브러리에서 지원하는 클래스를 활용
// [클래스명] [변수명] = new [생성자명()];
Object object = new Object();
System.out.println(object);

 

2) 프로그래머가 직접 만든 클래스

// 프로그래머가 직접 만든 클래스를 활용
// new 연산자를 사용하여 참조변수에 인스턴스의 주소값을 대입한다.
TestDataType tdt = new TestDataType(100, "test");
System.out.println(tdt);  // 힙의 메모리 주소가 출력된다.

class TestDataType{

	int testInt;
	String testStr;
	
	public TestDataType(int testInt, String testStr) {
		this.testInt = testInt;
		this.testStr = testStr;
	}
}

 

※ String은 특별히 원시 데이터 타입처럼 값의 대입이 가능

// String리터럴은 Heap영역에 별도로 마련된 "String Constant Pool"에 저장
String str1 = "string1";

// new 연산자 사용시 Heap에 인스턴스생성
String str2 = new String("string2");

 

※ 예제코드

https://github.com/leeyoungseung/algorithmBasic/blob/master/algorithm/src/basic/B_03_DataType.java 

 

※ qiita에 투고한 URL

https://qiita.com/Koiking-L/items/365766ec1d652f93d96b

반응형

'프로그래밍 > Java-문법정리' 카테고리의 다른 글

【Java문법】배열  (0) 2022.01.09
【Java문법】반복문  (0) 2022.01.09
【Java문법】조건문  (0) 2022.01.09
【Java문법】연산자  (0) 2022.01.09
【Java문법】변수  (0) 2022.01.09

댓글