728x90
CallByValue : 값을 전달
값 (리터럴)을 전달. 기본자료형과 string 에 해당한다.
public void juiceCafe1(String s) {
System.out.println("매개변수 테스트");
s = "망고수박";
System.out.printf("무슨 주스를 원하시나요 ? %s %n", s);
System.out.println();
}
String kind = "바나나";
ex03.juiceCafe1(kind);
System.out.println(kind);
값은 전달해준 kind 에는 영향을 주지 않는다. kind 의 리터럴만 전달했기 때문(CallByValue)
CallByReference
주소값을 전달
매개변수로 car 와 int를 받는 메서드
public int carTast(Car car, int speed) {
System.out.println("carTest 메서드**************");
System.out.println("car->"+ car);
car.brand ="BMW";
car.grade='D';
System.out.println("car (brand / grade 변경 후 )->"+ car);
System.out.println("carTest 메서드**************");
return car.speed + price ;
}
Car 타입의 인스턴스가 필요하다.
Car myCar = new Car();
ex03.carTast(myCar, 10);
-메인 메서드의 사용
Car myCar = new Car();
myCar.brand ="기아";
myCar.grade='K';
System.out.println("main에서 수정한 mycar 1"+myCar);
System.out.println("ex03.carTast(myCar, 10 호출");
System.out.println(ex03.carTast(myCar, 10)); // 메서드 호출
System.out.println("ex03.carTast(myCar, 10); 호출후 mycar 2"+myCar);
CallByReference
진행에 대한 정리
1. 힙의 영역에 메모리 준비
Car myCar = new Car();
2. 힙의 영역에 있는 myCar 의 값을 변경
myCar.brand ="기아";
myCar.grade='K';
3. 주소부를 인자를 통해 전달.
System.out.println(ex03.carTast(myCar, 10));
4. 메서드 내에서 인자로 전달받은 주소부의 값들을 변경.
public int carTast(Car car, int speed) {
System.out.println("carTest 메서드**************");
System.out.println("car->"+ car);
car.brand ="BMW";
car.grade='D';
즉 메서드를 통해 정렬메서드를 만들어도,
배열을 참조받아서 배열의 원본이 정렬이 변경될 수 있겠다.
즉 , 메서드를 통해 리턴하지 않아도 메서드를 사용함으로도 내부 주소의 값이 변경 될 수 있음을 의미
또 다른 방법으로는 ,
인스턴스 생성과 함께 인자로 활용도 가능하다.
System.out.println(ex03.carTast(new Car(), 10));
메서드에서 모든 처리가 이루어지고 ,
인자로서 사용만 한다면 굳이 이름값이 필요하지 않을 것이다.
Car 를 일회성 매개변수로만 사용하는 경우 적당하다.
'Developer > JAVA' 카테고리의 다른 글
JAVA , 초기화 블럭(init) 과 생성자 , this (0) | 2024.08.04 |
---|---|
JAVA , 팩토리얼 연산 (Factorial)과 static (0) | 2024.08.03 |
JAVA ,Method OverLoading 오버로딩에 대하여 (0) | 2024.08.03 |
JAVA, 클래스의 멤버 메서드 , 지역변수와 전역변수 (0) | 2024.08.02 |
JAVA , 클래스와 인스턴스(객체), 객체의 의미 , 나만의 클래스 만들기 (0) | 2024.08.02 |