새발블로그

레퍼런스 타입 매개변수 본문

Problem Solving/개념

레퍼런스 타입 매개변수

EUG 2025. 7. 4. 17:29

레퍼런스 타입 매개변수 (Reference Type Parameter)

Java에서 함수에 값을 넘길 때, 기본형(Primitive Type)과 참조형(Reference Type)은 작동 방식이 다르다.

1. 기본형(Primitive Type)과 참조형(Reference Type)

구분 예시 전달 방식 원본 변화
기본형 int, double, boolean 등 값 자체를 복사 ❌ 변화 없음
참조형 List<T>, int[], Map<K,V> 등 참조(주소)를 복사 ✅ 원본이 함께 수정됨

2. 참조형 매개변수의 특징

참조형 데이터는 객체의 주소값이 함수로 전달된다.

함수 내에서 이 객체를 수정하면, 호출한 곳의 원본 객체도 함께 수정된다.

예제: 리스트 요소 증가시키기

import java.util.*;

public class IncrementElements {
    // 리스트의 모든 요소를 1 증가시키는 함수
    public static void incrementElements(List<Integer> data) {
        for (int i = 0; i < data.size(); i++) {
            data.set(i, data.get(i) + 1);
        }
    }

    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3));

        incrementElements(numbers); // 함수 호출

        System.out.println("원본 리스트: " + numbers);
    }
}

출력 결과:

원본 리스트: [2, 3, 4]

 

3. 원본을 보호하려면?

원본 데이터를 변경하지 않으려면, 함수 호출 전에 깊은 복사(Deep Copy)를 해야 합니다.

import java.util.*;

public class IncrementElements {
    public static void incrementElements(List<Integer> data) {
        for (int i = 0; i < data.size(); i++) {
            data.set(i, data.get(i) + 1);
        }
    }

    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3));

        // 복사본 생성
        List<Integer> copiedNumbers = new ArrayList<>(numbers);

        incrementElements(copiedNumbers); // 복사본 수정

        System.out.println("원본 리스트: " + numbers);
        System.out.println("복사본 리스트: " + copiedNumbers);
    }
}

출력 결과:

원본 리스트: [1, 2, 3]
복사본 리스트: [2, 3, 4]

 

'Problem Solving > 개념' 카테고리의 다른 글

그래프 개념  (0) 2025.07.04
재귀  (0) 2025.07.04
변수 유효범위  (0) 2025.07.04
HashSet  (0) 2025.07.04
해시테이블  (0) 2025.07.04