[자바 무료 강의] 메서드 오버 로딩 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의메서드 오버 로딩최종수정일 2021-11-21
아이콘약 2분

동일한 이름의 메서드를 여러 개 선언하여 사용할 수 있는 것을 메서드 오버 로딩이라고 하는데요. 메서드 오버 로딩에 대해서 배워봅시다.

추가 노트

목차


  1. 메서드 오버로딩

  2. [실습해보기] 메서드 오버로딩을 작성해보자

1. 메서드 오버로딩


생성자 오버로딩과 같이 메서드도 오버로딩 할 수 있습니다. 메서드의 이름이 같더라도 메서드에 선언된 매개 변수의 개수나 자료형이 다르면 동일한 이름의 메서드를 여러 개를 선언할 수 있습니다.

class Person {

    void setData(String name) {}

    void setData(int age) {}

    void setData(String name, int age) {}
}

그리고 이런 방식으로 메서드를 사용할 수 있습니다.

Person person = new Person();

person.setData("이철수");
person.setData(30);
person.setData("이철수", 30);

다만 생성자 오버로딩에서 주의할 점과 똑같이, 같은 자료형의 매개변수로 메서드를 선언하여 오버로딩 할 수 없습니다.

class Person {

    // 같은 자료형의 매개변수로 오버로딩 할 수 없다
    void setData(String name) {}

    // 같은 자료형의 매개변수로 오버로딩 할 수 없다
    void setData(String sex) {}

}

이유는 생성자 오버로딩과 동일하므로 따로 설명드리지는 않겠습니다.


2. [실습해보기] 메서드 오버로딩을 작성해보자


case 1

코드 작성(Person.java)

class Person {

    String name;
    int age;

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

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

    void setData(String name, int age) {
        setData(name);
        setData(age);
    }

    // 인스턴스 메서드
    String getPersonInfo() {
        return String.format("name: %s, age: %d", name, age);
    }

}

코드 작성(Main.java)

public class Main {
    public static void main(String[] args) {

        Person person = new Person();
        person.setData("김철수", 40);

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

출력

name: 김철수, age: 40
도전자 질문
아이콘alsdud(2023-10-29 17:13 작성됨)
class Person {
    
    String name;
    int age;
    
    void setData(String name) {
        this.name = name;
    }
    
    void setData(int age) {
        this.age = age;
    }
    
    void setData(String name, int age){
        setData(name);
        setData(age);
    }
    
    String getPersonInfo(){
        return String.format("name: %s, age: %d", name, age);
    }

}
해당 코드에서 setData(String name) 메소드에서 인스턴스 변수 name을 초기화하고, setData(int age) 메소드에서 인스턴스 변수 age를 초기화 했기 때문에

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

위와 같은 생성자를 만들 필요가 없는 건가요?
아니면 Default 생성자가 만들어진건가요?
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

실습해보세요의 코드를 작성해보세요.

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의메서드 오버 로딩최종수정일 2021-11-21
아이콘약 2분

동일한 이름의 메서드를 여러 개 선언하여 사용할 수 있는 것을 메서드 오버 로딩이라고 하는데요. 메서드 오버 로딩에 대해서 배워봅시다.

추가 노트

목차


  1. 메서드 오버로딩

  2. [실습해보기] 메서드 오버로딩을 작성해보자

1. 메서드 오버로딩


생성자 오버로딩과 같이 메서드도 오버로딩 할 수 있습니다. 메서드의 이름이 같더라도 메서드에 선언된 매개 변수의 개수나 자료형이 다르면 동일한 이름의 메서드를 여러 개를 선언할 수 있습니다.

class Person {

    void setData(String name) {}

    void setData(int age) {}

    void setData(String name, int age) {}
}

그리고 이런 방식으로 메서드를 사용할 수 있습니다.

Person person = new Person();

person.setData("이철수");
person.setData(30);
person.setData("이철수", 30);

다만 생성자 오버로딩에서 주의할 점과 똑같이, 같은 자료형의 매개변수로 메서드를 선언하여 오버로딩 할 수 없습니다.

class Person {

    // 같은 자료형의 매개변수로 오버로딩 할 수 없다
    void setData(String name) {}

    // 같은 자료형의 매개변수로 오버로딩 할 수 없다
    void setData(String sex) {}

}

이유는 생성자 오버로딩과 동일하므로 따로 설명드리지는 않겠습니다.


2. [실습해보기] 메서드 오버로딩을 작성해보자


case 1

코드 작성(Person.java)

class Person {

    String name;
    int age;

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

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

    void setData(String name, int age) {
        setData(name);
        setData(age);
    }

    // 인스턴스 메서드
    String getPersonInfo() {
        return String.format("name: %s, age: %d", name, age);
    }

}

코드 작성(Main.java)

public class Main {
    public static void main(String[] args) {

        Person person = new Person();
        person.setData("김철수", 40);

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

출력

name: 김철수, age: 40
도전자 질문
아이콘alsdud(2023-10-29 17:13 작성됨)
class Person {
    
    String name;
    int age;
    
    void setData(String name) {
        this.name = name;
    }
    
    void setData(int age) {
        this.age = age;
    }
    
    void setData(String name, int age){
        setData(name);
        setData(age);
    }
    
    String getPersonInfo(){
        return String.format("name: %s, age: %d", name, age);
    }

}
해당 코드에서 setData(String name) 메소드에서 인스턴스 변수 name을 초기화하고, setData(int age) 메소드에서 인스턴스 변수 age를 초기화 했기 때문에

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

위와 같은 생성자를 만들 필요가 없는 건가요?
아니면 Default 생성자가 만들어진건가요?
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

실습해보세요의 코드를 작성해보세요.

Output
root$