오버로딩(Overloading)
오버로딩은 한 클래스 안에 같은 이름의 메서드 여러 개를 정의한 것을 의미한다.
당장 자바에서 많이 사용하는 println 메서드를 확인해보면 이름은 같은 메서드지만 다른 데이터 타입을 받는 것을 알 수 있다.
우리가 파스타를 만든다고 상상을 해보자.
먼저 우리가 파스타를 만들어도 어떤 재료가 들어가는지에 따라서 파스타의 종류가 바뀐다.
위의 코드를 보면 똑같은 makePasta 메서드를 사용하여 파스타를 만들지만, 들어가는 재료에 따라서 다른 파스타를 반환해준다.
메서드를 오버로딩하면 이름이 같은 새로운 메서드를 만들 수 있다.
그렇다면 오버로딩을 활용할 때 고려해야 되는 조건은 뭐가 있을까?
오버로딩의 조건 3가지
1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
3. 반환 타입은 영향이 없다.
일단 먼저 오버로딩은 메서드 이름이 같아야 한다. 메서드 이름이 다른 것은 오버로딩이 아닌 새로운 이름의 매서드를 만드는 것이기 때문이다.
매개변수의 개수 또는 타입이 달라야 하는데 만약 매개변수의 개수가 똑같은데 타입도 마찬가지로 같으면 컴퓨터 입장에서 고려하면 어떤 메서드를 사용해야 되는지 몰라 오류가 발생하게 된다.
마지막으로 위의 코드와 같이 반환 타입이 달라도 아무런 영향이 없다.
오버라이딩(Overriding)
오버라이딩은 상속받은 부모의 메서드를 자신에 맞게 변경하는 것을 의미한다.
선언부는 고치지 못하고 내용만 변경할 수 있다.
위의 코드처럼 기본 레시피가 있고, 그것을 상속받는 파스타 레시피가 있다.
파스타 레시피에는 소스가 있기 때문에 상속받은 기본 레시피에 소스를 추가하여 레시피를 다시 정의한다.
이처럼 새로운 메서드를 생성하는 것이 아닌 기존의 존재하던 부모의 메서드를 재정의 하여 변경해서 사용할 수 있다.
그렇다면 오버라이딩을 활용할 때 어떤 것을 고려해야 할까?
오버라이딩의 조건 3가지
1. 선언부가 부모 클래스의 메서드와 일치해야 한다.
2. 접근 제어자를 부모클래스의 메서드보다 좁은 범위로 변경할 수 없다.
3. 예외는 부모클래스의 메서드보다 많이 선언할 수 없다.
먼저 선언부 즉, 매개변수가 부모클래스의 메서드와 일치해야 한다.
그 다음으로는 접근 제어자를 부모클래스의 메서드보다 좁은 범위로 변경할 수 없다.
위의 오류를 확인해보면 부모 클래스의 makeFood 메서드는 public으로 설정했지만, 자식에서 private으로 설정하여 오류가 발생하는 것을 알 수 있다.
마지막으로 예외를 선언할 때 부모의 클래스의 메서드보다 많이 선언할 수 없다.
'자바' 카테고리의 다른 글
객체 지향 프로그래밍 - Super (0) | 2023.08.15 |
---|---|
객체 지향 프로그래밍 - 상속 (0) | 2023.08.15 |
객체 지향 프로그래밍 - 생성자 & this (0) | 2023.08.06 |
객체 지향 프로그래밍 - 변수와 메서드 (0) | 2023.08.05 |
객체 지향 프로그래밍 - 클래스와 객체 (0) | 2023.08.05 |