IT/Java

[JAVA 스터디][2주차_1] primitive, reference 타입, 리터럴, 상수 정리

jaewon_sss 2020. 11. 21. 16:58
반응형

2주차(1) - 목차

1. 자바 데이터 타입
- 프리미티브타입
- 레퍼런스 타입

2. 리터럴과 상수





JAVA 의 데이터 타입은 크게 프리미티브 타입(Primitive type)레퍼런스(Reference type) 타입으로 나눠집니다. 


각각의 타입으로 변수 선언시 메모리에 공간이 할당됩니다.


이 때,  


프리미티브 타입은 메모리를 공간에 직접 데이터를 담습니다.
          
레퍼런스 타입은  다른 곳을 참조하는 주소값을 담습니다.



차이점은 "메모리 참조 타입"

(출처: 뇌를 자극하는 Java프로그래밍 - 한빛미디어)


                  







Primitive type



 

타입 

할당되는 메모리 크기 

 default값

데이터의 표현 범위 

정수형

byte 

1 byte 

-128 ~ 127 

 

short 

2 byte 

-32,768 ~ 32,767 

 

int 

4 byte 

 

 

long 

8 byte 

0l

 

문자형 

char 

2 byte (유니코드) 

'\u0000' 

0 ~ 65,535 

실수형

float

4 byte 

0.0f 


 

double 

8 byte 

0.0 

 

논리형 

boolean 

1 byte 

false 

true, false 




- default 값이 있기 때문에 Null 이 존재하지 않습니다. (초기화 할 경우, default값으로 자동 초기화)

- 실제 값을 저장하는 공간으로 Stack 메모리에 저장됩니다.







Reference type


타입 

default값 

할당되는 메모리 크기 

클래스(Class) 

Null 

4 byte (객체의 주소값) 

인터페이스(Interface)

Null 

4 byte (객체의 주소값)

배열(Array)

Null 

4 byte (객체의 주소값)

열거(Enumerate)

Null 

4 byte (객체의 주소값)




- 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 가변적이기 때문에 Heap 메모리에 저장됩니다.

- 초기화 할 경우, Null로 초기화





Literal VS Constant


먼저, 리터럴과 상수 둘 다, 변하지 않는 고정된 값을 의미합니다.


상수는 변하지 않는 변수를 뜻하고, 그 데이터는 숫자가 올 수도 있지만 클래스나 구조체 같이 기본형에서 파생된 객체나 유도형같은 데이터를 넣을 수 있습니다. 

값을 한번 입력하면 그 값을 다시는 바꿀 수 없는 것을 뜻합니다. 


ex) final int DAY_OF_WEEK = 7;


상수를 만들기 위해서는 c에서는 const, Java는 final 지시자를 사용합니다.

메소드 영역에 저장됩니다.

또한 상수의 이름은 관습적으로 대문자와 언더스코어( _ ) 를 사용합니다.






리터럴은  데이터 그 자체를 의미합니다. (변수에 넣는 변하지않는 데이터)


int a = 1;


int 앞에 a는 변수이고, 1은 리터럴입니다. int 앞에 final을 붙이면 a는 상수가 됩니다.

즉, 1과 같이 변하지 않는 데이터(boolean, char, double, long, int, etc...)를 리터럴(literal)이라고 부릅니다.

보통 인스턴스(클래스 데이터)는 동적으로 사용되기 위해 생성되기 때문에 리터럴이 될 수 없습니다.



하지만 프로그래밍에서 객체 리터럴이라는 표현이 있습니다.

데이터가 변하지 않도록 설계한 클래스를 불변 클래스(immutable class)라고 하는데 해당 클래스는 한번 생성하면 객체 안의 데이터가 변하지 않습니다. 변할 상황이면 새로운 객체를 만들어줍니다.

자바 String, Color 같은 클래스가 그 예입니다.

따라서, 우리는 "abc"와 같은 문자열을 자바에선'객체 리터럴' 짧게는 '리터럴'이라고 표현하는 것입니다.




정리하자면 상수는 변하지 않는 변수를 의미하며(메모리 위치) 메모리 값을 변경할 수 없습니다.


리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)를 의미합니다.


보통은 기본형의 데이터를 의미하지만, 특정 객체(Immutable class , VO class)에 한에서는 리터럴이 될 수 있습니다.




2주차(2) 로 ... 

반응형