티스토리 뷰

기본형, 참조형 parameter

  • 참조형 예시1

    class Data { int x; }
    class ReferenceParamEx {
        public static void main(String[] args) {
        	Data d = new Data();
        	d.x = 10;
       		System.out.println(d.x); // prints 10
        
       		change(d); // pass d
       		System.out.println(d.x); // After change, prints 1000
        }
        static void change(Data d) {
            d.x = 1000;
        }
    }
    

    change메서드의 매개변수가 참조형이라서 값이 아니라 값이 d가 저장된 주소를 change메서드에게 넘겨주기 때문에, 메서드를 호출한 뒤 d.x값이 변경된다.

     

  • 참조형 예시2

    class ReferenceParamEx2 {
        public static void main(String[] args) {
        	int[] x = {10}; // 길이가 1인 배열 선언 및 초기화
       		System.out.println(x[0]); // prints 10
        
       		change(x); // pass x(array)
       		System.out.println(x[0]); // After change, prints 1000
        }
        static void change(int[] x) {
            x[0] = 1000;
        }
    }
    

 

  • 참조형 예시3

    class ReturnTest {
         public static void main(String[] args) {
             ReturnTest r = new ReturnTest();
             
             int result = r.add(3,5);
             System.out.println(result); // prints 8
             
             int[] result2 = {0}; // 배열 생성 및 0으로 초기화
             r.add(3,4,result2);
             System.out.println(result2[0]);
             
             int add(int a, int b) {
                 return a + b; 
             }
             void add(int a, int b, int[] result) { // 반환값이 없는 메서드 
                 result[0] = a + b;
             }
         }
    }
    

    반환값이 없는 add메서드를 응용하면, 원래 하나의 값만 리턴할 수 있는 메서드를 여러 개 값을 반환받는 효과를 낼 수 있다.

 

  • 기본형

    class Data { int x; }
    class ReferenceParamEx {
        public static void main(String[] args) {
        	Data d = new Data();
        	d.x = 10;
       		System.out.println(d.x); // prints 10
        
       		change(d.x);
       		System.out.println(d.x); // After change, prints 10 
        }
        static void change(int x) {
            x = 1000;
        }
    }
    

    change메서드가 호출되면서 d.x가 change메서드의 매개변수 x복사된다. 그 복사된 값이 1000으로 변경된 것이기 때문에 원본 d.x는 변경되지 않는다.

 

+) Javascript 메뉴의 pass by reference 글 참조

 

참조형 return

  • 예시

    class Data { int x; }
    class ReferenceParamEx {
        public static void main(String[] args) {
        	Data d = new Data();
        	d.x = 10;
       		System.out.println(d.x); // prints 10
        	
       		Data d2 = copy(d); // 반환한 tmp값을 참조변수 d2에 저장 
       		System.out.println(d2.x); // prints 10
        }
        static Data copy(Data d) { // 반환 타입이 Data. 객체 주소를 반환한다. 
            Data tmp = new Data();
            tmp.x = d.x; // 값을 복사
            return tmp; 
        }
    }
    

    copy메서드의 반환타입이 Data이므로, 호출 결과를 받아서 저장하는 변수타입도 Data여야 한다(d2).

    copy메서드 내에 생성한 객체를 메인메서드에서 사용하려면 새로운 객체의 주소를 반환해줘야 한다. 그렇지 않으면 copy메서드가 종료되면 새로운 객체의 참조가 사라져 더 이상 사용할 수 없기 때문이다.

'Java' 카테고리의 다른 글

클래스 상속, 포함  (0) 2019.05.07
메서드 호출  (0) 2019.05.07
변수의 종류(클래스변수, 인스턴스변수, 지역변수)  (0) 2019.05.07
this(), this  (0) 2019.04.30
Getter and Setter  (0) 2019.04.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함