[스진초4기] 오버라이딩

창진·2023년 7월 27일

[스진초 4기] 

목록 보기
3/11

오버라이딩이란??

상속받은 조상의 메서드를 자신에 맞게 변경하는것입니다.

오버라이딩의 조건

  1. 선언부는 변경불가 합니다. 선언부가 조상의 클래스의 메서드와 일치해야 합니다.
  2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할수 없습니다.
  3. 예외는 조상의 클래스의 메서드보다 많이 선언할수 없습니다.

코드를 통한 예제

class Point2d {
    int x;
    int y;

    void coordinate_print() {
        System.out.println("현재좌표는 " + "x:" + x + ", y:" + y);
    }
} // 2차원 좌표 객체

class Point3d extends Point2d {
    int z;
	
    @override
    void coordinate_print() {
        System.out.println("현재좌표는 " + "x:" + x + ", y:" + y + ", z:" + z);
    }
} // 2차원 좌표를 상속받은 3차원 객체

public class Main {
    public static void main(String[] args) {
        Point3d p = new Point3d();

        p.x = 2;
        p.y = 1;
        p.z = 3;

        p.coordinate_print();
    }
}

자식 클래스에서는 해당 메소드의 구현부를 개선하거나 변경할 수 있습니다. 이를 메소드 오버라이딩이라고 합니다. 이렇게 함으로써 상속을 사용하는 클래스는 기존의 기능을 재사용할 수 있으며 !!확장!! 이 용이해집니다.

@override 어노테이션을 사용하는 이유

컴파일 시에 JUnit 기능을 사용하여 문법 검사를 진행할 수 있습니다.
메소드를 오버라이딩하기 위해서는 부모 클래스의 메소드 이름과 매개변수를 동일하게 가져와야 합니다. 그러나 오버라이딩에 실패하는 경우가 있을 수 있습니다. 이런 상황을 방지하기 위해 @Override 어노테이션을 사용하여 컴파일러에게 "이 메서드는 오버라이드된 메서드입니다!" 라고 알리면, 컴파일 과정에서 오버라이딩이 제대로 이루어졌는지 확인할 수 있습니다.

오버로딩 vs 오버라이딩

두 이름이 비슷하고 둘다 객체지향에서 사용되는 개념이기에 많이 헷갈리는 경우가 있습니다.

오버로딩 - 같은 이름을 가지지만 매개변수가 다른 여러 메서드를 정의하는 것입니다. 이러한 메서드들은 기존 메서드와는 별개의 새로운 기능을 제공합니다. 오버로딩을 통해 매개변수의 종류와 개수에 따라 다양한 동작을 수행할 수 있는 유연성을 제공합니다.

오버라이딩 - 오버라이딩은 상속받은 메서드의 구현부를 변경하는 과정입니다. 이는 기존의 부모 클래스에서 제공하는 기능을 자식 클래스가 수정하거나 확장하고자 할 때 사용됩니다.

<표로 도식화 해서 보면>

profile
안녕하세요

0개의 댓글