IT's 우

오버로딩(Overloading) vs 오버라이딩(Overriding) 본문

CS/Java

오버로딩(Overloading) vs 오버라이딩(Overriding)

디우 2023. 7. 26. 16:22
728x90

객체 지향 프로그래밍 특징 중 하나인 다형성과 밀접한 연관

2023.07.26 - [CS/Java] - 객체 지향 프로그래밍(OOP) 특징

다형성: 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질

 

오버로딩(Overloading)

오버로딩(Overloading)은 사전적으로 ‘과적하다’라는 뜻이다.

C언어에서는 함수명이 고유하게 존재해야 하지만 자바에서는 하나의 메서드 이름으로 여러 기능을 구현 가능하다.

 

오버로딩 정의

자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. (중복 정의)

 

오버로딩의 조건

  • 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.
    • 주의할 점: 리턴 값만 다른 것은 오버로딩을 할 수 없다.
class OverloadingTest {

	public static void main(String[] args) {
		OverloadingMethods om = new OverloadingMethods();

		om.print();
		System.out.println(om.print(3));
		om.print("Hello!");
		System.out.println(om.print(4, 5));
	}
}

class OverloadingMethods {
	public void print() {
		System.out.println("오버로딩1");
	}

	String print(Integer a) {
		System.out.println("오버로딩2");
		return a.toString();
	}

	void print(String a) {
		System.out.println("오버로딩3");
		System.out.println(a);
	}

	String print(Integer a, Integer b) {
		System.out.println("오버로딩4");
		return a.toString() + b.toString();
	}

}

→ 매개변수의 차이로만 구현 가능

→ 접근 제어자, 리턴 값 자유롭게 지정 가능

 

오버로딩 사용 이유

  1. 같은 기능을 하는 메서드를 하나의 이름으로 사용 가능
  2. 메서드의 이름을 절약할 수 있다.

 

Ex) DTO, Entitiy


 

오버라이딩(Overriding)

오버라이딩 정의

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

 

오버라이딩 조건

  • 오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메서드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.
public class OverridingTest {

	public static void main(String[] args) {
		Person person = new Person();
		Child child = new Child();
		Senior senior = new Senior();
		
		person.cry();
		child.cry();
		senior.cry();
	}
}

class Person {
	void cry() {
		System.out.println("흑흑");
	}
}

class Child extends Person {
	@Override
	protected void cry() {
		System.out.println("잉잉");
	}
}

class Senior extends Person {
	@Override
	public void cry() {
		System.out.println("훌쩍훌쩍");
	}
}

오버로딩 vs 오버라이딩

오버로딩 - 기존에 없는 새로운 메서드 추가하는 것

오버라이딩 - 상속받은 메서드를 재정의하는 것

 구분  Overriding  Overloading
 접근 제어자  부모 클래스의 메소드의 접근 제어자보다 더 넓은 범위의 접근 제어자를 자식 클래스의 메소드에서 설정할 수 있다.  모든 접근 제어자를 사용할 수 있다.
 리턴형   동일해야 한다.  달라도 된다.
 메소드명  동일해야 한다.  동일해야 한다.
 매개변수  동일해야 한다.  달라야만 한다.
 적용 범위  상속관계에서 적용된다.  같은 클래스 내에서 적용된다.

 

 


참고

https://hyoje420.tistory.com/14

728x90
반응형