카테고리 없음

변수의 타입

crone 2021. 6. 9. 16:05

변수의 타입

값의 종류는 크게 "문자" 와 "숫자"로 나눌 수 있고, "숫자"는 다시 "정수 와 실수"로 나뉘어 진다.

 

기본형 변수는 실제 값(data)을 저장한다.

 

문자 

ex) '1', 'a', 'A' ... (char)

 

정수(byte, short, int, long)

ex) 1, 2, 100, 200...

 

실수(float, double)

ex) 1.2f, 1.0 ...

 

 

참조형

참조형 변수는 어떠 값이 저장되어 있는 주소를 값으로 갖는다.(기본형 8개를 제외한 나머지 타입)
참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수 타입이 된다.

 

ex) Apple apple;, Bus bus;, Car car; ...

 

참조변수 선언방법

 

클래스 이름 변수이름;

ex) Apple apple;

 

참조변수는 null 또는 개체의 주소를 값으로 갖으며 참조변수의 초기화는 아래와 같이 한다.

ex) Apple apple = new Apple();  :: 참조변수 apple은 Apple이라는 타입이며 Apple이라는 객체를 저장하고 있다.

 

 

 

 

기본형

기본형은 8개의 타입이 있으며, 논리형, 문자형, 정수형 ,실수형 으로 구분된다.

논리형 boolean 조건식 및 논리 계산에 사용된다.
문자형 char                     내부적으로 유니코드로 저장하기 때문에 정수형 또는 실수형과 연산가능
정수형 byte, short, int, long             주로 int가 사용된다
실수형 float, double                       주로 double이 사용된다.

 

  1byte 2byte 4byte 8byte
논리형 boolean      
문자형   char (유니코드 2byte)    
정수형 byte short int double
실수형     float double

 

  bit byte 저장 가능한 범위
byte 8 1 -2^7 ~ 2^7 - 1(-128 ~ 127)
short 16 2 -2^15 ~ 2^15 - 1
int 32 4 -2^31 ~ 2^31 - 1
long 64 8 -2^63 ~ 2^63 - 1

 

실수형은 정수형과 저장방식이 달라 같은 크기라도 훨씬 큰 값을 표현가능하나 오차가 발생할 수 있다는 단점이 있다.

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

  bit byte 정밀도 저장 가능한 값의 범위
float 32 4 7자리 1.4E-45 ~ 3.4E38(1.4 x 10^-45 ~ 3.4 x 10^38)
double 64 8 15자리 4.9E-324 ~ 1.8E308(4.9 x 10^-324 ~ 1.8 x 10^308)
	public static void main(String[] args) {
		
		//float
		System.out.println(3.123123123123123f);/*3.1231232*/
		
		//double
		System.out.println(3.123123123123123123123123123123);/*3.123123123123123*/
		
	}

 

상수와 리터럴(constant & literal)

상수는 변수와 마찬가지로 "값을 저장할 수 있는 공간" 이지만 변수와 달리 한번 값을 저장하고 나면 다른 값으로 변경할 수 없다. 선언방법은 변수선언과 동일하며 변수의 타입 앞에 키워드 "final"을 붙여주기만 하면 된다.

 

ex) final int VALUE= 10;   //상수 VALUE 선언 및 10으로 초기화

 

JDK1.6부터는 상수를 선언과 동시에 초기화 하지 않아도 되며, 사용 전에만 초기화하면 된다. 그래도 선언과 동시에 초기화 하는 습관을 갖자.

 

리터럴

그 자체로 값을 의미하는 것

프로그래밍에서 "값을 한번 저장하면 변경할 수 없는 저장공간"을 상수라 부르기 때문에 평소에 알고 있던 상수의 개념을 리터럴로 사용하고 있다.

 

ex) 3.14, 2021, 'A'

 

리터럴 중 정수형 리터럴에 따로 점미사를 붙이지 않는다면 int타입의 리터럴이다. long타입의 리터럴을 사용하고 싶다면 접미사에 "L" 또는 "l"을 붙여주면 된다.

ex) 1000L; , 10000l;

 

그리고 JDK1.7부터 정수형 리터럴 중간에 "_"구분자를 넣어 편히 읽을 수 있게 하였다

ex) 100_000_000L;

 

실수형에서는 float타입의 리터럴에는 "f"또는 "F"를 붙이고 double타입의 리터럴에는 "D" 또는 "d"를 붙인다.

double타입 리터럴에서는 접미사를 생략할 수 있다.

ex) 3.14f, 2.2F..

ex) 123.22D, 231.11d ...(d, D 생략가능)

f를 생략하면 double형으로 인식하기 때문에 float타입의 변수에 저장하려 하면 컴파일 에러가 발생한다.

 

 

문자 리터럴과 문자열 리터럴

'A'와 같이 작은따옴표로 문자 하나를 감싼 것을 "문자 리터럴"이라고 한다. 두 문자 이상은 큰 따옴표로 감싸야 하며 "문자열 리터럴"이라고 한다.

 

ex) char ch = 'A';

     String name = "JAVA";

 

문자열 리터럴은 ""(아무것도 넣지않은 것)와 같은 빈문자열을 저장가능하지만, 문자 리터럴은 반드시 하나의 문자가 있어야 한다.

 

ex) String str = "";

     char ch = '' // 에러

     char ch = ' ' //공백 문자 가능.

 

 

 

참고서적 : Java의 정석3rd Edition, 남궁 성