JAVA

오버로딩 vs 오버라이딩

국자집사 2024. 10. 23. 17:17

 

     

    JAVA에서 다형성은 객체지향 프로그래밍의 핵심 개념 중 하나이다.

    오버로딩과 오버라이딩은 직접 코드에 적용하여 다형성을 구현할 수 있는 하나의 형태이자 수단이다.

    간단히 말하면, 오버로딩은 메서드 중복 정의, 오버라이딩은 메서드 재정의를 뜻한다.

     

    오버로딩 (Overloading)

    - 오버로딩은 동일한 이름의 메서드를 같은 클래스 내에서 여러 번 정의하는 것을 의미한다. 

    - 단, 각 메서드는 매개변수의 타입이나 개수가 달라야 한다. 

    - 이를 통해 메서드의 이름을 일관되게 유지하면서 다양한 입력에 대응할 수 있다.

    오버로딩의 특징

    • 같은 이름의 메서드를 여러 개 가질 수 있다.
    • 매개변수의 타입, 개수, 순서 중 하나 이상이 달라야 한다.
    • 반환 타입은 오버로딩에 영향을 미치지 않는다. 즉, 반환 타입만 다르면 오버로딩이 되지 않는다.
    • 메서드의 접근 제한자(public, private 등)는 오버로딩에 영향을 미치지 않는다.
    • 어떤 메서드가 호출될지는 컴파일 시점에 결정된다.

    오버로딩의 사용법

    오버로딩은 주로 동일한 기능을 수행하지만 입력 값이 다른경우에 사용된다.

    위의 'Calculator' 클래스에서는 'add'메서드가 3번 오버로딩되었다.

    각각의 메서드는 매개변수의 개수나 타입이 다르기 때문에 컴파일러는 호출 시점에 적절한 메서드를 선택한다.

     

    오버로딩의 장단점

    - 장점

    • 코드의 일관성 유지: 같은 기능을 수행하는 메서드에 동일한 이름을 부여하여 가독성을 높인다.
    • 유연성 향상: 다양한 입력에 대응할 수 있어 메서드의 활용도가 높아진다.
    • 코드 중복 감소: 유사한 기능을 하나의 이름으로 묶어 코드의 중복을 줄일 수 있다.

    - 단점

    • 과도한 오버로딩은 혼란 유발: 너무 많은 오버로딩은 코드의 이해를 어렵게 만들 수 있다.
    • 컴파일러의 선택 오류 가능성: 매개변수가 유사한 경우, 의도치 않은 메서드가 호출될 수 있다.

     

     

    오버라이딩 (Overriding)

    - 오버라이딩상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 의미한다.

    -이를 통해 자식 클래스는 부모 클래스의 기본 동작을 변경하거나 확장할 수 있다.

    오버라이딩의 특징

    • 부모 클래스와 자식 클래스 모두 같은 이름의 메서드를 가진다.
    • 부모 클래스의 메서드와 정확히 같은 매개변수를 가져야 한다.
    • 부모 클래스의 메서드와 동일한 반환 타입을 가져야 한다. (Java 5부터는 공변 반환 타입을 허용)
    • 부모 클래스의 메서드보다 더 좁은 접근 제한자를 가질 수 없다(예: public → protected는 불가)
    • 메서트 호출은 런타임에 결정된다.
    • '@Override'라는 어노테이션을 사용한다. 어노테이션(Annotation)을 사용하면 오버라이딩을 검증하는 기능을 한다.

     

    오버라이딩의 사용법

    오버라이딩은 주로 부모 클래스의 일반적인 동작을 자식 클래스에서 특화된 방식으로 구현할 때 사용된다.

    예를 들어, 동물 클래스에서 모든 동물이 소리를 낸다고 가정할 때, 개와 고양이 클래스는 각각 다른 소리를 내도록 오버라이딩할 수 있다.

    위의 예시에서 Dog과 Cat 클래스는 Animal 클래스의 sound 메서드를 오버라이딩하여 각기 다른 소리를 내도록 구현했다.

     

    오버라이딩의 장단점

    - 장점

    • 다형성 구현: 동일한 메서드 호출이 객체의 실제 타입에 따라 다르게 동작하게 할 수 있다.
    • 유지보수 용이: 공통된 인터페이스를 유지하면서 개별 클래스의 특성에 맞게 동작을 수정할 수 있다.
    • 코드 재사용: 부모 클래스의 기능을 재사용하면서 필요한 부분만 수정할 수 있다.

    - 단점

    • 과도한 오버라이딩은 유지보수 어려움: 너무 많은 메서드를 오버라이딩하면 코드의 복잡성이 증가할 수 있다.
    • 부모 클래스의 변경 영향: 부모 클래스의 메서드가 변경되면, 자식 클래스의 오버라이딩된 메서드도 영향을 받을 수 있다.

     

    오버로딩 vs 오버라이딩

      오버로딩 (Overloading) 오버라이딩 (Overriding)
    정의 동일한 클래스 내에서 같은 이름의 메서드를
    여러 번 정의
    상속 관계에서 부모 클래스의 메서드를
    자식 클래스에서 재정의
    적용 대상 메서드, 생성자 메서드
    매개변수 타입, 개수, 순서가 달라야 함 부모 클래스의 메서드와 동일해야 함
    반환 타입 영향 없음 동일하거나 공변 반환 타입
    접근 제한자 자유롭게 설정 가능 부모 클래스보다 더 좁은 범위로 설정 불가
    결정 시점 컴파일 타임 런타임
    어노테이션 사용하지 않음 @Override 사용 권장
    주요 목적 메서드 이름의 일관성 유지 및 다양한 입력 처리 상속받은 메서드의 기능을 변경하거나 확장

     

    두 개념 모두 자바에서 다형성을 구현하는 중요한 수단이지만, 그 목적과 사용 방식이 다르다.

    오버로딩메서드의 다양성을 제공하여 코드의 유연성과 가독성을 높이는 데 중점을 두고,

    오버라이딩상속 관계에서 메서드의 동작을 특화하여 객체의 구체적인 행동을 정의하는 데 중점을 둔다.

    이를 적절히 활용하면 유지보수성이 높고 확장성이 뛰어난 객체지향 코드를 작성할 수 있다.

     

     

     

    - 자바를 공부하고 체화시키지 않는다면 이론적인 개념은 헷갈리기 십상이다. 오버로딩과 오버라이딩 모두 자바에서 다형성을 구현하는 중요한 수단이므로, 헷갈리지 말고 머릿속에 제대로 정리해놓자!!!

    (사실 내가 헷갈려서 정리한건 안 비밀 >.<)

    우테코 프리코스 과제를 자바로 구현하면서, 내가 객체지향적 프로그래밍에 익숙하지 않다는 것을 뼈저리게 느끼며 나의 취뽀를 위해 더더욱 열심히 공부해야겠다. 

     

    출처

    https://hyoje420.tistory.com/14

     

    [Java]오버로딩 & 오버라이딩(Overloading & Overriding)

    오버로딩(Overloading) 오버로딩(Overloading)이라는 뜻은 사전적으로 '과적하다.'라는 뜻이다. C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것

    hyoje420.tistory.com

    https://www.tcpschool.com/java/java_usingMethod_overloading

     

    코딩교육 티씨피스쿨

    4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

    tcpschool.com

     

     

    'JAVA' 카테고리의 다른 글

    자바 컬렉션 프레임워크  (0) 2024.12.10
    Enum이란?  (1) 2024.11.01
    자바에서의 Error & Exception  (0) 2024.10.21
    JDK/JRE/JVM 개념  (0) 2024.10.14
    추상 클래스 vs 인터페이스  (0) 2024.10.14