본문 바로가기

언어 기초/JAVA

[자바의정석 | Chapter 06 객체지향 프로그래밍1] 오버로딩

1. 학습목표

오버로딩에 대해서 이해할 수 있다.

2.필요 개념 문장정리

오버로딩

  • 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메서드를 정의할 수 있다.
  • 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라 한다.
  • 오버로딩은 메서드 이름이 같아야하고 매개변수의 개수 또는 타입이 달라야 한다.
  • 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.
  • 매개변수의 이름만 다르고 매개변수의 타입이 같으면 오버로딩은 성립하지 않는다.
  • 매개변수와 개수는 일티하고 리턴타입만 다르면 오버로딩은 성립하지 않는다.
  • 매개변수의 순서가 다른경우는 오버로딩으로 간주한다.

출처 - 자바의 정석

  • 정의된 매개변수가 서로달라도 모두 매개변수로 넘겨 받은 값을 더해서 반환한다.
  • 같은 일응 하지만 매개변수를 달리해야하는 경우에 이름은 같고 매개변수를 다르게 하여 오버로딩을 구현한다.
  • 메서드의 이름만 보고도 메서드 기능이 같다는 것을 알 수 있다.
  • 메서드의 이름을 절약할 수 있다.

 

 3. 코드작성

class OverloadingTest {
	public static void main(String args[]) {
    	MyMath3 mm = new MyMath3();
        System.out.println("mm.add(3, 3) 결과:" + mm.add(3, 3));
        System.out.println("mm.add(3L, 3) 결과:" + mm.add(3L, 3));
        System.out.println("mm.add(3, 3L) 결과:" + mm.add(3, 3L));
        System.out.println("mm.add(3L, 3L) 결과:" + mm.add(3L, 3L));
        
        int[] a = {100, 200, 300};
        System.out.print("mm.add(a)) 결과:" + mm.add(a);
    }
	
}

class MyMath3 {
	int add(int a, int b) {
    	System.out.print("int add(int a, int b) - ");
    	return a + b;
    }
    long add(int a, long b) {
    	System.out.print("long add(int a, long b) - ");
    	return a + b;
    }
    int add(long a, int b) {
    	System.out.print("long add(long a, int b) - ");
    	return a + b;
    }
    int add(long a, long b) {
    	System.out.print("int add(long a, long b) - ");
    	return a + b;
    }
    int add(int[] a) { // 배열의 모든 요소의 합을 결과로 돌려준다.
    	System.out.print("int add(int[] a) - ");
        for(int i = 0; i < a.length; i++) {
        	result += a[i];
        }
        return result;
    }
}

실행결과
int add(int a, int b)- mm.add(3, 3) 결과: 6
long add(long a, int b) - mm.add(3L, 3) 결과: 6 
long add(int a, 1ong b)- mm.add(3, 3L) 결과: 6
long add(long a, long b) - mm.add(3L, 3L) 결과: 6
int add(int[] a)- mm.add(a) 결과:600

4. 마무리

변수의 타입과 개수에 따른 오버로딩의 조건을 이해할 수 있었다.

구체적으로 어떻게 쓰일 때 오버로딩인지 알아가야겠다.