[Java] - 오버로딩 / 오버라이딩

chancehee·2022년 12월 1일
0

자바

목록 보기
4/12
post-thumbnail

1. 글을 작성하는 이유

오버라이딩과 오버로딩 항상 세트로 등장하는 개념이지만 시간이 지나면 헷갈리곤 합니다.
시간이 지났을 때, 작성한 글을 읽으며 기억을 떠올리기 위해서 작성합니다.

2. 오버라이딩

1). 개념

  • 상속 관계에 있는 클래스 간에 같은 이름의 메서드를 정의하는 기술입니다.
  • 만약 자식클래스가 부모클래스에서 선언된 것과 같은 메서드를 가질 때, 메서드 오버라이딩이라고 합니다.

2). 오버라이딩 성립조건

  • 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 합니다. (오버라이딩 = 메서드 바디를 다시 작성하는 것)
  • 접근제한자, 리턴타입, 메서드이름, 매개변수, 예외처리가 같아야 합니다. (5가지를 '메서드 시그니처' 라고 합니다.)
  • 접근제한자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없습니다.
  • 예외처리는 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없습니다.
  • final이 지정된 메서드는 오버라이드 할 수 없습니다.
  • interface를 구현하여 오버라이드 할 때는 반드시 public 접근 제어자를 사용해야 합니다.

3). @Override 명시를 권장하는 이유

  • 안써도 코드는 동작하지만, 코드의 가독성을 증가시키고 컴파일러가 어노테이션이 붙은 코드에서 에러를 감지해주기 때문에 명시하는 것을 권장합니다.

4). 오버라이딩 사용이유

  • 자식클래스가 부모클래스의 메서드를 상속 받아도 다른 기능을 사용하고자 하는 경우에 사용합니다.

3. 오버로딩

1). 개념

  • 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것 입니다.

2). 오버로딩 성립조건

  • 메서드 이름이 같아야 합니다.
  • 매개변수(파라미터)의 개수 또는 순서, 타입이 달라야 합니다. (반환 타입이 다른 것은 오버로딩 성립 조건이 아닙니다!!)

3). 오버로딩 사용이유

  • 메서드의 이름을 절약할 수 있습니다.
  • 코드의 재사용성이 증가합니다.

4). 대표적인 오버로딩 메서드

  • print() :
    이 메서드는 매개변수로 지정하는 값의 타입에 따라서 호출되는 print 메서드가 달라집니다.
    이를 통해서 우리는 print가 무언가를 출력한다는 점을 알 수 있고 코드의 재사용성이 증가합니다.

4. 다형성(<-> 단형성)

1). 개념

  • 자바의 다형성은 객체를 다양한 형태로 사용하고 관리할 수 있는 자바의 대표적인 특징 중 하나입니다.
  • 오버라이딩
  • 오버로딩
  • 상속의 다형성

2). 장점

  • 개발자가 여러 객체를 하나의 타입으로 관리가 가능하기 때문에 코드 관리가 편해 유지보수가 용이합니다.
  • 코드의 재사용성이 증가합니다.
  • 확장성이 좋고, 결합도가 강하지 않은 프로그래밍을 할 수 있습니다.

3). 원리

  • 실행 시점에 동적 바인딩이 일어나 부모클래스가 자식클래스의 멤버함수에 접근하여 실행할 수 있습니다.

5. 결론

오버라이딩은 부모로부터 받은 메서드의 로직(내부)을 원하는 대로 변경하는 것이고,
오버로딩은 한 클래스 내에, 여러 개의 같은 이름의 메서드를 정의 하는 것을 말합니다

0개의 댓글