개발/Java

Java에서의 오버로딩, 오버라이딩, 그리고 super()

ju_ni_ 2023. 7. 18. 11:09
반응형

안녕하세요, 오늘은 자바의 중요한 개념 중 하나인 오버로딩과 오버라이딩, 그리고 super()에 대해서 알아보려고 합니다.

 

오버로딩(Overloading)

 

오버로딩은 동일한 이름을 가지면서 매개변수의 유형 및 수가 다른 여러 메서드를 한 클래스 내에 선언하는 기법입니다. 이를 통해 같은 이름의 메소드를 여러 형태로 사용할 수 있게 되어 코드의 가독성과 재사용성이 향상됩니다.

 

오버로딩 예시:

public class OverloadingExample {

    // 메소드 오버로딩
    public void display(int num) {
        System.out.println("Displaying an integer: " + num);
    }

    public void display(String str) {
        System.out.println("Displaying a String: " + str);
    }

    public static void main(String[] args) {
        OverloadingExample obj = new OverloadingExample();
        obj.display(1);
        obj.display("Hello");
    }
}
Displaying an integer: 1
Displaying a String: Hello

위의 코드에서 display 메소드는 두 개의 버전을 가지고 있습니다. 하나는 정수를 인자로 받고, 다른 하나는 문자열을 인자로 받습니다. 각각 다른 인자 유형에 따라 적절한 메소드가 호출됩니다.

 

오버라이딩(Overriding)

 

오버라이딩은 상속 관계에 있는 클래스에서 상위 클래스가 가진 메소드를 하위 클래스에서 재정의하는 것을 말합니다. 이를 통해 하위 클래스는 부모 클래스의 기능을 그대로 사용하지 않고, 필요에 따라 기능을 변경하여 사용할 수 있습니다.

 

오버라이딩 예시:

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

class ChildClass extends ParentClass {
    // 메소드 오버라이딩
    @Override
    void display() {
        System.out.println("자식 클래스의 display 메소드입니다.");
    }
    
    public static void main(String[] args) {
        ChildClass child = new ChildClass();
        child.display(); 
    }
}
자식 클래스의 display 메소드입니다.

위의 코드에서 ChildClassParentClassdisplay() 메소드를 오버라이딩하고 있습니다. 그래서 ChildClass 객체의 display() 메소드를 호출하면, 오버라이딩된 버전이 실행됩니다.

 

super()

 

super()는 부모 클래스의 생성자를 호출하는데 사용됩니다. 이를 통해 부모 클래스의 멤버가 적절하게 초기화될 수 있습니다. 자식 클래스에서 부모 클래스의 멤버를 초기화하려 할 때, super() 키워드는 매우 유용합니다.

 

super() 사용 예시:

class ParentClass {
    int age;

    ParentClass(int age) {
        this.age = age;
    }
}

class ChildClass extends ParentClass {
    String name;

    ChildClass(int age, String name) {
        super(age);  // 부모 클래스의 생성자 호출
        this.name = name;
    }
    
    void display() {
        System.out.println("이름: " + name + ", 나이: " + age);
    }
    
    public static void main(String[] args) {
        ChildClass child = new ChildClass(10, "Tom");
        child.display();
    }
}
이름: Tom, 나이: 10

ChildClass의 생성자에서 super(age)를 사용하여 부모 클래스 ParentClass의 생성자를 호출하고 있습니다. 이를 통해 age 필드가 적절하게 초기화됩니다.

 

오버로딩과 오버라이딩 그리고 super()는 자바에서 중요한 개념입니다. 이를 이해하고 활용하면 코드의 재사용성과 유연성을 크게 향상시킬 수 있습니다.

반응형