언어/Java

메소드 오버로딩(Overloading) , 오버라이딩(Overriding)

DH_PARK 2024. 9. 19. 21:37

메소드 오버로딩이란?

처음 Java를 배울 때 변수를 선언할 때 변수명이 중복되게 선언하면 오류가 발생했다.

하지만 메소드는 이름이 같더라도 매개변수의 개수 또는 타입이 다르면

같은 이름을 사용해서 같은 이름이지만 여러 기능을 가진 메소드를 사용할 수 있게 되는데,

이를 메소드 오버로딩이라고 한다.


 

예를 들어보자.

package smile;
 
public class Test {
    public static void main(String[] args) {
        Test t = new Test();
        t.something();
        t.something(10);
        t.something(10,10);
        t.something(10,10.1);
    } 
    void something() {
        System.out.println("something!");
    }
    void something(int i) {
        System.out.println(i);
    }
    void something(int i, int i2) {
        System.out.println(i+i2);
    }
    void something(int i, double d) {
        System.out.println(i+d);
    }
}

이 코드에서  Test class 내부에 something() 이라는 이름을 가진 메소드가 4개나 존재하지만 매개변수의 개수나 자료형이 다르기 때문에 사용이 가능하게 된다.

오버로딩의 조건

  • 메소드의 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야 한다.
  • 매개변수의 개수와 타입이 같지만 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.(예를 들어 void 인데 return 값이 있다거나 하는 경우)

오버로딩을 사용하는 이유 :

같은 이름에 여러 기능을 가진 메소드이기 때문에 각 각 메소드 이름을 지정하지 않아도 되고 오버로딩을 한 메소드 이름 하나만 알고 있으면 되기 때문에 사용이 편리해진다.

 


 

메소드 오버라이딩(재정의)

부모클래스에서 상속받은 클래스에서 같은 이름과 구조의 메소드를 재정의하는것 (다형성)

 

오버라이딩의 조건

  • 메소드의 이름 , 리턴 타입 , 매개변수의 갯수나 타입이 완전히 일치해야 한다.
  • 반드시 상속 관계가 있어야 한다
  • 재정의를 하는 클래스의 메소드 접근제어지시자는 상위 클래스의 접제자 보다 크거나 같아야 한다. (protected < public) 순서
  • static , final , private 메소드는 오버라이딩 할 수 없다

 

자식클래스에서 재정의한 메소드를 부모클래스에서 다시 사용하면 재정의한 상태로 나온다. 왜그럴까?

메소드를 재정의하면 자식클래스에서 새로이 덮어씌워지는것이 아니고

부모클래스에서 메소드가 재정의되는 것이기 때문이다.

class Animal01 {
	void makeSound() {
		System.out.println("동물이 소리를 낸다.");
	}
}

class Dog01 extends Animal01 {
	void makeSound() { 
		System.out.println("개가 짖는다"); 
	} 

	void bark() {
		System.out.println("왈왈");
	}
}

//아래에서 실행해보면 Animal 클래스에서도 Dog객체의 makesound()
//가 상속을 받아 재정의 했기 때문에 부모 Animal 클래스의 makesound 가 재정의 된다.
// 고로 "개가 짖는다" 가 출력이 된다.

※ 메소드 오버로딩은 가져가다 쓰는 것이고, 메소드 오버라이딩은 가져다가 !덮어쓰는것!

'언어 > Java' 카테고리의 다른 글

생성자란?  (0) 2024.09.23
Java 의 기본 . Class  (0) 2024.09.23
getter 와 setter 란?  (0) 2024.09.23
객체 지향프로그래밍이란?  (0) 2024.09.19
24-08-27 월  (0) 2024.08.28