OneK-2
article thumbnail

오버로딩(Overloading)

오버로딩이란?

메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야 한다. 그러나 자바에서는 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.

 

이처럼, 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩(Method Overloading)' 또는 '오버로딩(Overloading)' 이라고 한다.

 

오버로딩의 규칙

  • 메서드의 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야 한다.

* 반환 타입은 오버로딩을 구현하는데 영향을 주지 못한다.

class A{
	public void a(){} // 기준 메서드
	public static void a() {} // 오류
   	public void a(int b) {}
	public void a(double a) {}
   	public int a() {} // 오류 - 반환 타입은 영향 없음
}

class B{
	public void a(int a, int b){} // 기준 메서드
	public void a(int b, int a){} // 오류 - 매개변수 이름은 영향 없음
}

 

오버라이딩(Overriding)

오버라이딩이란?

부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것을 말한다.

메서드가 오버라이딩 되었다면 해당 부모 메서드는 숨겨지고, 자식 메서드가 우선적으로 사용된다.

 

오버라이딩 규칙

  • 부모 메서드의 선언부(리턴타입, 메서드 이름, 매개변수)와 동일해야 한다.
  • 접근 제한을 더 강하게 오버라이딩 할 수 없다. (public -> private 불가능)
  • 새로운 예외를 throw할 수 없다.
class MyShape {
	public String draw() {
		return "shape";
	}
}

class MyLine extends MyShape {
	@Override
	public String draw() {
		return "Line";
	}
}

public class PainterExam {
	public static void main(String[] args){
		MyShape ms = new MyShape();
		MyLine ml = new MyLine();
		
		System.out.println(ms.draw());
		System.out.println(ml.draw());

		ms = ml; // 부모 타입으로 형 변환 이후 실행
		System.out.println(ms.draw());
	}
}
---
결과:

shape
Line
Line

 

오버로딩 VS 오버라이딩

오버로딩과 오버라이딩은 혼동하기 쉽지만, 차이는 명백하다.

  • 오버로딩: 기존에 없는 새로운 메서드를 정의하는 것(new)
  • 오버라이딩: 상속받은 메서드의 내용을 변경하는 것(change, modify)
class Parent {
	void parentmethod() {}
}

class Child extends Parent {
	void parentmethod() {} // 오버라이딩
   	void parentmethod(int a) {} // 오버로딩

	void childmethod() {}
   	void childmethod(int a) {} // 오버로딩
}

'JAVA' 카테고리의 다른 글

예외 처리는 어떻게, 어디서 하죠?  (2) 2024.07.25
내가 자바를 선택한 이유  (0) 2024.07.10
자바란 다형성이다.  (0) 2024.07.05
상속에 관하여  (0) 2024.07.04
profile

OneK-2

@인문학여행

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그