Java - 변수의 타입 (기본형과 참조형)

data의 type

우리가 주로 사용하는 값 ( data ) 의 종류 ( type )은 크게 "문자와 숫자"로 나눌 수 있으며,

숫자는 다시 "정수와 실수"로 나눌 수 있습니다.

 

이런 값( data )의 종류 ( type )에 따라 값이 저장될 공간의 크기와 저장형식을 정의한 것을 자료형 ( data type ) 이라고 합니다.

 

자바 프로그래머 권장 규칙

1. 클래스 이름의 첫 글자는 항상 대문자로 한다.

=> 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.

 

2. 여러 단어로 이루어진 일므은 단어의 첫 글자를 대문자로 한다.

=> lastlndexOf, StringBuffer

 

3. 상수의 이름은 모두 대문자로 하고, 여러 단어로 이뤄진 경우 "_"로 구분한다. ( 상수란 고정된 값, 변하지 않는 값)

=> PI, MAX_NUMBER


자료형

자료형은 크게 "기본형"과 "참조형" 두 가지로 나눌 수 있습니다.

기본형 변수는 실제 값을 저장하고, 참조형 변수는 어떤 값이 저장되어 있는 주소를 값을 갖습 ( 값 자체에 영향을 줄 수 있다.)니다.

기본형 (Primitive type)
=> 논리형 (boolen), 문자형(char), 정수형(byte, short, int, log), 실수형 (float, double) 계산을 위한 실제 값을 저장한다. ( 총 8개 )
변수의 값을 읽기만 가능 (read only)


참조형 (Reference type)
=> 객체의 주소를 저장한다. ( 기본형 8개를 제외한 나머지 타입 )
변수의 값을 읽고 수정 가능 (read & write)

 

기본형

기본형에는 모두 8개의 타입이 있으며, 크게 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 로 구분됩니다.

자료형 설명 표현할 수 있는 값의 범위 크기 byte
boolean true와 false 중 하나의 값을 가지며, 조건식과 논리적 계산에서 사용 false, true 1
char 문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장할 수 있다. 0 ~ 65535 (2^16) 2
byte 정수를 저장하는데 사용.
이진 데이터를 다룰 때 사용.
-128 ~ 127 (-2^7 ~ 2^7 -1) 1
short 정수를 저장하는데 사용.
c언어와의 호환을 위해 추가.
-32768 ~ 32767 (-2^15 ~ 2^15 -1)  2
int 정수를 저장하는데 사용.
int를 주로 사용한다.
-21 ~ 21 (-2^31 ~ 2^31 -1) 4
long 정수를 저장하는데 사용. -920 ~ 920(-2^31 ~ 2^31 -1) 8
float 실수를 저장하는데 사용. 1.4E-45 ~ 3.4E38 4
double 실수를 저장하는데 사용.
주로 double이 사용된다.
4.9E-324 ~ 1.8E308 8

이 표를 보면 int가 표현할 수 있는 값의 범위는 약 21억 ( 210,000,000 )으로 대략 10자리 수 값을 저장할 수 있습니다. 

 

 

  • 기본형의 종류와 크기

int가 CPU를 가장 효율적으로 처리할 수 있는 타입이고, 효율적인 실행보다 메모리를 절약하려면 byte나 short를 선택한다.

  1 byte ( 8 bit ) 2 byte ( 16 bit ) 4 byte ( 32 bit ) 8 byte ( 64 bit )
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

  • 실수형의 범위와 정밀도

실수형은 정수형과 저장형식이 달라서 같은 크기라도 훨씬 큰 값을 표현할 수 있지만 오차가 발생할 수 있다는 단점이 있습니다.

그래서 정밀도가 중요한데 정밀도가 높을 수록 발생할 수 있는 오차의 범위도 줄어들게 됩니다.

자료형 저장 가능한 값의 범위 정밀도 byte
float 1.4E-45 ~ 3.4E38 7 자리 4
double 4.9E-324 ~ 1.8E308 15 자리 8

float의 경우 10진수로 7자리의 수까지 오차없이 저장할 수 있다는 뜻으로,

double의 정밀도는 15이기에 보다 높은 정밀도가 필요한 경우 double을 선택해야합니다.

 

 

참조형

참조형 변수의 경우 변수의 타입으로 클래스 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 됩니다.

즉, 새로운 클래스를 작성한다는 것은 새로운 참조형을 추가한다고 볼 수 있습니다.

참조형 타입으로 String, Integer, Boolen, List 등이 있습니다.

 

[클래스명] [변수명]; - 참조형 변수의 선언 문법
[클래스명] [변수명] = new [클래스명]([파라미터]); - 참조형 변수의 선언 및 초기화 문법

Date today = new Date(); // Date 객체를 생성해 그 주소를 today 참조변수에 저장.

위 예제는 Date 클래스 타입의 참조변수 today를 선언한 것입니다.

참조변수는 null 또는 객체의 주소를 값으로 가지며, 참조형에서 초기화 할 때는 위와 같이 객체를 생성하는 연산자 new를 사용합니다.

객체에 사용된 클래스를 객체의 타입이라고 하며, Date 객체에 사용된 객체의 타입은 Date 클래스입니다.

 

기본형 문자형 char는, 하나의 문자만을 저장 가능하고 출력을 하는 데에도 여러 변수를 연산하여 사용할 때 유니코드 전환 때문에 출력을 하기가 번거롭습니다.

String은 하나의 문자가 아닌 여러 문자(즉, 문자열)를 저장할 수 있으며, char와 다르게 빈 문자열도 저장이 가능합니다.

char는 작은따옴표로 저장할 값을 감싸지만 String은 큰따옴표로 저장할 값을 감싸야 합니다.

public class Test1 {

	public static void main(String[] args) {
		// 가장 처음 만들었던 프로그램의 문자열을 침조형 변수 초기화 문법으로 초기화
		String hello = new String("Hello, world!");
		
		System.out.println(hello);
		System.out.println("===================");
		
		// String은 클래스지만 기본형 변수를 초기화하는 방법으로도 초기화가 가능함 
		String emptyStr = "";	// 빈 문자열로도 초기화가 가능
		
		// 또한 문자열을 더하는 것도 가능하다
		String hello1 = "Hello, ";
		String hello2 = "world!";
		String helloAgain = hello1 + hello2;
		System.out.println(helloAgain);
		System.out.println("===================");
	}

}