T.I.L #11 메소드 오버라이딩

개발자지망생·2023년 10월 23일
0

메소드 오버라이딩이란?

오버라이딩은 부모 클래스(상위 클래스)에서 정의된 메소드를 하위 클래스에서 새로운 구현으로 대체하는 과정을 의미한다. 이로써 하위 클래스는 부모 클래스의 메소드를 재정의하거나 확장하여 자신의 동작을 지정할 수 있다.

1. 부모 클래스와 자식 클래스

오버라이딩은 상속 관계에서 발생한다. 즉, 메소드를 오버라이딩하려면 자식 클래스에서 해당 메소드를 다시 정의해야 한다. 부모 클래스에서 정의한 메소드와 메소드 시그니처(메소드 이름, 매개변수, 반환 값 유형)가 일치해야 한다.

2. @override 어노테이션

자바에서 메소드를 오버라이딩할 때, @Override 어노테이션을 사용하면 컴파일러가 오버라이딩이 올바르게 이루어졌는지 확인할 수 있다. 이 어노테이션을 사용하여 코드의 가독성을 높일 수 있다.

3. 다형성(Polymorphism)

메소드 오버라이딩은 다형성의 핵심이다. 동일한 메소드 이름을 사용하여 서로 다른 클래스의 객체가 다른 동작을 수행하도록 한다. 이는 부모 클래스 참조 변수가 자식 클래스 객체를 가리킬 때 유용하게 활용된다.

메소드 오버라이딩 추가 설명

1. super 키워드

자식 클래스에서 부모 클래스의 메소드를 오버라이딩할 때, super 키워드를 사용하여 부모 클래스의 메소드를 호출할 수 있다. 이것은 부모 클래스의 메소드 구현을 확장하는것이 아니라, 부모 클래스의 메소드를 기반으로 추가 동작을 수행할 때 유용하다.

class 부모 {
    void 메소드() {
        System.out.println("부모 클래스의 메소드");
    }
}

class 자식 extends 부모 {
    @Override
    void 메소드() {
        super.메소드(); // 부모 클래스의 메소드 호출
        System.out.println("자식 클래스의 추가 동작");
    }
}

2. final 메소드

final 키워드로 선언된 메소드는 오버라이딩을 금지한다. 즉, 자식 클래스에서 final로 선언된 메소드를 오버라이딩할 수 없다. 이것은 부모 클래스에서 특정 동작을 변경하지 못하도록 하는 데 사용된다.

class 부모 {
    final void 메소드() {
        // ...
    }
}

class 자식 extends 부모 {
    // 오버라이딩 시도 시 컴파일 오류 발생
}

3. 반환 값 타입

오버라이딩된 메소드는 반환 값 타입, 메소드 이름 및 매개변수 목록이 부모 클래스의 메소드와 정확하게 일치해야 한다. 반환 값 타입은 하위 클래스에서 부모 클래스 메소드의 반환 값 타입의 하위 타입(또는 동일한 타입)이어야 한다.

class 부모 {
    Number 메소드() {
        return 0;
    }
}

class 자식 extends 부모 {
    @Override
    Integer 메소드() {
        return 1;
    }
}

4. 컴파일 타임 다형성

메소드 오버라이딩은 컴파일 타임 다형성을 구현하는데 사용된다. 즉, 컴파일러는 참조변수의 타입에 따라 어떤 메소드가 호출될지 결정한다. 그러나 실행 시에는 객체의 실체타입에 따라 오버라이딩된 메소드가 실행된다.

메소드 오버라이딩은 어디에 쓰일까?

1. 프레임워크와 라이브러리 확장

프레임워크 및라이브러리 개발에서 메소드 오버라이딩은 사용자 지정 동작을 추가하거나 변경하는 데 주로 활용된다. 예를 들어, 웹 프레임워크에서는 사용자 지정 URL 핸들러를 구현하기 위해 기본 클래스를 상속하고 메소드를 오버라이딩할 수 있다.

2. 자식 클래스의 동작 확장

자식 클래스에서 부모 클래스의 메소드를 오버라이딩하여 기본 동작을 확장하거나 변경하는 데 사용된다. 이것은 자식 클래스가 부모 클래스의 기능을 상속하되, 필요한 경우에는 특화된 동작을 수행할 수 있게 한다.

3. 다형성과 인터페이스 구현

인터페이스와 추상 클래스를 사용하여 메소드 시그니처를 정의하고, 실제 구현은 각 클래스에서 오버라이딩 된다. 이것은 다형성을 구현하고 다양한 클래스가 공통 인터페이스를 준수하도록 한다.

4. 템플릿 메소드 디자인 패턴

템플릿 메소드 디자인 패턴은 메소드 오버라이딩을 사용하여 알고리즘의 일부를 부모 클래스에서 정의하고 일부를 자식 클래스에서 오버라이딩하여 구현하는 패턴이다. 이것은 알고리즘의 흐름을 제어하는데 유용하다.

5. 상속된 비즈니스 로직 수정

비즈니스 애플리케이션에서는 부모 클래스의 일반적인 비즈니스 로직을 자식 클래스에서 오버라이딩하여 특정 비즈니스 요구 사항을 처리한다. 예를 들어, 주문 처리 시스템에서 주문 유효성 검사 메소드를 오버라이딩하여 특정 주문 유형에 맞게 수정할 수 있다.

6. 메소드 후크(Method Hooks)

소프트웨어 프레임워크에서 메서드 오버라이딩을 사용하여 프레임워크가 실행 중에 사용자 지정 코드를 삽입할 수 있는 메서드 후크를 정한다. 이것은 이벤트 처리 또는 수명주기 관리와 관련이 있다.

참고한 것 : 자바의 정석 , 구글 서칭

0개의 댓글