객체지향 프로그래밍 이어서 공부해보도록 합시다.
메서드 오버로딩(method overloading)
이번 글에선 먼저 메서드 오버로딩에 대해서 알아보도록 하겠습니다.
먼저 메서드는 저번 글에서 말했다시피 이름이 같아도 매개변수의 개수, 또는 타입이 다르면 서로 다른 메서드로 인식됩니다.
이렇게 한 클래스 내에서 같음 이름을 가진 여러개의 메서드를 정의하는 것을 메서드 오버로딩 또는 간단히 오버로딩 이라고 합니다.
메서드 오버로딩의 조건은 다음과 같습니다.
1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.(매개변수의 이름은 상관없음)
3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
위의 조건을 만족시키지 못하면 컴파일 시에 오류가 발생하니 꼭 주의하시길 바랍니다.
오버로딩의 대표적인 예는 println이 있는데, 우리는 지금까지 System.out.println의 괄호 안에 값만 입력하면 알아서 출력되었습니다.
하지만 실제로는 println메서드를 호출할 때 인자로 넘겨주는 값의 타입에 따라 호출되는 println메서드가 각각 달라지는 것입니다.
다른 몇가지 예를 살펴보도록 합시다.
int add(int a, int b){return a + b;}
long add(int a, int b){return a + b;}
위의 경우 두 메서드의 반환타입은 같지만 매개변수가 완전히 동일하기 때문에 둘은 같은 메서드로 인식됩니다.
int add(int a, int b){return a + b;}
long add(int x, int y){return x + y;}
매개변수의 이름만 바꿔도 동일하게 에러가 발생합니다.
int add(int a, int b){return a + b;}
long add(long a, long b){return a + b;}
반면 매개변수의 자료형을 long으로 바꿔주니 두 메서드는 서로 다르다고 인식됩니다.
int add(int a, long b){return a + (int)b;}
long add(long a, int b){return a + b;}
위의 경우는 매개변수의 종류와 개수는 동일하지만, 두 매개변수의 순서가 달라 구분될 수 있기때문에 오버로딩으로 간주합니다.
그럼 이런 오버로딩은 왜 사용하는 걸까요?
위에서 말했던 println의 이야기로 되돌아가 봅시다.
만약 오버로딩이 없다면 println의 경우 출력하려는 데이터의 자료형에 따라 printlnInt, printlnChar, printlnDouble... 등등
근본적인 기능은 모두 동일함에도 불구하고, 일일이 다른 이름을 지어주어야 하기 때문에,
사용자 입장에서는 메서드 이름을 모두기억하기도 불편하고, 작성자도 메서드의 이름을 일일이 생각해야 되기때문에 불편합니다.
인터넷에서 이런 그래프를 찾아볼 수 있는데, 저도 언제나 코드를 작성할 때 변수나 메서드의 이름을 지을때 고민이 많이됩니다.
아마 여러분도 그렇지 않을까 하는데, 메서드 오버로딩을 통해서 메서드 이름을 통합시키면
이런 고민을 덜어주어서 작성자의 부담도 적어지고, 사용자도 기억할 메서드의 이름이 적어질태니 서로에게 득이 될 것입니다.
이번글은 여기까지 하고 마치도록 하겠습니다.
감사합니다.
'프로그래밍 언어 > 자바' 카테고리의 다른 글
자바 16. 변수의 초기화 (0) | 2020.08.31 |
---|---|
자바 15. 생성자(Constructor) (0) | 2020.08.28 |
자바 13. 변수의 종류, 메서드 (0) | 2020.08.26 |
자바 12. 클래스와 객체 (0) | 2020.08.25 |
자바 11. 배열-2 (0) | 2020.08.24 |