[Java] 메소드 Overloading과 Overriding

김하밍·2024년 3월 6일
0

Java

목록 보기
27/46

Overloading
메소드 오버로딩은 같은 이름의 메소드를 여러 개 정의하는 것을 의미합니다.
메소드 오버로딩을 통해 동일한 기능을 수행하지만 매개변수의 타입, 개수, 순서 등이 다른 여러 메소드를 정의할 수 있습니다.

규칙:

  • 메소드 오버로딩은 메소드 이름은 같아야 하지만 매개변수의 타입, 개수, 순서가 서로 달라야 합니다.
  • 매개변수의 이름은 영향을 주지 않습니다. (즉, 매개변수의 개수와 타입이 같은 것끼리 순서를 바꿔주었다 해도 순서가 다른 시그니처로 인식되지 않는다는 것입니다.)
  • 매개변수의 타입, 개수, 순서 중 순서만 다른 경우에 오버로딩 불가능합니다.
  • 메소드의 시그니처가 같지만, 리턴타입이 다른 메소드는 오버로딩 불가능합니다.

장점:

  • (개발자 측면) 이름을 여러 개 만들어야 하는 수고로움을 줄여줍니다.
  • (사용자 측면) 하나의 메소드 이름으로 여러 종류의 입력을 처리할 수 있습니다.

단점:

  • 메소드의 개수가 많아질수록 코드가 복잡해질 수 있습니다.
  • 오버로딩된 메소드를 구별하기 어려워져, 실수할 가능성이 높아집니다.
  • 메소드의 이름만으로는 기능을 정확하게 파악하기 어려워, 주석을 꼼꼼하게 작성해야 합니다.

메소드 오버로딩의 사용 예시:

class Calculator {
	int left, right;
    int third = 0;
    
    public void setOprands(int left, int right) {
	    this.left = left;
	    this.right = right;
    }
    
    public void setOprands(int left, int right, int third) {
	    this.left = left;
	    this.right = right;
        this.third = third;
    }
}
c1.setOperands(10, 20);
c1.setOperands(10, 20, 30);

Overriding
메소드 오버라이딩은 상속 관계에서 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것을 의미합니다. 이를 통해 부모 클래스의 기능을 필요에 따라 자식 클래스에서 변경하거나 확장할 수 있습니다.

규칙:

  • 오버라이딩된 메소드는 부모 클래스의 메소드와 시그니처가 동일해야 합니다.
    (메소드의 시그니처는 이름과 매개변수의 타입, 개수, 순서를 의미합니다.)
  • 리턴 타입은 오버라이딩에 영향을 주지 않습니다.
  • 부모 클래스의 메소드를 호출하기 위해서는 super 키워드를 사용할 수 있습니다.

장점:

  • 부모 클래스의 기능을 필요에 맞게 수정하거나 확장할 수 있습니다.
  • 다형성을 통해 여러 클래스가 동일한 메소드를 호출할 때 다양한 동작을 수행할 수 있습니다.
  • 코드의 유연성과 재사용성을 높여줍니다.

메소드 오버라이딩의 사용 예시:

class Parent {
    public int avg() {
        // 부모 클래스의 기본 평균 계산 로직
    }
}

class Child extends Parent {
    @Override
    public int avg() {
        int average = super.avg(); // 부모 클래스의 avg() 메소드 호출
        // 추가적인 로직 수행
        return average;
    }
}
profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글