[자바] 오버로딩

Gammi·2022년 9월 29일
0

JAVA

목록 보기
7/35
post-thumbnail

📕 메서드 오버로딩(Method Overloading)


  • 메서드 다중 정의

  • 동일한 이름의 파라미터가 다른 메서드를 여러 번 정의하는 것

  • 비슷한 기능을 수행하지만 전달받은 데이터 타입이 다른 경우, 파라미터만으로 구분되는 동일한 이름의 메서드를 여러 개 정의

  • 메서드 시그니처(이름, 리턴타입, 파라미터, 접근제한자) 중 파라미터를 제외한 나머지는 동일하게 정의

    -> 메서드 호출 시점에 전달되는 데이터만으로 각 메서드가 구분되어야 함


🔗 참고

< 메서드 오버로딩 규칙 (택1) >

1. 메서드 파라미터의 데이터타입이 달라야 함
2. 메서드 파라미터의 개수가 달라야 함


public static void main(String[] args) {
	OverloadingMethod om = new OverloadingMethod();
    om.add(10, 20);
    om.add(15.2, 3.14);
    om.add(10, 20, 30);
}

class OverloadingMethod {
  public void add(int num1, int num2) {
  	System.out.println(num1 + num2);
  }

  public void add(double num1, double num2) {
    // 데이터타입이 다르기 때문에 같은 이름으로 메서드 생성 가능
    System.out.prinln(num1 + num2);
  }
  
  public void add(int num1, int num2, int num3) {
  	 // 파라미터의 개수가 다르기 때문에 오버로딩 가능
     System.out.println(num1 + num2 + num3);
  
  public void add(int i, int j) {
    // 오류 발생!
    // 데이터타입이 달라야지
    // 변수명만 다를 경우 오버로딩 불가능
  }
  
  public void add(int num1, int num2) {
  	return num1 + num2;
    // 오류 발생!
    // 리턴타입만 다를 경우 오버로딩 불가능
  }
}

⛔ 메서드 오버로딩 시 문제점


  • 동일한 작업을 수행하는 코드들의 중복 발생

    -> 특정 메서드의 코드를 수정해야 하는 경우 동일 코드를 여러 번 수정해야하는 번거로움 발생

    = 코드의 유지보수성 나쁨


< 해결책 >

오버로딩 된 메서드에서 또 다른 오버로딩된 메서드를 호출하여 중복되는 작업을 대신 처리하도록 할 수 있다

  • 메서드 호출 시 자신의 전달받은 파라미터 다시 전달
  • 클래스 내의 다른 메서드를 호출하여 코드 재사용

최대 3명까지 초대 인원에 대한 이름을 입력받아 출력하는 print() 메서드 정의

  • 단, 입력되지 않은 이름은 "없음"으로 출력
public static void main(String[] args) {
}

class PrintClass {
  public void print() {
     print("없음", "없음", "없음");
     // println을 이용하여 직접 출력하는 것이 아니라
     // print() 메서드를 이용하여 대신 출력
  }
   public void print(String name1) {
     print(name1, "없음", "없음");
  }
   public void print(String name1, String name2) {
     print(name1, name2, "없음");
  }
   public void print(String name1, String name2, String name3) {
     System.out.println("초대 멤버 : " + name1 + ", " + name2 + ", " + name3);
     // 모든 파라미터를 전달받는 메서드는 자기 자신을 직접 호출 할 수 없고
     // 반드시 직접 작업을 수행해야만 한다!!!!!!
  }
}





📕 생성자 오버로딩(constructor overloading)


  • 메서드 오버로딩과 동일

  • 생성자 호출 시 다양한 형태의 파라미터값을 전달하여 객체를 다양하게 초기화 하는 목적


public static void main(String[] args) {
	Person p = new Person("김경민", 20);
    p.showPersonInfo();
    person p2 = new Person("김경민", "대한민국", 20);
    p2.showPersonInfo();
}

class Person {
	String name;
    String nation;
    int age;
    
    public Person() {
    	// 기본 생성자 정의
    }
    
    public Person(String name, int age) {
    	 // 파라미터 두 개를 전달받아 초기화하는 생성자 정의
         nation = "대한민국";
        // 국가를 대한민국으로 고정
        this.name = name;
        this.age = age;
    }
    
    public Person(String name, String nation, int age) {
    	// 파라미터 세 개를 전달받아 초기화하는 생성자 정의
        this.name = name;
        this.nation = nation;
        this.age = age;
    }
    
    public void showPersonInfo() {
    	System.out.println("이름 : " + name);
        System.out.println("국적 : " + nation);
        System.out.println("나이 : " + age);
    }

}

🔗 참고

< 생성자 오버로딩 단축키 >

Shift + Alt + S -> O

profile
개발자가 되었어요⭐️

0개의 댓글