Java Primitive type 과 Reference type

박은빈·2023년 4월 20일
0

자바

목록 보기
15/25

원시 타입(Primitive type)

  • 언어 자체에 내장되어 있는 기본 데이터 타입으로 객체가 아니다
  • 자바에서 기본 자료형은 사용하기 전에 선언되어야 한다
  1. 정수형 - byte(1), short(2), int(4), long(8)
  2. 실수형 - float(4), double(8)
  3. 문자형 - char(2)
  4. 논리형 - boolean(1)

(괄호 안에 수는 byte를 나타낸다)

참조 타입(Reference type)

  • java.lang.Object클래스를 상속하는 모든 클래스들을 말한다
  • 클래스의 인스턴스를 가리키는 데이터 타입이다
  • 참조 타입은 해당 객체의 메모리 주소를 참조 변수에 저장하여 객체에 접근한다
  • 참조 타입은 객체를 생성하는 클래스의 타입으로 선언되며 객체를 생성할때는 new 연산자를 사용한다
List<String> list = new List<>();

위 코드에서 list는 List 클래스의 참조 변수이며 new List<>();는 List 클래스의 인스턴스를 생성하고 그 메모리 주소를 list 변수에 할당한다

  • new 로 인해 생성하는 객체들은 Heap영역에 생성이되고 Garbage Collector가 돌면서 메모리 누수 방지를 위해 정리한다

String

String 클래스는 참조형에 속하지만 기본형처럼 사용이 가능하다
우리가 String을 사용할때도 위와같이 사용한다

String str = "hi"; //가장 많이 사용
String str2 = new String("hi2"); // 참조 타입 형태로 사용

첫번째 방식은 String 리터럴을 사용하여 Heap 메모리 내의 "문자열 상수 풀(String Constant Pool)"에 저장한다
이러한 방식은 이미 존재하는 문자열을 재사용하여 메모리를 절약할 수 있다.

두번째 방식은 new 연산자를 사용하기때문에 String 객체를 Heap메모리에 저장한다.그렇기때문에 첫번째 방법보다 더 많은 메모리를 사용할 수 있다

그렇기때문에 재사용이 많고 메모리 효율성이 높은 String이 필요할때는 첫 번째 방법, 메모리 사용량이 더 많고 문자열 상수 풀과 별개로 객체를 생성하는 경우에는 두 번째 방법을 사용할 수 있다.

또한 String은 불변(immutable)하는 객체이기때문에 값을 변경해도 새로운 클래스 객체를 만들어낸다

String str = "hi";
String str2 = "java";
str = str + str2; // 기존 메모리 공간에 저장되는것이 아닌 새로운 메모리 공간에 hijava가 저장된다
profile
안녕하세요

0개의 댓글