TIL | [Java] 생성자 오버로딩 / 메서드 오버로딩

hyemin·2022년 1월 21일
0

Java

목록 보기
3/10
post-thumbnail
post-custom-banner

TIL(4) - 생성자 오버로딩과 메서드 오버로딩에 대해 공부하자!

오버로딩오버라이딩과 함께 Java에서 다형성을 지원하는 여러 방법 중 하나이다.

오버로딩(Overloading) - 서로 다른 매개변수/자료형을 갖는 여러 생성자/메서드를 같은 이름으로 선언하는 것

오버라이딩(Overriding) - 상속 관계에 있는 자식 클래스가 부모 클래스에서 정의된 메서드를 같은 자료형을 갖는 메서드로 재정의 하는 것

오버로딩(Overloading)

자바 오버로딩에는 생성자 오버로딩메서드 오버로딩이 존재하는데, 각각 예제를 통해 알아보자.

1. 생성자 오버로딩

생성자의 주요 목적이 인스턴스 변수 초기화라면 생성자 오버로딩은 생성자도 초기화하고 싶을 때 사용되는 것으로 매개변수가 다른 생성자를 여러개 선언 하는 것이다.

  1. 매개변수 자료형의 개수와 순서가 달라야한다.
  2. 같은 클래스 내에서 선언되어야 한다.

<예제 1> 성공적인 생성자 오버로딩

class Person {
    String name;
    String sex;
    int age;
    
    Person(String name) { 
        this.name = name;
    }

    Person(int age) {
        this.age = age;
    }

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
Person person1 = new Person("Ruby");
Person person2 = new Person(27);
Person person3 = new Person("Alice, 22");

Person으로 생성자명이 동일하나 각각 String name, int age, String name, int age로 매개변수가 다르다.

<예제 2> 잘못된 생성자 오버로딩

class Person {
    String name;
    String sex;
    int age;
     
    Person(String name, int age) { 
        this.name = name;
        this.age = age; 
    }

    Person(String sex, int age) { 
        this.sex = sex;
        this.age = age;
    }
}
Person person = new Person("여성임", 34);

Sting A, int age의 동일한 자료형과 개수를 가진 매개변수가 선언되었다. new Person("여성임", 34)Person(String name, int age)를 호출한 것인지 Person(String sex, int age)를 호출할 것인지 알 수 없다.

2. 메서드 오버로딩

일반적으로 오버로딩이라고 말하면 메서드 오버로딩을 의미한다. 메서도 오버로딩은 메서드의 이름이 같아도 메서드에 선언된 매개변수의 개수와 자료형이 다르면 같은 이름의 메서드를 여러개 선언 가능 한 것을 뜻한다.

<예제 3> 성공적인 메서드 오버로딩

Person.java

class Person {
    String name;
    int age;

    void setInfo(String name) {
        this.name = name;
    }

    void setInfo(int age) {
        this.age = age;
    }

    void setInfo(String name, int age) {
        setInfo(name);
        setInfo(age);
    }
    
    // 인스턴스 메서드
    String getInfo() {
        return String.format("내 이름은 %s이고 나이는 %d이다.", name, age);
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setInfo("마리아", 16);

        System.out.println(person.getInfo());
    }
}

// 내 이름은 마리아이고 나이는 16이다.

setInfo로 메스드명은 같으나 String name, int age, String name, int age로 매개변수가 각기 다르다.

<예제 4> 잘못된 메서드 오버로딩

Person.java

class Person {
    String name;
    String sex;

    void setInfo(String name) {
        System.out.println(name);
    }

    void setInfo(String sex) {
        System.out.println(sex);
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setInfo("남성임"); 
    }
}

// 오류 발생

person.setInfo("남성임")String nameString sex 중 어떤 메서드를 호출하려는지 알 수가 없다.

post-custom-banner

0개의 댓글