엔지니어 블로그

[JAVA] Overriding / Overloading 차이 본문

Programming Language/JAVA

[JAVA] Overriding / Overloading 차이

안기용 2023. 11. 12. 15:22

1. Overloading

Overloading은 동일한 이름의 메서드를 다시 선언하면서 인자 값만 다르게 하는 것이다.

상속 여부와는 관계 없이 이미 선언된 메서드에 인자 값을 추가 혹은 제외 하여 다시 선언하면 된다.

 

아래는 Overloading 사용 예시다.

1
2
3
4
5
6
7
8
9
10
    static class Cal{
        int add(int a, int b){
            return a + b;
        }
 
        //overload
        int add(int a, int b, int c){
            return a + b + c;
        }
    }
cs

add 메서드를 2번 선언했고, 두 메서드는 인자의 수가 다르다.

1
2
3
4
5
6
  public static void main(String[] args) {
        Cal cal = new Cal();
        cal.add(1,2); //최초 작성 메서드
        cal.add(1,2,3); //오버로딩 된 메서드
 
    }
cs

 

동일한 메서드 명으로 인자 값을 선언한 만큼 넣어주면 각각 다른 메서드로 인식하여 사용할 수 있게 된다.

 

2. Overriding

Overriding은 상속을 사용할 때 사용되는 개념이다. 

부모 클래스의 메서드를 자식 클래스에서 다시 정의하여 사용하는 것이 Overriding의 개념이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static class Human{
        String name;
        int age;
 
        Human(String name,int age){
            this.name = name;
            this.age = age;
        }
 
        public void WhoAmi(){
            System.out.printf("%s %s살 입니다",name,age);
        }
 
    }
cs

먼저, 부모 클래스를 정의한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static class Aky extends Human{
        String addr;
        Aky(String name, int age,String addr) {
            super(name, age);
            this.addr = addr;
        }
 
        public void WhoAreYou(){
            System.out.printf("I am %s",name);
        }
 
        @Override
        public void WhoAmi(){
            System.out.printf("I am %s %s years old and i live in %s",name,age,addr);
        }
    }
 
    static class Lee extends Human{
        Lee(String name, int age) {
            super(name, age);
        }
    }
cs

이후 부모 클래스의 WhoAmi 메서드를 재정의 하는 클래스와 그렇지 않은 클래스를 준비한다.

1
2
3
4
5
6
7
8
9
  public static void main(String[] args) {
        Aky aky = new Aky("aky",31,"seoul");
        Lee lee = new Lee("lee",20);
        aky.WhoAreYou();
        System.out.println(""); // I am aky
        aky.WhoAmi();
        System.out.println(""); // I am aky 31 years old and i live in seoul
        lee.WhoAmi(); // lee 20살 입니다
    }
cs

결과를 보면 Overriding 한 메서드의 경우 자식 클래스가 정의한 대로 실행되는 것을 확인할 수 있다.