Day12 - 변수의 기본타입과 참조타입

2021. 3. 3. 18:32JAVA 공부

이번 포스팅에서는 기본타입과 참조타입을 알아 봅시다 ~

 

기본타입

기본타입은 이미 저희가 알고 있는 타입 입니다 ~

바로... byte, short, int, long, float, double, char, boolean 이 있죠

 

차이를 이해하기 위해서는 메모리 저장 방식을 알아야 하는데요?

바로 Stack(스택) 과 hip(힙) 입니다.

 

int i = 10; 이라고 생각을 해봅시다. 이 int형 변수 i의 값 10은 Stack(스택)에 저장이 됩니다.

그 외에도 위에 있는 기본타입 들은 스택 영역에 변수명과 값이 저장이 됩니다.

그런데, 참조타입은 좀 다릅니다.

 

참조타입

참조타입은 배열, 클래스, 인터페이스 가 있는데요

여기서 인터페이스는 저희가 아직 안배운거니까 없다고 칩시다

 

참조타입은 데이터의 값이 힙 영역에 저장이 됩니다.

그리고 스택 영역에는 주소를 저장 시키죠

출력을 해보니까 이렇게, 객체 a와 o는 이상한 값이 나오는게 보이죠? 이게 주소값 입니다.

그리고, 이렇게 비슷한 값을 출력하는 게 또 있었어요. 배열을 생각해 보세요 ~

 

즉 기본 타입은 값을 스택영역에 저장하고, 참조 타입은 값을 힙 영역에 저장 합니다.

왜 그렇게 나누어 두었냐구요?

힙 영역에 저장되는 데이터들은 상대적으로 크기가 크기 때문입니다.

예를 들어서 클래스를 만들었다고 생각을 해봅시다.

클래스 안에는 멤버변수들이 있고, 메서드가 있습니다.

그러면 클래스는 메모리 크기가 몇이 할당이 될까요?

만든 멤버변수 들과 메서드에 따라서 달라지겠죠?

 

하지만 스택 영역에는 비교적 작은 크기의 변수들이 저장이 되고, 이미 크기가 정해져 있죠

 

좀 더 들어가서, 사실 String 도 클래스(참조타입)에 속합니다.

실제로는 char형 문자들이 모여서 배열로 만들어 진거죠

하지만, 문자열은 자주 사용하기 때문에 바로 사용을 해도 주소값이 아닌 문자열을 사용하기로 약속이 되어 있는 겁니다.

String을 좀 확인 해 봅시다.

String도 하나의 클래스 이기 때문에 이렇게 new String() 생성자를 사용할 수 있습니다.

인스턴스화(객체화) 해도 똑같이 사용할 수 있는 걸 알 수 있네요?

하지만, 실제로 String은 같은 문자열을 넣어줬을 때 같은 주소값을 가지지만, 객체화를 하면 서로 다릅니다

str1 과 str2 는 같고, str1, str2 와 str3은 다릅니다.

여기서 == 으로 비교를 해주었는데, 이건 주소값을 비교하는 겁니다.

 

그래서 같은 문자열인지 확인을 하기 위해서는 equals() 를 사용해 주어야 합니다.

이렇게 기본타입과 참조타입을 알아 보았습니다.

 

고생하셨습니다

'JAVA 공부' 카테고리의 다른 글

Day12 - 오버라이딩  (0) 2021.03.04
Day12 - 클래스의 상속  (0) 2021.03.03
Day12 - 패키지 와 import  (0) 2021.03.03
Day12 - Garbage Collecting  (0) 2021.03.03
Day11 - 클래스 생성자  (0) 2021.03.02