본문 바로가기

백엔드/자바

함수 오버로딩 VS 오버라이딩

반응형

자바에서 함수 오버로딩과 오버라이딩에 대해 알아보자 (비슷하게 생겨서 헷갈린다). 간단한 차이를 보면 함수 오버로딩은 주로 같은 클래스 내에 동일한 이름을 가진 함수가 다른 매개변수를 가질 때를 의미하고 함수 오버라이딩은 자식클래스가 부모로부터 상속받은 함수를 함수이름이나 매개변수 변경 없이 자식 클래스의 특성에 맞게 수정할 때 사용된다.

오버로딩 VS 오버라이딩

공통점

같은 이름을 가진 함수를 수정

차이점

오버로딩 오버라이딩
함수의 기능을 다른 매개변수로 다양화 부모 클래스 함수를 자식클래스에서 수정
상속관계에서도 사용가능 반드시 상속관계에서만 가능
매개변수가 다르다 (같으면 에러뜬다) 매개변수가 같아야 한다
리턴 타입 달라도 된다 리턴 타입이 같아야 한다
접근권이 달라도 된다 자식함수는 부모함수보다 낫은 접근권을 가질 수 없다
던지는 에러가 달라도 된다 새로운 에러나 넓은 범위의 에러를 던질 수 없다

오버라이딩 예시

오버로딩 예시

public static int getBucketCount(double width, double height, double areaPerBucket, int extraBuckets) {
    if (width <= 0 || height <= 0 || areaPerBucket <= 0) {
        return -1;
    }
    double area = width * height;
    double numberOfBucketCal = area / areaPerBucket;
    int numberOfBucket = (int) Math.ceil(numberOfBucketCal);
    return numberOfBucket + extraBuckets;
}

public static int getBucketCount(double width, double height, double areaPerBucket) {
    if (width <= 0 || height <= 0 || areaPerBucket <= 0) {
        return -1;
    }
    double area = width * height;
    double numberOfBucketCal = area / areaPerBucket;
    int numberOfBucket = (int) Math.ceil(numberOfBucketCal);
    return numberOfBucket;
}

public static int getBucketCount(double area, double areaPerBucket) {
    if (area <= 0 || areaPerBucket <= 0) {
        return -1;
    }
    double numberOfBucketCal = area / areaPerBucket;
    int numberOfBucket = (int) Math.ceil(numberOfBucketCal);
    return numberOfBucket;
}

이상

 

728x90
반응형

'백엔드 > 자바' 카테고리의 다른 글

스프링부트 이메일 전송  (0) 2024.02.10
폴리모피즘  (0) 2024.01.01
자바: 에러: release version 21 not supported  (0) 2023.12.30
상속  (0) 2023.12.28
클래스  (0) 2023.12.28