Backend/Java

오버라이딩과 오버로딩

개발자의 첫 걸음 2025. 7. 8. 17:52

 

 

 

 

안녕하세요. 오늘은 제가 Java를 공부하면서 처음으로 혼란스럽게 한 두 친구를 소개하고자 해요.

 

바로 오버라이딩오버로딩입니다.

 

이름이 비슷해서 볼 때마다 새롭고 혼란스러웠는데요.

 

사실 이 두 친구는 전혀 다른 내용을 가지고 있답니다. 

 

같이 차이점을 알아볼까요?

 

 

오버라이딩

 

오버라이딩은 상속받은 메서드를 제정의 하는 친구입니다.

 

예시)

class Animal {
    void sound() {
        System.out.println("동물이 소리를 낸다");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍!");
    }
}

지금 예시는 클래스 Animal 은 보호자, 클래스 Dog은 자녀로 상속(extends) 상태에요.

 

이 상태로 @Override(오버라이딩)을 작성 후

 

부모님의 메서드가 아닌 자녀의 메서드로 수정을 하고 싶을 때 사용해요.

 

@Override 사용 없이도 이상이 없지만 주의사항에서 추가적으로 설명드릴게요

 

주의사항! 오버라이딩은 상속(extends)도 중요하지만

 

메서드의 이름, 매개변수, 반환타입이 동일해야 정상적으로 작동이 됩니다.

 

이렇게 작성 중에 동일하지 않을 경우 찾기 힘들 것 같은 경우.

 

@Override 사용을 하면 틀린 부분을 찾아줘서 편해요!

(강추강추!!)

 

 

오버라이딩은 간단하게 가족으로 설명하면

 

"난 부모님의 메서드가 마음이 들지 않아. 내가 다시 쓸래!"

 

이런 느낌입니다. 어느 정도 감이 오시죠? 

 

 

 

 

오버로딩

 

오버로딩은 같은 이름의 메서드여러 개로 정리하는 친구예요

 

예시)

class Calculator {
	// 정수 두 개를 더하는 메서드
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
    	// 정수 두 개를 더하는 메서드 (매개변수 타입이 다름)
        return a + b;
    }

    int add(int a, int b, int c) {
    	// 정수 세개를 더하는 메서드 (매개변수 개수가 다름)
        return a + b + c;
    }
}

Calculator calc = new Calculator();
calc.add(1, 2);           // 2개 int
calc.add(1.5, 2.5);       // 2개 double
calc.add(1, 2, 3);        // 3개 int

예시로 간단한 덧셈을 가져왔습니다.

 

메서드 이름과 매개변수는 동일하다는 걸 볼 수 있어요. 그런데 자세히 보시면 뭔가 서로 다른 느낌이 드시죠?

 

이렇게 메서드랑 매개변수가 같고 여러 가지의 경우의 수를

 

하나의 메서드 이름으로 처리하고자 할 때 사용합니다.

 

 

오버로딩을 정리하자면

 

"같은 이름이지만 상황에 맞게 다르게" 사용할 때 쓰면 좋아요!

 

 

 

 

이렇게 오버로딩과 오버라이딩을 알아봤는데요.

 

이름은 비슷하지만 속은 전혀 다르다는 걸 확인해 봤어요.

 

저도 처음 접할 때 이 두 친구가 아주 속을 썩였답니다

 

간단하게 설명드렸는데 도움이 되셨으면 좋겠어요.