티스토리 뷰

1. 메서드 Overloading

메서드 Overloading

 

변수의 중복 선언

  • 변수와 달리 하나의 클래스에 동일한 이름의 메서드는 여러 개 정의할 수 있음
  • 데이터 타입이 달라도 변수 이름이 동일한 경우를 허용하지 않음

메서드의 중복 정의 (Overloading)

  • 매개변수의 개수와 타입을 통해 실행될 메서드를 구분할 수 있기 때문에, 하나의 클래스에 동일한 이름의 메서드를 여러 개 정의할 수 있다.

  • 메서드 오버로딩은 객체 지향 같은 객체지향 언어에서만 제공되는 문법이다.

 

PrintStream 클래스의 메서드 Overloading

 

메서드 Overloading 유형

  1. 매개변수의 개수와 타입이 모두 다른 경우 => O
  2. 리턴 타입이 다른 경우 => X, 오버로딩 시 리턴 타입은 무시되어 에러 발생
  3. 매개 변수의 이름이 다른 경우 => X, 매개변수의 이름은 외부로부터 값을 받아오기 위함에 불과함
  4. 매개변수의 개수와 타입이 같지만 순서가 다른 경우 => O
  5. 매개변수가 형변환된 다른 타입인 경우
    • int는 double로 묵시적 형변환이 가능하다.

 

생성자 Overloading

  • 생성자는 클래스로부터 객체를 생성할 때 객체의 변수들을 초기화하는 역할을 담당하는 메서드.
  • 생성자 또한 메서드 Overloading이 지원된다.
    • 하나의 클래스는 매개변수의 유형과 개수를 달리해서 여러 개의 생성자를 갖도록 한다.
    • 필요한 데이터로만 초기화된 객체들을 사용 가능하다.
class Employee {
    String name;
    int age;
    int salary;

    // 기본 생성자
    public Employee() {
    }

    // 생성자 Overloading
    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Employee(String name, int age, int salary) {
        this.name = name;
        this.age = age;            // 중복되는 코드가 있음
        this.salary = salary;
    }
}

class EmployeeTest {
    public static void main(String[] args) {
        Employee kim = new Employee();
        System.out.println(kim.name + "의 나이 : " + kim.age + ", 의 급여 : " + kim.salary);

        Employee lee = new Employee("이선영", 45);
        System.out.println(lee.name + "의 나이 : " + lee.age + ", 의 급여 : " + lee.salary);

        Employee park = new Employee("박재성", 28, 220);
        System.out.println(park.name + "의 나이 : " + park.age + ", 의 급여 : " + park.salary);
    }
}
// null의 나이 : 0, 의 급여 : 0
// 이선영의 나이 : 45, 의 급여 : 0
// 박재성의 나이 : 28, 의 급여 : 220

this()의 의미와 사용법

  1. this 예약어
    • 생성자나 메서드의 매개변수 이름이 객체 변수의 이름과 같은 경우, this.객체변수이름 으로 구별
  2. this() 생성자
    • 같은 클래스 내의 Overloading 된 다른 생성자 메서드를 호출할 때 사용함
public class Employee {
    int employeeNo;
    String name;
    int age;
    int salary;

    public Employee() {
        this(0, "Annonymity", 0, 0);
    }

    public Employee(int employeeNo, String name) {
        this.employeeNo = employeeNo;
        this.name = name;
    }

    public Employee(int employeeNo, String name, int age) {
        this(employeeNo, name);
        this.age = age;
    }

    public Employee(int employeeNo, String name, int age, int salary) {
        this(employeeNo, name, age);
        this.salary = salary;
    }
}

 

출처 - swexpertacademy.com/

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함