Programing Language/Java

[Java] 오버로딩(Overloading)

vinedpillar 2022. 7. 4. 03:00

오버로딩(Overloading)

  • 오버로딩이란 한 클래스 내에 같은 이름을 가진 컨스트럭터나 메서드를 2가지 이상의 형태로 선언하는 것을 의미합니다.

  • 동일한 이름의 컨스트럭터나 메서드의 매개 변수를 다른 자료형으로 선언하거나 개수 혹은 선언 순서를 다르게 선언하여 오버로딩 시킬 수 있습니다.

  • 이를 통해 하나의 메서드로도 다양한 경우에 대응할 수 있도록 설정할 수 있습니다. 

  • 오버로딩을 통해 비슷한 기능을 가진 다른 이름의 컨스트럭터나 메서드가 생성되는 것을 막아 코드의 가독성을 높을 수 있습니다.

  • 오버로딩은 크게 컨스트럭터 오버로딩과 메서드 오버로딩으로 구분됩니다.

 

 

 

 

컨스트럭터 오버로딩(Constructor Overloading)

  • 컨스트럭터 오버로딩은 같은 이름의 컨스트럭터를 2가지 이상의 형태로 선언하는 것을 의미합니다.

  • 클래스의 컨스트럭터는 매개변수의 타입과 개수가 모두 달라야 오버로딩이 성립됩니다.
    (매개변수의 순서만 다르게 나열된 경우에는 오버로딩으로 인식되지 않아 컴파일 에러 발생)

  • 이를 통해 한번에 여러 변수의 값들을 초기화 시킬 수 있습니다.
컨스트럭터 오버로딩 사용 예시

// 학생 클래스 생성
public class Student {
    String name;
    String school;
    String department;
    
    // 기본 컨스트럭터
    public Student() {
    
    }
    
    // 이름만 요구하는 컨스트럭터
    public Student(String name) {
    	this.name = name;
    }
    
    // 이름과 학교를 요구하는 컨스트럭터
    public Student(String name, String school) {
    	this.name = name;
        this.school = school;
    }
    
    // 이름, 학교와 학과를 요구하는 컨스트럭터
    public Student(String name, String school, String department) {
    	this.name = name;
        this.school = school;
        this.department = department;
    }
}

 

 

 

 

 

메서드 오버로딩(Method Overloading)

  • 메서드 오버로딩이란 하나의 클래스 안에 같은 이름의 메서드를 여러 개로 정의하는 것을 의미합니다.

  • 메서드를 오버로드 하기 위해서는  아래의 조건이 필요합니다.
    • 오버로딩 하고자 하는 메서드의 이름이 동일해야 합니다.
    • 매개 변수의 개수, 타입 혹은 순서가 다르게 정의되어야 합니다.
      (같은 것이 있다면, 컴파일 에러 발생)

  • 반환 타입은 메서드 오버로딩에 영향을 주지 않습니다.
메서드 오버로딩 사용 예시

// 학생 클래스 생성
public class Student {
    String name;
    String school;
    String department;
    
    // name을 매개변수로 받는 printInfo 메서드
    public void printInfo(String name) {
    	System.out.println("학생의 이름은 " + name + "입니다.");
    }
    
    // name과 school을 매개변수로 받는 printInfo 메서드
    public void printInfo(String name, String school) {
    	System.out.println("학생의 이름은 " + name + "이고, " + school + "에 다닙니다.");
    }
    
    // 아래 메서드는 위의 메서드와 같은 매개변수를 받고 반환형만 다르기 때문에 오버로딩 되지 않음
    // public Stirng printInfo(String stName) {
    //     return stName;
    // }
}