오버로딩과 매개변수

김나영·2023년 6월 14일
0

Java 문법 종합반

목록 보기
13/21

오버로딩

  • 함수가 하나의 기능만을 구현하는 것이 아니라 하나의 메서드 이름으로 여러 기능을 구현하도록 하는 기능

  • 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도, 매개변수의 개수 또는 타입, 순서가 다르면 동일한 이름을 사용하여 메서드 정의

1) 조건

  • 메서드 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야함

  • 응답 값만 다른 것은 오버로딩 X

  • 접근 제어자만 다른 것도 오버로딩 X

  • 매개변수의 차이로만 구현 가능

2) 장점

  • 메서드 이름 하나로 상황에 따른 동작을 개별로 정의 가능

    • ex) println()
  • 메서드 이름 절약


매개 변수

1) 기본형 매개변수

  • 메서드를 호출할 때 전달할 매개값으로 지정한 값을 메서드의 매개변수에 복사해서 전달

  • 매개변수의 타입이 기본형일때

    • 값 자체가 복사되어 넘어가기 때문에 매개값으로 지정된 변수의 원본 값 변경 X

2) 참조형 매개변수

  • 메서드를 호출할 때 전달할 매개값으로 지정한 값의 주소를 매개변수에 복사해서 전달

  • 값을 읽어오는 것은 물론 값을 변경하는 것도 가능

    • Why? : 값이 저장된 곳의 원본 주소를 알 수 있기 때문에
  • 메서드의 매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있음

    • 반환타입이 참조형이라는 것은 반환하는 값의 타입이 "실제값의 주소"
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;
    }
  • gear의 상태를 'P'로 고정

기본형 매개변수

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" 출력
    }
}

0개의 댓글