ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Overriding(오버라이딩)과 Overloading(오버로딩)
    Programming 2021. 8. 16. 01:13

    오버라이딩과 오버로딩은 한글로 보면 더더욱 헷갈리는 객체지향 프로그래밍의 메소드 정의 방식이다

     

    (Method) Overriding : 자식(서브) 클래스가 부모(슈퍼) 클래스에 정의된 메소드를 재정의 할 수 있는 기능.

    부모 클래스에 정의되어 있는 메소드와 정확히 같은 이름, 같은 반환형, 같은 파라미터를 가져야 한다

    Java에서는 @Override 메소드를 이용하여 오버라이딩을 할 수 있다

     class Thought {
        public void message() {
            System.out.println("I feel like I am diagonally parked in a parallel universe.");
        }
    }
    
    public class Advice extends Thought {
        @Override  // @Override annotation in Java 5 is optional but helpful.
        public void message() {
            System.out.println("Warning: Dates in calendar are closer than they appear.");
        }
    }

    이 때 new Thought()를 통해 Thought 객체를 생성하고 message를 호출하면 Thought의 message가, Advice 객체를 생성하기 때문에

    Thought result1 = new Thought();	
    Thought result2 = new Advice();
    Advice result3 = new Thought();		//잘못 된 선언 방식
    Advice result4 = new Advice();
    
    result1.message();	// Thought - message
    result2.message();	// Advice - message
    result4.message();	// Advice - message

    위와 같은 실행 결과를 얻을 수 있다

     

    (Method) Overloading : 같은 함수 이름, 다른 함수 파라미터를 가지는 여러 메소드를 정의할 수 있는 기능.

     

    ✅연산자 오버로딩
    ' + ' 연산자는 Numeric type에 대해서는 두 숫자 값을 더하여 Numeric type result를 반환하지만
    String type에 적용될 때 에는 두 개의 String 객체를 concatenate하는 기능을 수행한다.
    이렇게 하나의 연산자가 적용되는 피연산자에 대해 다른 기능을 수행하는 다형성을 제공한다.

     

    Java - ArrayList

    메서드 오버로딩을 한 눈에 알 수 있는 예시이다

    ArrayList에는 삽입할 element 하나만을 맨 끝에 삽입하는 메서드, 삽입할 위치 index를 함께 인자로 전달받는 메서드 2개가 존재한다

    메서드를 오버로딩 해서 사용할 때 에는 반드시 함수 파라미터를 다르게 지정해줘야 한다(access modifier나 return-type에는 제한이 없다)

    클래스를 정의할 때 여러 개의 생성자를 만들 수 있는 것도 생성자 오버로딩을 활용한 예시라고 볼 수 있다 ❗

     

    // 출처: https://opentutorials.org/course/4408/28703
    
    class Cal{
        public int sum(int v1, int v2){
            return v1+v2;
        }
        // Overloading
        public int sum(int v1, int v2, int v3){
            return v1+v2+v3;
        }
    }
    class Cal3 extends Cal{
        public int minus(int v1, int v2){
            return v1-v2;
        }
        // Overriding
        public int sum(int v1, int v2){
            System.out.println("Cal3!!");
            return v1+v2;
        }
     
    }
    public class InheritanceApp {
        public static void main(String[] args) {
            Cal c = new Cal();
            System.out.println(c.sum(2,1));
            System.out.println(c.sum(2,1,1));
     
            Cal3 c3 = new Cal3();
            System.out.println(c3.sum(2,1));
            System.out.println(c3.minus(2,1));
            System.out.println(c3.sum(2,1));
        }
    }
    class Cal2{
        public int sum(int v1, int v2){
            return v1+v2;
        }
        public int minus(int v1, int v2){
            return v1-v2;
        }
    }

     

     

Designed by Tistory.