[JAVA] 메서드 Overriding (오버라이딩) / Overloading (오버로딩)

rse·2023년 10월 12일
0

Overriding (오버라이딩)

상위 클래스에서 상속받은 메서드를 하위 클래스에서 재 정의 하는 것을 말한다.

조건

오버라이딩은 부모 클래스의 메서드를 재 정의하는 것으로 자식 클래스에서는 오버라이딩하고자 하는 메서드의 이름, 매개변수 타입, 매개변수 개수, 리턴 값 이 모두 같아야 한다.

예시

public class A {
	public String run() {
    	System.out.println("뛴다");
     }
}

public class B extend A {
	@Override
    public String run() {
    	System.out.println("숨이 차게 뛴다");
     }
}

실제 코드로는 이런식으로 사용 가능하다.

위 코드는 spring security로 보안을 설계할 때 사용하는 코드 중 일부이다.
CustomUsernamePasswordAuthenticationFilter 가 UsernamePasswordAuthenticationFilter 를 상속 받았다.

@Override 애너테이션을 붙여서 attemptAuthentication 메서드의 내부는 재정의하고 파라미터 타입, 개수, 리턴 값 모두 같은 것을 알 수 있다.

Overloading (오버로딩)

오버로딩은 이름이 같은 메서드를 변경하여 재정의하는 것을 말한다.

조건

같은 클래스 내에 있어야하며 이름 이 같아야하고, 파라미터 타입, 파라미터 개수가 달라야한다.
하지만 리턴 값 만 다른 것은 허용되지 않는다.

예시

    class A {
        public void study() {
            System.out.println("공부를 합니다.");
        }
        int study(int num) {
            System.out.println("오늘 공부한 시간은?");
            return num;
        }
        boolean study(boolean status) {
            System.out.println("오늘 공부를 했나요?");
            return status;
        }
        void study(String name) {
            System.out.println("오늘 공부한 과목은? " + name);
        }
    }

왜 사용할까?

만약 오버로딩을 사용하지 않고 메서드를 작성한다면 같은 행동임에도 불구하고 여러가지 메서드를 정의해줘야 할 것이다.

class A {
	public void study() {
    	System.out.println("공부를 합니다.");
    }
    public int studyTime(int num) {
    	System.out.println("오늘 공부한 시간은?");
    }
    public boolean studyYN(boolean status) {
    	System.out.println("오늘 공부를 했나요?");
    }

이런식으로 말이다.

위 코드처럼 복잡하게 메서드를 정의하는 것 보다 오버로딩을 사용함으로써 코드가 깔끔해지는 효과가 있기 때문에 오버로딩을 사용한다.


참고 : https://hyoje420.tistory.com/14
공식문서 : https://docs.oracle.com/javase/8/docs/api/

profile
기록을 합시다

0개의 댓글