반응형

오버로딩(Overloading)

오버로딩은 같은 이름의 메서드를 중복으로 선언하지만 각 매서드들은 다른 매개변수의 타입과 수를 가지도록 하는 방식입니다.

 

 오버로딩의 특징은

- 메서드의 이름이 같아야함.

- 파라미터의 개수가 달라야함. (파라미터의 개수가 같다면 타입이 달라야함)

- 리턴형은 같아도 OK 달라도 OK

 

예시

public class blog {

    public static void main(String[] args) {

        OverloadingMethod overloading = new OverloadingMethod();

        overloading.method(); // 매개변수가 없는 method 함수
        overloading.method(1); // 매개변수가 int형 변수 하나인 method 함수
        overloading.method(1, 2); // 매개변수가 int형 변수 두 개인 method 함수
        overloading.method("1"); // 매개변수가 String형 변수 하나인 method라는 함수
        overloading.method(1, "2"); // 매개변수가 int형 변수 하나와 String형 변수 하나인 method 함수

    }

}

class OverloadingMethod {
    void method() {
        System.out.println("매개변수가 없는 method 함수");
    }

    void method(int x) {
        System.out.println("매개변수가 int형 변수 하나인 method 함수");
    }

    void method(int x, int y) {
        System.out.println("매개변수가 int형 변수 두 개인 method 함수");
    }

    void method(String x) {
        System.out.println("매개변수가 String형 변수 하나인 method라는 함수");
    }

    void method(int x, String y) {
        System.out.println("매개변수가 int형 변수 하나와 String형 변수 하나인 method 함수");
    }

}

OverloadingMethod라는 클래스 내에 method라는 이름의 함수 5개를 오버로딩 하였습니다.

 

각 매개변수가 없는 함수, 매개변수가 int형 변수 하나인 함수, 매개변수가 int형 변수 두 개인 함수, 매개변수가 String형 변수 하나인 함수 , 매개변수가 int형 변수 하나, String형 변수 하나인 함수입니다.

 

메인 함수에서 OverLoadingMethod 객체를 생성 후 method 함수를 다음과 같이 다섯 번 호출 하였습니다.

 

각 매개변수 없음, 매개변수 숫자 1, 매개변수 숫자 1과 2, 매개변수 문자 1, 매개변수 숫자1과 문자 2로 함수를 호출하였는데 아래와 같이 각 매개변수에 맞는 함수가 실행되는 것을 볼 수 있습니다.

overloading.method(); // 매개변수가 없는 method 함수
overloading.method(1); // 매개변수가 int형 변수 하나인 method 함수
overloading.method(1, 2); // 매개변수가 int형 변수 두 개인 method 함수
overloading.method("1"); // 매개변수가 String형 변수 하나인 method라는 함수
overloading.method(1, "2"); // 매개변수가 int형 변수 하나와 String형 변수 하나인 method 함수

오버라이딩(Overriding)

오버라이딩은 상속 관계에 있는 클래스 간 같은 이름의 메소드를 재정의하는 방식입니다.

 부모 클래스에 있는 메서드와 자식 클래스에 있는 메서드의 이름, 매개변수(개수, 타입), 반환형(리턴 타입)이 같은 경우 오버라이딩을 할 수 있습니다.

오버라이딩의 특징

- 오버라이드 하고자 하는 메서드가 상위 클래스에 존재해야함.

- 메서드의 이름, 파라미터의 개수와 타입, 리턴 타입이 같아야함.

- super. 을 이용하여 부모클래스의 정보를 가져올 수 있음.

예시

public class blog {

    public static void main(String[] args) {

        People kim = new People();
        kim.name = "킴";
        kim.age = 14;

        Korean soopeach = new Korean();
        soopeach.name = "수피치";
        soopeach.age = 24;
        soopeach.From = "한국";

        Korean joon = new Korean();
        joon.name = "준";
        joon.age = 24;
        joon.From = "한국";

        soopeach.introduce();
        // 안녕 내 이름은 수피치이고 나이는 24살이야. 만나서 반가워!
        // 한국에서 왔어!
        joon.introduce();
        // 안녕 내 이름은 준이고 나이는 24살이야. 만나서 반가워!
        // 한국에서 왔어!
        kim.introduce();
        // 안녕 내 이름은 킴이고 나이는 14살이야. 만나서 반가워!

    }

}

class People {

    public String name;
    public int age;

    public void introduce() {
        System.out.println("안녕 내 이름은 " + this.name + "이고 나이는 " + this.age + "살이야. 만나서 반가워!");
    }

}

class Korean extends People {

    String From;

    @Override
    public void introduce() {
        super.introduce();
        System.out.println(this.From + "에서 왔어!");
    }
}

People이라는 클래스는 name, age 라는 변수를 가지고 this.name / this. age를 호출하는 introduce함수가 있습니다.

Korea 이라는 클래스는 이 People 클래스를 상속받고 @Override를 사용하여 부모 클래스의 introduce함수를 오버라이딩 하였습니다.

super.introduce() 를 사용하여 부모 클래스인 People의 introduce를 호출하고 this.From 에서 왔다고 출력해주는 기능을 추가해주었습니다.

soopeach.introduce();
// 안녕 내 이름은 수피치이고 나이는 24살이야. 만나서 반가워!
// 한국에서 왔어!
joon.introduce();
// 안녕 내 이름은 준이고 나이는 24살이야. 만나서 반가워!
// 한국에서 왔어!
kim.introduce();
// 안녕 내 이름은 킴이고 나이는 14살이야. 만나서 반가워!

따라서 위와 같은 결과가 출력되게 되는데

@Override
public void introduce() {
    System.out.println(this.From + "에서 왔어!");
}

Korean 클래스에서 오버라이드한 introduce 함수에서 super.introduce 함수를 위와같이 지우게 된다면 

soopeach.introduce();
// 한국에서 왔어!
joon.introduce();
// 한국에서 왔어!
kim.introduce();
// 안녕 내 이름은 킴이고 나이는 14살이야. 만나서 반가워!

이와 같은 결과가 출력되게 됩니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기