본문 바로가기
Java

참조형 타입(reference type)

by Euisaac 2024. 5. 9.

자료형은 기본형과 참조형 2가지로 분류할 수 있다.

 

기본형: 변수가 실제 값(리터럴)을 스택 영역에 저장

 

-구분

정수형 (byte, short, int, long)

실수형 (float, double)

문자형 (char)

논리형(boolean)

 

 

 

참조형(reference type)

-기본형을 제외한 나머지

-참조형 데이터의 값은 힙 메모리 영역에 저장되며

변수에 대입되는 값은 힙 메모리 영역의 주소 값(스택 영역에 저장)

 

-구분

배열(Array): 같은 데이터 타입을 가진 데이터들을 메모리에 연속으로 저장하여 만든 데이터들의 그룹

열거(Enumeration): 계절, 요일 같이 한정된 값만을 가지는 데이터 타입

클래스(Class): 여러 타입의 변수와 메소드를 그룹으로 묶어서 새롭게 정의한 사용자 정의 타입

인터페이스(Interface): 여러 클래스 타입에서 공통으로 사용하는 상수와 메소드를 따로 분리하여 추상화시킨 타입

 

 

 

변수 선언 방법

1. new 연산자 (객체생성연산자)

new 연산자를 통해 힙영역에 데이터를 저장할 공간을 할당받고,

그 공간의 참조(주소) 값을 객체에게 반환한 후 생성자를 호출

클래스 변수 = new 클래스();
String a = new String("Hello!");

클래스: 자료형

변수: 참조값 저장

new: 힙영역에 데이터를 저장할 공간을 할당받고, 인스턴스를 생성하여 그 공간의 참조 값을 리턴

클래스(): 생성자 호출

 

 

 

2. 리터럴 선언

 String b = "Hello!";

참조형 변수를 선언할 때 new 연산자를 이용하지 않고 실제 값(리터럴)을 넣어 선언한 것

자바 자체에서 new 연산자를 이용하지 않아도 리터럴(값) 자체를 대입할 수 있도록 지원

 

 

 

 

new 연산자와 리터럴 대입 방법의 차이점

public class test {
    public static void main(String[] args) {
        String a = new String("Hello!");

        String b = "Hello!";
        String c = "Hello!";

        if (a == b) {
            System.out.println("a == b"); //a와 b가 같은 주소 값을 가르키는 가
        }
        if (b == c) {
            System.out.println("b == c");
        }
    }

}

실행 시 b == c만 출력이 된다.

 

-new 연산자는 기존에 같은 데이터 존재 유무 관계 없이 무조건 생성

-리터럴 대입 방법은 기존의 힙 메모리에 동일한 값이 있는지 확인하고

동일한 값이 있다면 새롭게 객체를 생성하는 것이 아니라 기존 것을 바라보게 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

Java 콘솔 입력 (scanner)  (0) 2024.05.23
Java 증감 연산자  (0) 2024.05.23
Java 표준 입출력 system 클래스  (0) 2024.04.11
java의 접근제어자(Access Modifier)  (0) 2024.04.11