Language/Java

참조형과 래퍼클래스

용용띠용 2025. 4. 15. 10:49

참조형

: 값이 저장되어 있는 곳의 메모리 주소를 저장하는 타입

- 해당 타입의 변수(참조형 변수)는 참조값의 주소를 저장

 

특징

- null 개념 존재

- 변경 시 동기화

 

예시

- 객체, 배열, 문자열 등

 

메모리 구조

- 힙 영역에 참조값 저장 후 참조

 

파라미터: 참조형변수

- 출력값: 클래스명@해시코드     // 객체 식별자o     실제 메모리 주소x

 

파라미터: 참조형변수.속성

- 출력값: 값

Person p = new Person("Stever");
System.out.println(p.name);	//p는 Person 객체의 주소를 저장, 그 주소의 name 필드의 값을 출력
System.out.println(p);	//Person 객체의 주소를 출력(물리적 메모리 주소는 아니고 객체 식별 정보)

 


 

 

기본 자료형 래퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

래퍼클래스

: 기본 자료형을 객체로 감싸는 클래스

 

래퍼클래스 변수(참조형 변수)

- 출력값: 값

- 이유: toString() 오버라이딩해서 객체가 가진 값을 그대로 출력하도록 함

// 변수는 주소를 저장

 

선언 및 할당

1) 래퍼클래스 변수명 = 값; // 오토박싱 덕분에 2)의 방식 필수x

2) 래퍼클래스 변수명 = new 래퍼클래스(값);     // 오토박싱: 위 코드를 내부적으로 수행

 

필요성

: 기본형과 달리 속성, 기능을 제공해 데이터 처리 용이

 

커스텀 래퍼클래스(Integer)

class customInteger{
	int value;
    
	CustomInteger(int value){
    	this.value = value; //this.value는 customInteger의 value, value는 파라미터
    }

	int getValue(){
    	return value;
    }
	
    void setValue(int value){
    	this.value = value;
    }

	@Override
    public String toString(){
    	return String.valueOf(value);
    }
}

 

오토박싱: 기본형 -> 래퍼 클래스

int i = 10;
Integer j = i;	// Integer j = new Integer(n) 또는 Integer.valueOf(n)과정이 컴파일러에 의해 내부적으로 수행

 

오토언박싱: 래퍼 클래스 -> 기본형

Integer i = 10;
int j = i;	//int j = i.intValue()과정이 컴파일러에 의해 내부적으로 실행됨

 

NullPointerException

: 객체가 null인 상태인데 메서드 호출을 시도할 때 발생하는 문제

Integer i = null;
//intValue()메서드 호출 => NullPointerException 발생
int j = i;

 

- 해결책

1) null 체크 후 null이 아닌 경우에만 사용

2) Optional 사용(null )

- Optional<Integer>: 정수형이 있을 수도 없을 수도 있음을 의미

Integer i = null;
Optional<Integer> opt = Optional.ofNullable(i);
int j = opt.orElse(0); // null이면 0으로 처리

 


 

기본형

: 자바에서 미리 형식을 정의하여 제공하는 타입

- 기본값 존재(null x)

 

필요성

: 빠른 작업, 연산에 용이(래퍼 클래스는 연산 시 추가작업 발생하므로 느림)