오버로딩과 오버라이딩, 이름이 비슷해서 간혹 헷갈릴 때가 있을 것이다. (없으면 말고...)
그래서 이참에 오버로딩과 오버라이딩이 무엇인지 정리해보기로 했다.
오버로딩 (Overloading)
오버로딩이란 먼저 사전에서 overloading을 찾아보면 과적하다라고 나온다. 즉, 적재적량을 초과하여 많이 싣는 것을 의미한다.
Java에서의 오버로딩은 하나의 메서드 이름으로 여러 기능을 구현하기 때문에 이런 이름이 붙여진 것 같다.
오버로딩의 조건
· 메서드 이름이 같아야 한다.
· 매개변수의 개수 또는 타입이 달라야 한다.
· 매개변수는 같고 리턴 타입이 다른 경우는 오버로딩이 아니다.
Java에서 오버로딩의 예
println 메서드를 보면 매개변수의 타입들이 다른 것을 볼 수 있다.
오버로딩의 장점
어떤 이유 때문에 오버로딩을 사용할까?
만약 위에서 예를 든 println과 같이 같은 기능인데 매개변수가 다를 경우 어떻게 해야할까? 오버로딩이 없다면 printlnWithString, printlnWithInteger와 같이 이름을 각각 다르게 지어줘야 한다. 그래서 오버로딩을 사용하면 메서드의 이름을 간결하고도 짧게 지어서 같은 기능이면 같은 이름으로 묶어서 사용하여 메서드 이름을 절약할 수 있고 어떤 기능을 하는지도 쉽게 알 수 있다.
오버라이딩 (Overriding)
오버라이딩이란 사전에서 overriding을 찾아보면 다른 무엇보다 더 중요한 또는 최우선시 되는 이란 뜻으로 나온다.
Java에서의 오버라이딩은 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 말한다. 즉, 상속받은 조상의 메서드와 같은 메서드이지만 내용을 변경하여 자신이 현재 사용하고 있는 내용을 최우선시 하기 때문에 오버라이딩이란 명칭이 붙여진 것 같다.
오버라이딩의 조건
· 조상 클래스의 메서드와 이름이 같아야 한다.
· 조상 클래스의 메서드와 매개변수가 같아야 한다.
· 조상 클래스의 메서드와 리턴 타입이 같아야 한다.
· 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
· 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
· 인스턴스 메서드를 static 메서드로 또는 static 메서드를 인스턴스 메서드로 변경할 수 없다.
그렇다면 오버로딩과 오버라이딩의 내용을 한마디로 요약하면
· 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것.
· 오버라이딩 : 상속 받은 메서드의 내용을 변경하는 것.
'프로그래밍 > Java' 카테고리의 다른 글
다형성(polymorphsim) (0) | 2017.08.21 |
---|---|
접근 제어자 (Access Modifier) (0) | 2017.08.19 |
JVM의 메모리 구조 (0) | 2017.08.13 |
선언 위치에 따른 변수의 종류 (0) | 2017.08.12 |
클래스와 객체와 인스턴스 (0) | 2017.08.11 |
WRITTEN BY
- 김치치즈스마일
세계정복!