-
매개변수의 종류(기본형, 참조형)와 차이Java/Java 문법 종합반 강의 정리 2023. 12. 30. 19:50
아래와 같은 메서드들이 있다.
public class Tire { String company; // 타이어 회사 public Tire() {} }
Tire setTire(Tire tireCompany) { tireCompany.company = "KIA"; // 금호 타이어를 전달 받았지만 강제로 KIA 타이어로 교체 tire = tireCompany; return tire; }
double brakePedal(char type) { speed = 0; type = 'P'; // 정지 후 매개변수 type을 어떤 타입으로 전달 받았는지 상관없이 'P'로 고정시키기 changeGear(type); return speed; }
이 메서드들을 사용하여 기본형 매개변수와 참조형 매개변수의 차이를 알아보자.
public class Main { public static void main(String[] args) { Car car = new Car(); // 객체 생성 // 기본형 매개변수 char type = 'D'; car.brakePedal(type); // 메서드 실행 완료 후 전달할 매개값으로 지정된 type 값 확인 System.out.println("type = " + type); // 기존에 선언한 값 'D' 출력, 원본 값 변경되지 않음 // 메서드 실행 완료 후 반환된 car 인스턴스의 gear 타입 확인 System.out.println("gear = " + car.gear); // 객체 내부에서 type을 변경하여 수정했기 때문에 'P' 출력 System.out.println(); // 참조형 매개변수 Tire tire = new Tire(); tire.company = "금호"; // 금호 타이어 객체 생성 // 차 객체의 타이어를 등록하는 메서드 호출한 후 반환값으로 차 객체의 타이어 객체 반환 Tire carInstanceTire = car.setTire(tire); // 메서드 실행 완료 후 전달할 매개값으로 지정된 참조형 변수 tire의 company 값 확인 System.out.println("tire.company = " + tire.company); // "KIA" 출력 // 전달할 매개값으로 지정된 tire 인스턴스의 주소값이 전달되었기 때문에 호출된 메서드에 의해 값이 변경됨. // 메서드 실행 완료 후 반환된 car 인스턴스의 tire 객체 값이 반환되어 저장된 참조형 변수 carInstanceTire의 company 값 확인 System.out.println("carInstanceTire.company = " + carInstanceTire.company); // "KIA" 출력 } }
기본형 매개변수의 경우엔 내가 선언한 char 변수를 복사하여 매개변수로 사용하기에,
메서드 실행 이후에도 원본인 char 변수는 유지가 되는 모습이다.
참조형 매개변수는 반대로 메서드 실행 이후에 변수가 바뀌어버렸다.
이것은 내가 선언한 객체를 복사한 것이 아니라, 객체의 주소를 메서드에 전달한 것이기 때문이다.
'Java > Java 문법 종합반 강의 정리' 카테고리의 다른 글
default 메서드, static 메서드, 형변환 (2) 2024.01.01 접근 제어자 (2) 2023.12.31 기본형 변수와 참조형 변수 (0) 2023.12.29 JVM (2) 2023.12.29 자바의 역사와 특징 (6) 2023.12.29