[Java] 메서드 오버로딩, 메서드 오버라이딩 (Method Overloading, Method Overriding)

2023. 12. 10. 20:14· Java
목차
  1. 1. 메서드 오버로딩 (Method Overloading)
  2. 1-1. 메서드 시그니처 (Method Signature)
  3. 1-2. 오버로딩 규칙
  4. 1-3. 오버로딩 예시
  5. 1-4. 오버로딩 실패
  6. 2. 메서드 오버라이딩 (Method Overriding)
  7. 2-0. @Override
  8. 2-1. 메서드 오버라이딩 조건
  9. 2-2. 메서드 오버라이딩 예시
  10. 3. 오버로딩 vs 오버라이딩

1. 메서드 오버로딩 (Method Overloading)

  • 자바에서 같은 이름의 메서드를 여러개 정의하는 것을 오버로딩 (Overloading) 이라고 함
  • 즉, 이름이 같고 매개변수가 다른 메서드를 여러 개 정의하는 것을 의미

 

1-1. 메서드 시그니처 (Method Signature)

  • 메서드를 구분할 수 있는 식별자
  • 메서드 이름, 매개변수 타입, 매개변수 순서 등으로 이루어짐

메서드 시그니쳐 = 메서드 이름 + 매개변수 타입과 순서

 

1-2. 오버로딩 규칙

오버로딩 규칙 : "메서드 시그니처가 달라야 한다."

 

1-3. 오버로딩 예시

  • 메서드의 이름이 같고, 매개변수의 개수가 달라야 한다.
// 매개변수의 개수가 다른 경우
public class Main {
    public static void main(String[] args) {

        System.out.println("두 수의 합 = " + sum(1,2));
        System.out.println("세 수의 합 = " + sum(1,2,3));
    }
    
    public static int sum(int a, int b){
        return a+b;
    }
    
    public static int sum(int a, int b, int c){
        return a+b+c;
    }
}

 

  • 메서드의 이름이 같고, 매개변수의 타입이나 순서가 달라야 한다.
// 매개변수의 타입이 다른 경우
public class Main {
    public static void main(String[] args) {

        System.out.println("정수 2개의 합 = " + sum(1,2));
        System.out.println("실수 2개의 합 = " + sum(1.0,2.5));
    }

    public static int sum(int a, int b){
        return a+b;
    }

    public static double sum(double a, double b){
        return a+b;
    }
}
// 매개변수의 타입 순서가 다른 경우
public class Main {
    public static void main(String[] args) {

        System.out.println("정수와 실수의 합 = " + sum(1,2.1));
        System.out.println("실수와 정수의 합 = " + sum(1.5,2));
    }

    public static double sum(int a, double b){
        return a+b;
    }

    public static double sum(double a, int b){
        return a+b;
    }
}

 

1-4. 오버로딩 실패

  • 메서드 시그니처 : 메서드의 반환 타입은 포함하지 X
  • 따라서 메서드 반환 타입만 다른 경우는 오버로딩 실패!

 

  •  메서드의 반환 타입만 다른 경우
// 오버로딩에 실패하여 에러가 발생한다.

public static double sum(int a, int b){
        return a+b;
}

public static int sum(int a, int b){
        return a+b;
}

 

 

2. 메서드 오버라이딩 (Method Overriding)

  • 상속받은 부모 클래스의 메서드를 자식 클래스에서 동일한 메서드 시그니처로 재정의 하는 것을 의미

 

2-0. @Override

  • 옵션임, 없어도 잘 동작함
  • 상위 클래스의 메서드를 오버라이드 했음을 의미 하는 애노테이션
  • 컴파일러가 이 애노테이션을 보고 정확히 오버라이드 되었는지 검사함 ⇒ 잘못되면 컴파일 에러
  • 오버라이딩 시 실수하는 경우를 방지해줌!
// 컴파일 에러
// java: method does not override or implement a method from a supertype

 

2-1. 메서드 오버라이딩 조건

  • 메서드 시그니처가 부모 클래스의 메서드와 동일해야 함
  • 접근제어자는 부모 클래스의 메서드와 같거나 더 넓은 범위여야 함
  • 반환 자료형은 부모 클래스의 메서드와 같거나 하위 자료형이어야 함

 

2-2. 메서드 오버라이딩 예시

  • Car 클래스 : 부모 클래스
public class Car {

    public void move() {
        System.out.println("차를 이동합니다.");
    }
}

 

  • ElectricCar 클래스 : Car를 상속받은 자식 클래스
public class ElectricCar extends Car{

    public void charge() {
        System.out.println("차를 충전합니다.");
    }

    // 메서드 오버라이딩
    @Override
    public void move() {
        System.out.println("전기차를 이동합니다!!");
    }
}
  • 부모 클래스인 Car 클래스에 존재한 move() 메서드를 오버라이딩 함
  • Car의 move()와 ElectricCar의 move()는 동일한 메서드 시그니처를 가짐
  • 상속받은 부모 클래스의 메서드 중 자식 클래스에 맞춰서 메서드를 수정한 것!

 

  • GasCar 클래스 : Car를 상속받은 자식 클래스
public class GasCar extends Car{

    public void fillup() {
        System.out.println("기름을 주유합니다.");
    }
}

 

  • CarMain 클래스
public class CarMain {

    public static void main(String[] args) {

        ElectricCar electricCar = new ElectricCar();
        GasCar gasCar = new GasCar();

        electricCar.move();
        electricCar.charge();

        gasCar.move();
        gasCar.fillup();
    }
}

 

  • 실행 결과
전기차를 이동합니다!!
차를 충전합니다.
차를 이동합니다.
기름을 주유합니다.

 

📌 메서드 오버라이딩 - 호출

1. 본인 타입에서 메서드 찾음
2. 없으면 부모 타입에서 메서드 찾음

 

3. 오버로딩 vs 오버라이딩

오버로딩 : 동일 클래스에서 이름이 동일하고 메서드 시그니처가 다른 여러 개의 메서드를 정의하는 것
오버라이딩 : 자식 클래스에서 부모 클래스의 메서드를 동일한 메서드 시그니처로 재정의 하는 것
저작자표시 변경금지 (새창열림)

'Java' 카테고리의 다른 글

[Java] 클래스  (0) 2024.07.08
[Java] StringBuilder 로 출력하여 시간초과 해결  (0) 2023.12.12
[Java] 향상된 for 문 (for-each 문)  (0) 2023.12.10
[Java] 삼항 연산자  (0) 2023.12.09
[Java] 리터럴 (Literal)  (0) 2023.12.09
  1. 1. 메서드 오버로딩 (Method Overloading)
  2. 1-1. 메서드 시그니처 (Method Signature)
  3. 1-2. 오버로딩 규칙
  4. 1-3. 오버로딩 예시
  5. 1-4. 오버로딩 실패
  6. 2. 메서드 오버라이딩 (Method Overriding)
  7. 2-0. @Override
  8. 2-1. 메서드 오버라이딩 조건
  9. 2-2. 메서드 오버라이딩 예시
  10. 3. 오버로딩 vs 오버라이딩
'Java' 카테고리의 다른 글
  • [Java] 클래스
  • [Java] StringBuilder 로 출력하여 시간초과 해결
  • [Java] 향상된 for 문 (for-each 문)
  • [Java] 삼항 연산자
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
공대생의 코딩 일기전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (153)
    • Spring Boot (46)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (3)
      • CI,CD (8)
      • Monitoring (2)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
[Java] 메서드 오버로딩, 메서드 오버라이딩 (Method Overloading, Method Overriding)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.