본문 바로가기
프로그래밍 언어/JAVA

오버 로딩(Overloading)과 오버 라이딩(Overriding)

by 검은도자기 2021. 7. 3.

오버 로딩(Overloading) 이란?

- 한 클래스 내에 메소드의 이름이 동일하면서 리턴 타입 또는 매개변수를 다르게 정의하는 방법

 

 

오버 로딩 조건

1. 메소드 이름이 같아야 한다.
2. 리턴 타입에 상관없이 매개변수(파라미터) 개수 또는 자료형이 반드시 달라야 한다.

 



예제

class TestValue {

    void add(){
        System.out.println("매개변수가 없는 메소드");
    }
    
    void add(int a){
        System.out.println("매개변수가 "+a+"인 메소드");
    }

    void add(int a, int b){
        System.out.println("매개변수가 "+a+"와 "+b+"인 메소드");
    }
}

public class Test {
    public static void main(String[] args) {
        TestValue testValue = new TestValue();
        testValue.add();
        testValue.add(100);
        testValue.add(100, 200);
    }
}

 

결과


오버 라이딩(Overriding)

- 부모 클래스가 가지고 있는 메소드를 자식 클래스가 재정의하는 방법

 

 

오버 라이딩의 조건

1. 상속 관계가 있어야 한다.
2. 부모 클래스의 메소드 이름, 파라미터(매개변수), 리턴 타입 모두 같아야 한다.

3. 메소드의 선언부가 일치해야 한다.

단) 접근 제한자의 경우 접근 범위가 더 넓어도 되며, 예외가 선언되어 있는 경우 더 구체적인 자식 클래스로 선언 가능하다.

 

 

예제

class Employee{
    String name;
    int age;

    public void userInfo(){
        System.out.println("사원의 이름은 "+name+"이고 나이는"+age+"입니다.");
    }
}

class Manager extends Employee{
    String jobId;

    public void userInfo(){
        System.out.println("사원의 이름은 "+name+"이고 나이는 "+age+"입니다.");
        System.out.println("그의 직업은 "+jobId+"입니다.");
    }
}

public class Test {
    public static void main(String[] args) {
        Manager manager = new Manager();
        manager.name="나그네";
        manager.age=30;
        manager.jobId ="개발자";

        manager.userInfo();
    }
}

 

결과


오버 로딩(Overloading)과 오버 라이딩(Overriding) 성립 조건

구분  오버로딩  오버라이딩 
메소드 이름 동일  동일 
 매개변수, 타입 다름  동일 
 리턴 타입 상관없음  동일 

 

 

오버 로딩(Overloading) vs 오버 라이딩(Overriding) 차이점

- 오버 라이딩 : 부모 클래스의 메소드의 동작방법을 변경. (재정의)

- 오버 로딩 : 같은 이름, 다른 매개변수의 메소드들을 여러 개 만들 수 있음. (확장)

 

 

마무리

공부를 해보니 오버 로딩, 라이딩 개념을 제대로 이해했다면 깔끔하게 처리되었을 부분들이 많이 생각이 나네요.

급하게 구현했을 때 무조건 메소드를 새로 생성해서 사용을 했었는데 이제는 이 개념들을 떠올리면서 좀 더 불필요한 코드들을 안 만들게 고려해야겠다고 생각이 들었습니다. 부족하거나 틀린 부분이 있을 수도 있으니 주의하시면 좋을 거 같습니다. 이번 포스팅은 마무리하면서 다음 포스팅에서 뵙겠습니다

 

 

참고

https://private.tistory.com/25

https://velog.io/@jjimgo/%EC%98% A4% EB% B2%84% EB% A1% 9C% EB%94% A9

https://velog.io/@kimdoldol/%EC%98% A4% EB% B2%84% EB% 9D% BC% EC% 9D% B4% EB%94% A9

https://88240.tistory.com/450

https://opentutorials.org/course/2517/14133