Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

To Dare Is To Do!

오버로딩과 오버라이딩 본문

Java

오버로딩과 오버라이딩

Nick_Choi 2024. 7. 4. 15:31

오버로딩 (Overloading)

: 같은 이름의 메서드 또는 생성자를 매개변수의 개수나 타입을 다르게 지정함으로써 2개 이상 정의하는 것

위와 같은 정의에서 메서드의 오버로딩 성립 조건을 정리해보면

 

1. 메서드의 이름이 같아야 한다.

2. 매개변수의 개수 또는 타입, 순서가 달라야 한다.

3. 메서드의 리턴 타입은 오버로딩 성립에 영향을 주지 않는다.

class Overloading {

     public int method(int x, int y) {
        return x + y;
    }

	//가능
    public int method(int x) {
        return x;
    }

	//가능
    public String method(String s) {
        return s;
    }

	//불가능(매개변수 수, 타입의 순서가 동일)
    public void method(int a, int b) {

    }

	//불가능(매개변수 수, 타입의 순서가 동일)
    public int method(int x, int y) {
        return 1;
    }

}

 

추가적으로 오버로딩된 메서드 중 어떤 메서드가 호출되는지는 컴파일 시점에서 결정된다.

 

오버로딩을 사용하는 이유

1. 코드의 가독성 향상

메서드나 생성자 이름이 기능을 나타내므로, 다양한 매개변수를 통해 같은 기능을 수행하는 것을 쉽게 파악할 수 있음

2. 메서드 이름 절약

오버로딩 덕분에 비슷한 기능을 하는 메서드들이 다른 이름을 가져야 하는 번거로움에서 벗어날 수 있음

3. 유지보수 용이

새로운 타입이나 매개변수 조합에 대해 새로운 메서드 오버로딩을 추가함으로써 기존 코드 수정을 피하고 기능을 확장할 수 있음

 

오버라이딩 (Overriding)

 상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것과 같이 상위 클래스가 가지고 있는 메서드를 하위 클래스로 상속되어 하위 클래스에 사용하거나 하위 클래스에서 메서드를 재정의해서도 사용하는 것을 의미한다.

(부모 클래스 private 멤버 제외)

정리하면 메서드의 이름이 서로 같고, 매개변수가 같고, 반환형이 같을 경우에 상속받은 메서드를 덮어쓰는 것이다.

 

오버라이딩 조건

- 부모 클래스의 메서드와 동일한 리턴타입, 메서드명, 매개변수를 가져야 한다.

- 또한 자식 클래스의 메서드는 부모 클래스의 메서드보다 많은 수의 예외 처리를 가질 수 없다.

- 접근 제어자는 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

 

왜 오버라이딩을 사용하는가?

하위 클래스가 상속 받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스의 상황에 맞게 변경하고 싶을 수 있다.

이때 오버라이딩을 사용하지 않으면 자식 클래스에선 부모 클래스의 메소드와 비슷한 일을 하지만 새로운 메소드를 만들어야 한다.

ex) 부모 클래스인 Car에서 move() 메소드 존재

자식 클래스인 SuperCar, SnowCar, KiaCar 자동차들이 조금 다르게 달리고 싶을 때 오버라이딩을 사용하지 않으면move() 메소드가 아닌 새로운 메소드를 계속 만들어야 함 => 비효율적

 

'Java' 카테고리의 다른 글

synchronized  (0) 2024.07.10
thread  (0) 2024.07.05
자바 메모리 구조 (feat 자바 변수)  (0) 2024.06.12
JVM과 자바의 컴파일 과정  (0) 2024.06.11
클래스를 왜 쓰는지 다시 한번 생각해 보자!  (0) 2023.12.21