반응형
자바를 공부하다 보면 헷갈리는 용어가 많은데, 특히 오버로딩(Overloading)과 오버라이딩(Overriding)이 비슷해서 많이 헷갈린다. 그런데, 사실 둘은 아무 관계 없는 내용이다. 둘의 차이점을 알아보자.
오버로딩(Overloading) | 오버라이딩(Overriding) | |
접근 제어 | 달라도 됨 | 같음 |
반환형 | 달라도 됨 | 같음 |
메서드 이름 | 같음 | 같음 |
매개변수 | 달라도 됨 | 같음 |
1. 오버로딩(Overloading)
같은 클래스 내에서 매소드를 확장하기 위한 것. 메소드 명은 같지만, 매개 변수, 반환형 등을 다르게 하여 편리하게 사용 가능하다.
- 메서드 이름이 같다.
- 매개 변수, 반환형(return)은 달라도 된다.
- 같은 클래스 내에 선언 되어야 한다.
- 만약 매개 변수의 개수가 같다면 자료형이 달라야 하고, 자료형이 모두 같다면 매개 변수의 개수를 다르게 해야 한다.
코드 예시를 통해 개념을 익혀보자.
class Hello {
void overL() {
System.out.println("오버로딩을 위한 메서드");
}
void overL(String str){
System.out.println("매개 변수 타입이 String 이고, 값은 " + str);
}
void overL(int k){
System.out.println("매개 변수 타입이 int 이고, 값은 " + k);
}
int overL(int x, int y){
System.out.println("반환형이 다른 메서드");
return x;
}
}
public class HelloJava {
public static void main(String[] args) {
Hello ov = new Hello();
ov.overL();
ov.overL("오버로딩 예제");
int num = ov.overL(5, 6);
System.out.println(num);
}
}
2. 오버라이딩(Overriding)
부모 클래스의 메서드를 자식 클래스에서 메서드를 '재정의'하는 것이다.
- 메서드 명, 매개 변수, 반환형, 접근 제어자가 모두 같다.
- 상속 받은 부모 클래스의 메서드를 재정의 하는 것이다. 다른 클래스의 메서드를 재정의 하는 것이 아니다!
class Animal {
public void makeSound() {
System.out.println("동물이 소리를 내고 있습니다.");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("강아지가 멍멍 소리를 내고 있습니다.");
}
}
public class HelloJava {
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
animal.makeSound(); // "동물이 소리를 내고 있습니다." 출력
dog.makeSound(); // "강아지가 멍멍 소리를 내고 있습니다." 출력
}
}
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
인텔리제이 - 실행환경 Gradle에서 Intellij로 변경하기 (0) | 2024.01.22 |
---|---|
[Java] 추상 클래스 실습 (추상 클래스 vs 인터페이스) (0) | 2023.07.02 |
Java JDK 1.8 다운로드 및 환경변수 설정과 Intellij Java 설정 (0) | 2021.08.25 |