📚 참고
자바의 정석 기초편 (객체지향개념만)

 

 

 

 

 

 

 

매개변수

 

  • 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다. (read only)
  • 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다. (read & write)

 

 

 

 

 

 

 

기본형 매개변수

 

  • change 메서드를 호출할 때, d.x의 값을 매개변수로 복사만 할 뿐 d.x의 값 자체를 바꿀 수 없다.
  • System.out.println("main() : x = " + d.x);
    • println이 호출 되기 전, 괄호 안에 있는 연산이 먼저 수행  ➡  d.x가 먼저 읽힌다.

 

class Data { int x; }

class Ex6_6 {
    public static void main(String[] args) {
        Data d = new Data();
        d.x = 10;
        System.out.println("main() : x = " + d.x);

        change(d.x);
        System.out.println("After change(d.x)");
        System.out.println("main() : x = " + d.x);
    }

    static void change(int x) {  // 기본형 매개변수
        x = 1000;
        System.out.println("change() : x = " + x);
    }
}

 

 

 

 

 

 

 

참조형 매개변수

 

  • change 메서드를 호출할 때, 객체 주소 값을 매개변수로 복사하기 때문에 d.x의 값을 변경할 수 있다.

 

class Data2 { int x; }

class Ex6_7 {
    public static void main(String[] args) {
        Data2 d = new Data2();
        d.x = 10;
        System.out.println("main() : x = " + d.x);

        change(d);
        System.out.println("After change(d)");
        System.out.println("main() : x = " + d.x);
    }

    static void change(Data2 d) { // 참조형 매개변수
        d.x = 1000;
        System.out.println("change() : x = " + d.x);
    }
}

 

 

 

 

 

 

 

참조형 반환타입

 

  • 반환 타입이 참조형이면 객체의 주소를 반환

 

class Data3 { int x; }

class Ex6_8 {
    public static void main(String[] args) {
        Data3 d = new Data3();
        d.x = 10;

		// copy()
        // 1. static 키워드가 붙어있는 메서드이기 때문에 객체 생성 없이도 메서드 호출 가능
        // 2. 같은 클래스 내에 있는 메서드이기 때문에 객체 생성 없이도 메서드 호출 가능
        Data3 d2 = copy(d); 
        System.out.println("d.x ="+d.x);
        System.out.println("d2.x="+d2.x);
    }

    static Data3 copy(Data3 d) {
        Data3 tmp = new Data3();
        tmp.x = d.x;
        return tmp;   // 복사한 객체의 주소를 반환한다.
    }
}

 

 

 

 

 

 

 

 

 

 

'JAVA > 객체지향개념' 카테고리의 다른 글

오버로딩 (Overloading)  (0) 2021.03.11
Instance 메서드 vs Static 메서드  (0) 2021.03.11
호출 스택 (Call Stack)  (0) 2021.03.07
메서드 (Method)  (0) 2021.03.06
선언위치에 따른 변수종류  (0) 2021.03.06