오버로딩
- 메서드와 이름이 같고 매개변수의 타입or개수가 다른 메서드를 생성하는 것
- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
- 리턴 타입은 오버로딩을 구현하는데 아무런 영향이 없다.
- 가장 대표적인 예시로는 println이다.
매개변수로 지정하는 값의 타입에 따라서 호출되는 println 메서드가 달라진다.
장점
- 메서드의 이름만 보고 이름이 같으니, 같은 기능을 하겠구나라고 쉽게 예측할 수 있게 된다.
- 하나의 이름으로만 기억하면 되므로 기억하기도 쉽고 이름도 짧게 할 수 있어서 오류의 가능성을 많이 줄일 수 있다.
- 메서드의 이름을 절약할 수 있다.
단점
- 비슷한 기능이 아닌 메소드를 동일한 이름으로 사용하여 공동으로 개발할 경우, 다른 개발자에게 오히려 혼동을 줄 수 있다.
오버라이딩
- 상속 받은 클래스에서 상위 클래스의 메서드를 재정의하는 것을 말한다.
- 메서드 오버라이딩을 하려면 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다.
- 오버라이딩을 할 때 개발자의 실수를 방지하기 위해 메서드 위에 @Override 를 관례적으로 적는다.
장점
- 하나의 이름만 기억하면 되므로 오류의 가능성을 많이 줄일 수 있다.
- 가독성이 증가한다.
- 메서드의 이름만 보고 이름이 같으니, 같은 기능이라고 예측할 수 있다.
- 메서드 이름을 절약할 수 있다.
단점
검색해도 없는거 보니 좋은가봐요!
@Override 사용하는 이유
@Override 가 없다면 부모로부터 오버 라이딩되었는지 확신할 수 없다.
- 만약 해당 어노테이션을 사용하면 컴파일러에게 부모 클래스에 있는 메서드명과 매개 변수 등이 동일한지 체크를 합니다. 그래서 정확히 해당 클래스가 오버라이딩 됐는지 확인이 가능하다.
일종의 프로그램이 짜임새 있게 개발되기 위한 안정장치라고 생각할 수 있다. 만약 규모가 큰 프로젝트에 해당 어노테이션을 제대로 사용하지 않으면 상위 클래스와 자식 클래스의 관계는 매우 복잡해질 수 있습니다. 때문에 해당 어노테이션은 '기본'에 가깝기 때문에 사용하는 걸 추천한다.
편의 메서드란?
- *편의 메서드(convenience method)**란 말 그대로 편의를 위한 메서드이다.
예를 들면, 헬퍼 클래스인 Collections 안에 있는 모든 메서드(swap, min, max 등등...)를 말한다. JPA를 사용하신다면 1:N 관계 중 N쪽에 요소를 추가할 때 직접 만들어서 사용하는 add() 메서드도 편의 메서드이다.
왜 편의 메서드를 사용하지?
편의 메서드가 없어도 기능 상 문제가 없어 그대로 사용할 수 있다.
그러나 편의 메서드를 사용하면 메서드에 이름을 줘서 좀 더 명확하게 무슨 일을 하는 지 말해줄 수 있으며 기능 단위로 묶을 수 있고 재사용할 수 있다.
왜 편의 메서드를 많이 만들면 안되는디?
메서드가 너무 많은 클래스는 문서화하고, 테스트하고 유지보수하고 사용하기 어렵다.
클래스나 인터페이스는 자신의 기능을 수행하는 메서드를 제공해야 한다
자주 쓰일 경우에만 만들고 확신이 서지 않으면 만들지 않는 게 낫다.