1. 오버로딩

오버로딩이란?

같은 클래스 내에 하나의 메서드 이름으로 다양한 매개변수를 가진 여러 개의 메서드를 만드는 것이다.

int add(int a) {}
int add(int a, int b) {}
int add(int a, double b) {}

1.1. 오버로딩의 조건

  1. 매서드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
int add(int a, long b) {}
int add(long a, int b) {}

오버로딩의 예로 println이 있다 참고하길 바란다.

1.2. 오버로딩의 장점

  1. 같은 기능을 하는 여러 메서드 들을 하나의 이름으로 만들 수 있다.
  2. 메서드 네이밍 시간을 단축시킬 수 있다.

1.3. 가변 인자와 오버로딩

가변인자란?

매개변수의 개수를 자유자재로 받을 수 있는 것을 말한다.

 

  • 가변인자는 매개변수들 중 가장 마지막에 선언해야 한다.
  • 가변인자는 내부적으로 배열을 사용한다.
  • 가변인자 대신 배열을 사용하면 매개변수가 필수여서 주의해야 한다.
  • 가변인자를 사용하면 오버로딩에 구분이 되지 않아 에러가 발생한다.
int add(int a, int... arg) {}
int add(int... arg) {}

위의 예제는 오버로딩이 구분되지 않는 예제이다.

2. 오버라이딩

오버라이딩이란?

상속받은 메서드의 내용을 변경하는 것이 오버라이딩이다.

class Parent {
    public int get() {
    	...
    }
}


class Child extends Parent {
    public int get() { // 오버라이딩
    	...
    }
}

Parent의 get메서드와 비슷한 기능을 기대할 수 있어 오버라이딩을 사용한다.

2.1. 오버라이딩의 조건

  1. 하위 클래스와 상위 클래스의 메서드 명이 같아야 한다.
  2. 하위 클래스와 상위 클래스의 메서드 매개변수가 같아야 한다.
  3. 하위 클래스와 상위 클래스의 메서드 반환 타입이 같아야 한다.

한마디로 메서드의 선언부가 같아야 오버라이딩이 된다.

2.2. 제한 딘 조건하에 변경 가능한 것

  1. 접근 제어 가는 상위 클래스의 메서드 보다 좁은 번위로 변경 불가
    넓은 범위로 변경이 가능하며 범위 순서는 public > protected > default > private이다.
  2. 상위 클래스의 메서드보다 많은 예외를 선언할 수 없다.
    class Parent {
        public int get() throws IOException, SQL... {}
    }
    
    class Child {
        public int get() throws IOException {}
    }​

2.3. 오버라이딩의 제한

  1. 접근 제어자를 상위 클래스의 메서드 보다 좁은 범위로 변경 불가능하다.
  2. 예외는 상위 클래스의 메서드보다 많이 선언하는 것은 불가능하다.
  3. 인스턴스 메서드를 static 메서드로 또는 static 메서드를 인스턴스 메서드로 변경 불가능하다.

* 상위 클래스에 정의된 static 메서드를 하위 클래스에 똑같은 선언부로 정의 가능하다. 이것은 오버라이딩이 아닌 각 클래스의 static 메서드이다.

3. 오버로딩 & 오버라이딩 정리

오버로딩 : 중복되는 메서드 이름을 이용해 새로운 메서드를 만드는 것

오버라이딩 : 상위 클래스의 메서드를 하위 클래스의 메서드에서 변경하는 것

'개발 언어 > Java' 카테고리의 다른 글

[Java] 변수의 초기화  (0) 2021.08.24
[Java] 생성자  (0) 2021.08.24
[Java] 클래스와 객체  (0) 2021.08.20
[Java] 객체 지향 프로그래밍  (0) 2021.08.20
[Java] 배열  (0) 2021.08.19

+ Recent posts