자바에는 다형성이라는 것이 있습니다.
다형성(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 |