[Java] OOP_기본형 매개변수와 참조형 매개변수

jeong·2021년 5월 23일
0

Java 자바

목록 보기
13/28
post-custom-banner

기본형 매개변수와 참조형 매개변수

변수의 타입에는 2가지가 있다. 기본형과 참조형

Velog 참고 : 변수의 기본형 타입 8개

기본형 매개변수

변수의 값을 읽기만 할 수 있다. (only read만 가능)

class Data{int x;}

class Ex {
    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);
    }
}

//결과값 
main() : x = 10
change() : x = 1000
After change(d.x)
main() : x = 10

위 코드의 흐름

들은대로 적기 (자바의 정석 62)
=> 다시 듣고 고칠 예정
main이 스택에 올라감 - 프로그램 실행
main에 참조변수 d 생성되고 Data 객체를 생성

class Data에는 멤버 int x 하나 존재
x의 주소값은 0x100
Data값이 변수 d에 저장, d의 주소값도 0x100이 된다
d.x, 즉 참조변수 d가 가리키는 x 값은 10
d.x 값을 println으로 표현하면 10
=> main() : x = 10 출력 //6번째 줄

change 메소드 호출 //(11번째 줄로 이동)
change int x에 d.x 값 10이 대입된다 //(현재 change int x값은 10)
그 다음 change 메소드의 문장 실행, x=1000 //지역변수x에 1000이 저장된다 (change int x값은 1000)
=> change() :x = 1000 출력 //13번째 줄, 여기서 x는 제일 가까운 x가 출력되기 때문에 지역변수x가 출력된다

change 문장을 다 수행했으니 호출한 곳으로 돌아간다 -change메소드 사라지고 밑에 대기하고 있던 메인메소드 실행
After change(d.x) 출력 //8번째 줄 - println 메소드 실행
After change가 출력되고 println 메소드 종료
메인 메소드로 돌아가고 새로운 println 메소드 실행, main 메소드 x값이 출력된다 아까 x값은 10
=> main() : x = 10 출력 //9번째 줄


참조형 매개변수

변수의 값을 읽고 변경할 수 있다. (read & write 가능)

class Data2{int x;}

class Ex2 {
    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);
    }
}
//결과값 
main() : x = 10
change() : x = 1000
After change(d)
main() : x = 1000

위 코드의 흐름

들은대로 적기 (자바의 정석 63)
=> 다시 듣고 고칠 예정
main이 스택에 올라감 - 프로그램 실행
main에 참조변수 d 생성되고 Data2 객체를 생성

class Data에는 멤버 int x 하나 존재
x의 주소값은 0x100
Data값이 변수 d에 저장, d의 주소값도 0x100이 된다
d.x, 즉 참조변수 d가 가리키는 x 값은 10
d.x 값을 println으로 표현하면 10
=> main() : x = 10 출력 //6번째 줄

change 메소드 호출 //(11번째 줄로 이동)
change Data2 d, d가 메인메소드의 d.x를 가리킨다 //d가 메인 메소드 d.x와 같은 주소값0x100, 값 10 가진다
그 다음 change 메소드의 문장 실행, 참조변수 d가 가리키는 x에 1000을 대입한다 //메인메소드 d.x에 1000이 저장된다
=> change() :x = 1000 출력 //13번째 줄,

change 문장을 다 수행했으니 호출한 곳으로 돌아간다 -change메소드 사라지고 밑에 대기하고 있던 메인메소드 실행
After change(d) 출력 //8번째 줄 - println 메소드 실행
After change가 출력되고 println 메소드 종료
메인 메소드로 돌아가고 새로운 println 메소드 실행, main 메소드 d.x값이 출력된다 아까 d.x값은 1000
=> main() : x = 1000 출력 //9번째 줄

profile
배우는 초보개발자
post-custom-banner

0개의 댓글