본문 바로가기

언어/Java

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

자바에는 다형성이라는 것이 있습니다.

다형성(polymorphism)이란 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미합니다.

이 다형성을 지원하는 방법으로 메서드 오버로딩오버라이딩 이 있습니다.

 

그런데 이렇게 이야기해도 솔직히 잘 모르므로

오버로딩과 오버라이딩을 공부하고 예를 들어서 이해를 해보도록 하겠습니다.

 

1. 오버로딩 (Overloading)

 

같은 이름의 함수를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게  하는 것입니다.

 

예를 들어

필드 변수로 String name과 int age를 가지고 있는 Human 클래스가 있다고 가정해봅시다.

 

이 객체들을 여러개 만들고 싶은데  어떤 것은 이름만 알고, 어떤 것은 나이만 알고, 어떤 것은 이름,나이 모두 안다고 가정해봅시다.

 

그럼 생성자를 이렇게 여러개 만들어주는 것입니다.

 

public class Human
{
	private int age;
    private String name;
    
    public Human(int age)
    {
    	this.age = age;
    }
    
    public Human(String name)
    {
    	this.name = name;
    }
    
    public Human(int age, String name)
    {
    	this.age = age;
        this.name = name;
    }
}

 

이렇게 해주면 생성자에 나이만 매개변수로 넘겨주면 나이만 초기화시키고, 이름만 넘겨주면 이름만 초기화시키는 등

상황에 맞는 생성자가 호출이 됩니다.

 

이는 일반적인 메소드에도 똑같이 활용 가능하여 편하게 사용할 수 있습니다.

 

 

2. 오버라이딩 (Overriding)

 

상위 클래스가 가지고 있는 메서도를 하위 클래스에서 사용할 수 있는데 그 뿐 아니라 하위 클래스에서 메서드를 재정의해서 사용할 수도 있습니다.

 

이건 예제 코드를 바로 보도록 하겠습니다.

 

class Animal
{
	public int age;
    
    public void info()
    {
    	System.out.println("나이는" + age + "살 입니다.");
    }
}

class Human extends Animal
{
	public String languge;
    
    public void info()
    {
    	System.out.println("나이는" + age + "살 이고 사용할 수 있는 언어는 " + language + "입니다.");
    }
}

이렇게 재정의를 해주게되면 Human 클래스 객체는 info함수를 호출하면 Human클래스에서 재정의한 함수를 호출하게 됩니다.

 

이는 매우 유용하게 사용할 수 있는데

자바로 우리가 게임을 만들었다고 가정해봅시다.

 

그리고 Monster 클래스의 객체들이 잡힐 때마다 killed 메소드가 호출된다고 가정해봅시다.

이 때, killed함수들을 Monster클래스의 하위클래스에서 재정의해놓으면 모든 Monster클래스의 객체들을 묶어서 처리할 수 있습니다.

 

(이러한 이유로 업캐스팅된 객체들도 메소드를 호출하면 재정의된 메소드를 호출합니다.)

 

 

짧은 글이지만 도움이 되셨으면 좋겠습니다.

감사합니다.

 

 

 

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

네스티드(Nested) 클래스와 이너(Inner) 클래스  (0) 2023.02.03
매개변수의 가변 인자 선언  (0) 2023.02.03
열거형  (0) 2023.02.03
제네릭 (2)  (0) 2023.02.02
제네릭 (1)  (0) 2023.02.01