다형성

SeungJoo
|2023. 10. 18. 17:55
728x90

다형성

동일한 인터페이스를 사용하여 여러 객체 타입을 처리하는 능력을 나타냅니다. 자바는 다형성을 지원하며 이를 통해 코드의 유연성과 재사용성을 높이고 복잡성을 줄일 수 있습니다

        // class Person : 사람
        // class Student extends Person : 학생 (학생은 사람이다. Student is a person)
        // class Teacher extends Person : 선생님 (선생님은 사람이다. Teacher is a person)

        // 다형성을 이용해서 FactoryCam, SpeedCam이 아닌 Camera로도 사용가능!
        // 이름이 Camera라는 Camera라는 부모 클래스로 어떻게 서로 다른 형태의 개체를 만들 수 도 있는게 다형성!!
        Camera camera = new Camera();
        Camera factoryCam = new FactoryCam();
        Camera speedCam = new SpeedCam();

        camera.showMainFeature();
        factoryCam.showMainFeature();
        speedCam.showMainFeature();

카메라 라는 이름으로 배열을 만들고 서로 다른 형태의 개체를 집어넣음으로 반복문을 통해 ShowMainFeature 메소드를 한번 호출함으로 위에서 했던 동작을 똑같이 할 수 있습니다.

        Camera[] cameras = new Camera[3];
        cameras[0] = new Camera();
        cameras[1] = new FactoryCam();
        cameras[2] = new SpeedCam();
        
         for (Camera cam : cameras) {
            cam.showMainFeature();
        }

이미지 출처 -   (techcourse.co.kr)

Overriding

하위 클래스가 상위 클래스에서 이미 정의된 메소드를 다시 정의하고 구현하는 과정을 가리킵니다. 이 과정을 통해 하위 클래스는 상위 클래스의 메소드를 재정의하고, 런타임시에 객체의 실제 타입에 따라 적절한 메소드가 호출됩니다.

특징

오버라이딩 되는 메소드의 이름, 타입, 반환타입은 상위 클래스의 메소드와 동일해야합니다.

오버라이딩은 상속 관계에서 주로 발생하며 하위 클래스는 상위 클래스의 멤버를 상속받고 오버라이딩할 수 있습니다.

메소드가 정확히 오버라이딩되었는지 확인하기 위해서는 @Override 어노테이션을 사용하며 이 어노테이션은 컴파일러에게 해당 메소드가 상위 클래스의 메소드를 오버라이딩한다는 것을 알려줍니다.

class Shape {
    void draw() {
        System.out.println("도형");
    }
}
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("원");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape shape = new Circle(); 
        shape.draw();    
    }
}

Overloading

오버로딩을 사용시에는 동일한 이름의 메소드를 다양한 상황에서 사용할 수 있으며, 가독성과, 유지보수를 단순화 하는데 도움이 됩니다.

 

특징

메소드 이름은 동일해야 하며 매개변수 목록이 서로 달라야합니다.

반환 타입은 메소드 오버 로딩에 영향을 미치지 않습니다. 반환 타입이 다른 경우에도 오버로딩이 가능합니다.

728x90

'JAVA' 카테고리의 다른 글

인터페이스와 추상 클래스  (1) 2023.10.20
객체지향언어  (0) 2023.10.17
JAVA  (0) 2023.10.14