reference type에 대해서...

개발개발·2021년 6월 2일
0

자바에서 data type은 primary type, reference type으로 나뉜다.
두 자료형의 차이야 많겠지만 primary type의 경우 메모리에서 스택에 생기고 reference type의 경우 힙에 생긴다 정도로 기억하고 사용하고 있었다.

이런 기초를 잊어버리고 사용하다보니 이해가 안되는 코드를 만나버렸다.

class Sample{
	public static void main(String[] args) {
    	//test용 자료들
        int number = 10;
        int[] numbers = new int[]{1,2,3};
        
        //#1. primary type 파라미터, 반환값 없음
        primaryConsumer(number);
        System.out.println(number);
        //! 결과(파라미터값에 변화가 없다)
        // 10
        
        //#2. reference type 파라미터, 반환값 없음
        referenceConsumer(numbers);
        Arrays.stream(numbers).forEach(number -> System.out.print(number+","));
        //! 결과(파라미터값에 변화가 있다)
        // 11,12,13,
        
    }
    private static void primaryConsumer(int a){
    	a+=100;
    }
    private static void referenceConsumer(int[] numbers) {
        for(int i=0;i<numbers.length;i++){
            numbers[i] +=10;
        }
    }

}

분명 return문이 없지만 클래스 바깥에 있는 자료의 값이 바뀌었다. 이점에 대해서 궁금해하던 중 reference type의 특징을 떠올려 보고 이해하게 되었다.
바로 reference type은 힙 영역에 생긴다는 것. 그말은 다른 클래스에서 파라미터로 받는 값은 힙에 있는 값을 받은 것이고 힙 내용을 수정하기 때문에 다른 클래스에서도 값이 바뀐대로 사용할 수 있다는 것이다.

그동안 Arrays.sort(List<> list); 메소드 왜그런지도 모르고 썼는데 드디어 알게되니 아주 개운하다.

모르고 계속 사용했으면 언젠가는 String 활용하다 크게 고통받았을 것 같은 느낌이다.

profile
청포도루이보스민트티

0개의 댓글