기본형 변수와 참조형 변수

 

 

기본형 변수와 참조형 변수

 

 

 

 

기본형 변수(원시형 변수)에 대해서

 

 

우선 JAVA에서 쓰이는 기본형 변수타입은 8가지가 존재한다

아마 우리가 자주써봤고 익숙하게 와닿을만한 변수들인데

 

boolean, char, byte, short, int, long, float, double 이렇게 8가지의 기본형 타입들이 존재한다

이 8가지를 제외한 모든 변수는 참조형이라고 보면 된다

 

위에 8가지를 좀더 정리해보자면

 

논리형 : boolean

문자형 : char

정수형 : byte, short, int, long

실수형 : float, double

 

논리형은 true(참), false(거짓)을 저장할수있는데 1과 2를 비교하는 문법이있을때 저장타입은 논리형으로 주게되면

1 == 2 일경우 false를 반환하고 1 != 2 일경우에는 true 반환하는 특징을 가지고있다

 

그다음 char은 말그대로 문자를 저장하는 타입으로 주의해야할껀 문자'열'이 아니라 문자이다

A나 B처럼 하나의 문자만 가지는것을 문자라고 하고 이것들이 모여서 문자열이 만들어지는 것이다

참고로 우리가 자주쓰는것중에 문자열을 저장하는 String이라는 타입은 참조형이다 기본형이아니다

 

만약 String에 대해서 좀더 자세히알고싶다면 여기를 클릭해보자

 

그다음 정수형타입은 종류가 많은데 차이점은 각각 저장할수있는 범위 다르다고 볼수있다

byte는 -128 ~ 127

shrot는 -32768 ~ 32767

int -2,147,483,648 ~ 2.147,483,647

 

이런식으로 저장할수있는 범위들이 다르다

옛날 메이플이란 게임에서 흔히 맥뎀이라고 해서 21억이 최대였던 시절이 있었는데

그때는 데미지 표시를 int형으로 저장해뒀기떄문에 최대 맥뎀이 21억 이였던것을 알수있다

 

그다음 실수형은 말그대로 실수(2.14, 32.14) 같은 소수점이있는 값을 저장하는 타입을 말한다

 

 

 

 

기본형의 크기

 

타입/사이즈 1byte 2byte 4byte 8byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

 

 

기본형들은 각각 다른크기를 가지고있는데 현재 컴퓨터의 운영체제들은 거의다 64비트이므로

1byte -> 8bit가 된다

 

8bit는 2^8이기때문에(각 자리수에 0과 1일 저장한다) 256개의 크기가 만들어진다

위에서 byte는 -128~127 범위를 가지고있다고했는데 그이유가 여기서나온다

0을 포함해서 음수와 0을 포함해서 256개의 크기가 이렇게해서 만들어진것이다

 

다른 정수형타입들도 똑같이 계산해보면 동일하게 나온다

 

 

 

 

기본형과 참조형의 차이점

 

그렇다면 기본형과 참조형의 차이점은 과연무엇일까?

일단 기본형은 실제로 있는값인 리터럴은 저장하게 되는데 참조형은 주소값을 저장한다

주소값을 저장한다는게 무슨뜻인지는 아래에 가서 좀더 설명해보겠다

 

우선 우리가 변수에 값을 저장하게 되면 메모리에 이값이 올라가게되는데

메모리에는 Stack과 Heap 영역이라는것이 존재한다

 

기본형은 자기가 가진 값을 가지고 만약 a라는 변수에 Long타입을 저장한다면 Stack영역에

8byte의 크기를 가진 a라는 저장공간이 생기고 그곳에 값이 실제 존재하는 리터럴값이 존재하게된다

 

참조형도 얼추비슷한데

 

Hello hello = new Hello("Hello World")

 

만약 Hello라는 참조형타입을 선언하게되면 우선 hello 라는이름을 가진 변수가 Stack영역에 들어가고

Hello 라는 객체가 Heap영역 0x100번지에 들어가게된다

그리고 Stack에있는 hello는 Heap영역에있는 Hello라는 객체를 가르키게된다

 

만약 Heap과 Stack 메모리 구조에대해서 좀더 자세히알고싶다면 여기를 클릭해보자

 

정리해보면 기본형변수는 8가지가 존재하고 그외에 타입은 모두 참조형이라고 볼수있다

기본형타입과 참조형타입의 큰 차이점은 기본형은 리터럴(실제존재하는값)을 저장하고 참조형은 주소값을 저장한다

그리고 주소값은 Heap에있는 객체를 가르킨다고 볼수있다

 

물론 기본형8가지를 참조형처럼 만들어주는 Wrapper 클래스라는것도 존재하는데

궁금한 사람은 검색해보시길 바란다