반응형
public class DataTest {//0928-2 //class이기 때문에 멤버변수, 함수 정의 가능
//메소드의 매개변수가 기본형인지, 참조형인지에 따라 값을 보내는지 주소값을 보내는지 다름
public static void main(String[] args) {
// Data d = new Data(); //객체 생성
//==========기본형 변수 (기본형은 객체의 값자체를 넘긴 것)
// d.x = 10;
// System.out.println(d.x);
//
// change(d.x); //d는 change함수로 넘어간 매개변수와 무관한 main 메소드의 지역변수
// System.out.println(d.x); //따라서 호출한 쪽의 원본 데이터는 바뀌지 않는다. 지역변수이기 때문에 =값의 복사
//===========참조형 변수
// d.x=10; //d는 주소값 .x는 그 주소값의 변수로 접근
// System.out.println(d.x);
//
// change(d); //메소드내에서 정의된 지역변수(ox100같은 Data class의 주소값)
// System.out.println(d.x);
//d.x = 5000;
//=========================================================//리턴타입을 참조형으로 갖는 메소드
Data d = new Data(); //ex.5x100이라는 주소값이 있다
d.x =10;
Data d2 = copy(d);//Data타입을 가진 변수를 보내야 하니까 d
//참조하는 위치가 다르다
System.out.println(d.x);
System.out.println(d2.x);
}
//==========기본형 메소드
// static void change(int x) {// 값 복사 //동적 바인딩 : 필요시 메소드 자동 할당(할당과 소멸을 반복)
// x = 1000;
// System.out.println("change() : " + x);
// }
//==========참조형 메소드
// static void change(Data d) {// 매개변수 Data d는 주소값을 받는다 //여기 지역변수도 지역변수로 밖에서 사용할수 없다
// d.x=1000;
// System.out.println("change() : "+ d.x);
// //참조형은 주소값으로 해당 주소에 있는 객체자체의 값을 바꾸기 때문에 원래 x값 자체가 바뀜
// }
//=========================================================//리턴타입을 참조형으로 갖는 메소드(참조형을 리턴할 땐 반드시 return 있어야함)
static Data copy(Data d) { //d는 주소값
Data tmp = new Data(); //각각 main-d, copy-tmp 가지는 지역변수
tmp.x = d.x;
return tmp; //tmp가 가지고 있던 5x200주소값이 return
}
}
public class Data {//0928-2
int x;
}
-----------------정리
public class DataTesttest {
public static void main(String[] args) {
// //===============================================기본형 변수(기본형은 객체의 값자체를 넘긴 것)
// call-by-value
// Data d = new Data();
// d.x = 10;
// System.out.println(d.x);
//
// change(d.x); //d는 change함수로 넘어간 매개변수와 무관한 main 메소드의 지역변수
// System.out.println(d.x); //따라서 호출한 쪽의 원본 데이터는 바뀌지 않는다. 지역변수이기 때문에 =값의 복사
//
// }
//
//
// static void change(int x) { // 값 복사 -> change가 실행되면 x라는 매개변수가 생성되고 d.x의 값10으로 초기화.d.x는 관련이 없어짐.
// x = 1000;
// System.out.println("change() : " + x);
// //===============================================참조형 변수(기본형은 객체의 값자체를 넘긴 것)
//(메소드의 매개변수가 클래스 타입인 경우 : 주소를 복사)
// call-by-reference
Data d = new Data();
d.x = 10; //d는 주소값 .x는 그 주소값의 변수로 접근
System.out.println(d.x);
change(d); //메소드내에서 정의된 지역변수(ox100같은 Data class의 주소값)
System.out.println(d.x);
d.x = 5000;
}
static void change(Data d) {// 매개변수 Data d는 주소값을 받는다 //여기 지역변수도 지역변수로 밖에서 사용할수 없다
d.x=1000;
System.out.println("change() : "+ d.x);
//참조형은 주소값으로 해당 주소에 있는 객체자체의 값을 바꾸기 때문에 원래 x값 자체가 바뀜
}
}
반응형
'java' 카테고리의 다른 글
0928_참조형 변수 (배열 타입) (0) | 2022.09.28 |
---|---|
0928_리턴타입을 참조형으로 갖는 메소드 (0) | 2022.09.28 |
0928_메소드 (0) | 2022.09.28 |
0927_클래스, 변수 (0) | 2022.09.27 |
0927_이중배열(빙고게임) (0) | 2022.09.27 |