[작성일: 2023. 01. 25]
기본형 매개변수(8개)
- 변수의 값을 읽기만 할 수 있음 (Read only)
- 변경 불가
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);
}
Study
- 객체 생성
- 참조변수 d가 생성됨
- 참조변수 d가 가리키는 객체 x의 값이 10이 됨
- d.x = 10
- change 메서드 호출
- d.x의 값이 메서드 int x에 저장됨(복사 x)
- change 메서드 실행, x가 둘 다 지역변수고 변수명이 같지만 저장공간이 다르기 때문에 문제 되지 않음
- x에 1000을 대입
- change 메서드의 println x는 가까운 x의 값을 출력함
- 메서드가 종료되면 호출한 곳으로 돌아감
- 다시 main메서드가 실행상태가 됨
참조형 매개변수
- 참조형 매개변수: 변수의 값을 읽고 변경할 수 있음 (Read & Wirte)
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
- 참조형 매개변수는 change 메서드 내에서 값을 바꾸면 main 메서드의 객체 값을 바꿀 수 있음.
- 객체를 다룰 수 있도록 객체의 주소를 준 것.
참조형 반환타입
class Data3 { int x; }
class Ex6_8 {
public static void main(String[] args) {
Data3 d = new Data3(); // 멤버는 int x
d.x = 10;
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; // d.x의 값을 tmp.x에 복사
return tmp; // 복사한 객체의 주소 반환 or 객체 반환
}
}
⬇
d.x = 10
d2.x = 10
- 반환타입과 변수의 타입이 일치해야 함
- 반환타입이 참조형일 경우 변수의 타입도 참조형이어야 함
- static 메서드가 같은 클래스 안에 있기 때문에 copy 앞에 참조변수를 생략함 (ex: "e."copy(); e. 생략)
- static 메서드는 객체 생성 없이 호출 가능
🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.