함수가 하나의 기능만을 구현하는 것이 아니라 하나의 메서드 이름으로 여러 기능을 구현하도록 하는 기능
한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도, 매개변수의 개수 또는 타입, 순서가 다르면 동일한 이름을 사용하여 메서드 정의
메서드 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야함
응답 값만 다른 것은 오버로딩 X
접근 제어자만 다른 것도 오버로딩 X
매개변수의 차이로만 구현 가능
메서드 이름 하나로 상황에 따른 동작을 개별로 정의 가능
()
메서드 이름 절약
메서드를 호출할 때 전달할 매개값으로 지정한 값을 메서드의 매개변수에 복사해서 전달
매개변수의 타입이 기본형일때
메서드를 호출할 때 전달할 매개값으로 지정한 값의 주소를 매개변수에 복사해서 전달
값을 읽어오는 것은 물론 값을 변경하는 것도 가능
메서드의 매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있음
String company; // 자동차 회사 String model; // 자동차 모델 String color; // 자동차 색상 double price; // 자동차 가격 double speed; // 자동차 속도 , km/h char gear; // 기어의 상태, P,R,N,D boolean lights; // 자동차 조명의 상태
public Car() {} // 기본 생성자
double brakePedal(char type) { speed = 0; type = 'P'; // 정지 후 매개변수 type을 어떤 타입으로 전달 받았는지 상관없이 'P'로 고정시키기 changeGear(type); return speed; }
package week03.parameter; 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();
매개변수의 타입이 기본형이기 때문에 매개값으로 지정된 변수의 원본 값 변경 X
앞에서 'P'로 고정시켰기 때문에 'P'가 출력
Tire setTire(Tire tireCompany) { tireCompany.company = "KIA"; // 금호 타이어를 전달 받았지만 강제로 KIA 타이어로 교체 tire = tireCompany; return tire; }
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" 출력 } }