오버로딩과 오버라이딩, 다형성

한장민·2022년 10월 21일
0

오버로딩

자바에서는 한 클래스 내에 같은 이름을 가진 메소드가 존재하더라도, 매개변수의 갯수나 자료형을 달리하여 그 메소드를 재정의할 수 있다.

public class Run {

	public static void main(String[] args) {
			
			Over ov = new Over();
			
			ov.loading();
			ov.loading(1013);
			ov.loading("목요일");
			ov.loading(1013, "목요일");

	}

}

public class Over {
	
	public void loading() {
		System.out.println("오버로딩1");
	}
	
	public void loading(int a) {
		System.out.println("오버로딩2 + " + a);
	}
	
	public void loading(String b) {
		System.out.println("오버로딩3 + " + b);
	}
	
	public void loading(int c, String d) {
		System.out.println("오버로딩4 + " + c + d);
	}

}

순서대로 매개변수가 없는, int형의 변수를 하나 가지는, String형의 변수를 하나 가지는, int형의 변수와 String형의 변수를 둘 다 가지는 메소드를 같은 이름으로 오버로딩했다.

다음과 같이 잘 실행됨을 알 수 있다. 위의 코드에는 접근제한자가 public으로 되어있지만, 접근제한자가 달라져도 오버로딩은 정상적으로 이루어진다. 하지만 접근제한자만 달라지는 것은 오버로딩이 되지 않는다. 오버로딩은 매개변수의 차이로만 이루어진다.

장점

println이 오버로딩의 대표적인 예시라고 할 수 있다. 우리는 무언가를 콘솔창에 출력할 때 println을 사용하여 다양한 자료형의 매개변수를 출력하지만 매개변수가 달라진다고 메소드의 이름이 바뀌지 않는다. 그리고 출력의 기능을 같은 메소드 이름으로 수행한다. 하지만 매개변수가 달라지면 실제로 호출되는 println 메소드가 달라진다.

  • 메소드의 이름을 절약할 수 있다
  • 메소드의 이름을 통해 기능을 보다 쉽게 유추할 수 있다

오버로딩의 단점은 추후에 다뤄보려고 한다.

오버라이딩

오버라이딩은 상속관계를 가지는 부모 클래스와 자식 클래스 사이에서 정의된다. 자식 클래스는 부모 클래스의 private 접근 제한자를 제외하고 모든 것을 상속받는데, 이때 부모 클래스의 메소드를 그대로 사용하거나 재정의하여 사용할 수 있다. 오버로딩과 다르게 매개변수가 달라지지 않는다.

오버로딩과 오버라이딩은 단어가 비슷해 혼동을 일으키기 쉽다.
오버로딩은 새로운 메소드를 정의하는 것이고, 오버라이딩은 상속받은 메소드를 변경하는 것이다. 오버로딩과 오버라이딩은 동시에 이루어질 수도 있다.

profile
HAAN YJGB

0개의 댓글