728x90
다형성 : 하나의 메서드나 클래스가 있을 때, 그것이 다양한 방법으로 동작하는것
자바는 오버로딩과 오버라이딩을 통해서 다형성을 지원한다.
오버로딩(Overloading)
- 같은 이름의 메서드 여러개를 가지면서, 매개변수의 유형과 개수를 다르게 사용하는것
오버라이딩(Overriding)
- 상위 클래스(부모클래스)가 가지고 있는 메서드를, 하위클래스(자식 클래스)가 재정의 해서 사용하는 것.
▶오버로딩(Overloading)
같은이름의 메서드를 여러개 정의하고 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있도록 하는 방식이다.
//오버로딩 예제
public class Test {
public void overloadingTest(){
System.out.println("매개변수 없지롱");
}
protected void overloadingTest(int a){
System.out.println("매개변수 int a 있지롱" + a);
}
void overloadingTest(String b){
System.out.println("매개변수 String b 있지롱" + b);
}
}
여기서 중요한것은 메서드의 이름은 같고, 매개변수의 개수나 타입이 달라야한다.
오버로딩된 각 메서드의 접근 제어자를 public, protected,default, private으로 다르게 지정해줘도 상관없다.
하지만 같은 매개변수 개수와 타입을 가지면서 접근제어자만 다르게 한다고 오버로딩이 되는것이 아니다.
//오버로딩이 아닌 예제
public class Test {
public void overloadingTest(int a){
System.out.println("매개변수 int a 있지롱" + a);
}
protected int overloadingTest(int b){
System.out.println("매개변수 int b 있지롱" + b);
return b;
}
}
추가로 매개변수는 같고 반환 타입이 다른경우도 오버로딩이 아니다.
▷ 오버로딩을 왜 사용하나
- 같은 기능을 하는 메서드를 하나의 이름으로 사용하기위해서
- 메서드의 이름을 절약할 수 있기 때문에
- 비슷한 동작을 하는 메서드들에 대해 동일한 이름을 사용함으로써 코드베이스의 일관성을 유지할 수 있다. 코드를 이해하고 유지보수하기 쉽다.
▶ 오버라이딩(Overriding)
상위클래스로부터 상속받은 메서드의 동작을 재정의 하는것
상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것 처럼
상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에서 사용 가능
메서드의 이름이 같고, 매개변수가 같고, 반환형이 같은 경우게 상속받은 메서드를 재정의 하는것
을 오버라이딩이라고 할 수 있다.
// 상위클래스인 Animal 클래스 정의
class Animal {
// 소리를 내는 메서드
public void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// 하위클래스인 Dog 클래스 정의
class Dog extends Animal {
// 상위클래스의 makeSound 메서드를 오버라이딩
@Override
public void makeSound() {
System.out.println("강아지가 멍멍 짖습니다.");
}
}
오버라이딩의 특징
- 상위 클래스의 메서드보다 접급제어자를 더 좁은 범위로 변경 불가
- 상위 클래스의 메서드보다 더 큰 범위의 예외 선언 불가
- 상위 클래스의 static메서드는 클래스에 속하기때문에 상속되지않고 오버라이드되지 않음
- static메서드에 대해서는 다형성이 적용되지 않음
- final이 지정된 메서드도 오버라이드 될 수 없음
- final은 하위 클래스가 해당 메서드를 재정의 할 수 없도록 하기 위해서 사용됨
- private이 붙은 메서드는 상속자체가 불가능하기 때문에 오버라이드 될 수 없음
▶@Override란? 이걸 왜 사용할까?
@Override
- 부모타입의 메소드를 재정의 했음을 의미한다.
- 메소드 선언에만 달 수 있다.
사용하는 이유
- 컴파일 타임 검사: @Override 어노테이션을 사용하면 컴파일러가 해당 메서드가 상위클래스에서 상속된 메서드를 정확하게 오버라이딩하는지를 검사할 수 있다. 만약 오버라이딩이 올바르지 않은 경우 컴파일러가 오류를 발생시킨다.
- 코드 가독성: @Override 어노테이션은 코드를 읽는 사람에게 해당 메서드가 오버라이딩되었음을 명확하게 알려준다. 따라서 코드를 이해하고 유지보수하는 데 도움이 된다.
- API 문서 생성: @Override 어노테이션을 사용하면 자바 API 문서 생성 도구가 오버라이딩된 메서드를 쉽게 식별할 수 있다. 이는 코드 문서화를 용이하게 만들어 준다.
728x90
'학과 공부 > Java' 카테고리의 다른 글
[Java] JVM에 대해서 알아보자 (0) | 2024.02.22 |
---|---|
[Java] GC(Garbage Collector)에 대해서 알아보자 (0) | 2024.02.22 |
[Java] 자바 언어 시작하기(JDK 설치, 자바 환경변수 설정) (1) | 2024.02.04 |