반응형
오버로딩(Overloading)이란?
C#, C++, 자바(Java) 등의 다양한 프로그래밍 언어에서 사용되는 함수의 특징으로, 같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 한다. (C언어는 지원하지 않음)
출처 : 위키백과
오버로딩은 함수의 이름이 동일하나 투입되는 매개변수의 타입이나 수량이 다른 매서드들을 말한다.
class Animal {
void dog(){
System.out.println("강아지는 귀엽습니다.");
}
void dog(String str){
System.out.println(str+"은 귀엽습니다.");
}
void dog(int age){
System.out.println("강아지의 나이는 " + age + "살 입니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal ani = new Animal();
ani.dog();
ani.dog("토이푸들");
ani.dog(3);
}
}
위의 코드를 실행하면 아래와 같이 입력 변수의 타입에 따라 다른 매서드가 실행되었음을 확인할 수 있습니다.
강아지는 귀엽습니다.
토이푸들은(는) 귀엽습니다.
강아지의 나이는 3살 입니다.
여기서 주의할 점은 리턴 타입이 다르더라도 입력되는 매개변수의 수량과 타입이 동일하면 성립하지 않는다
class Animal {
String dog(String str){
return "강아지의 이름은 " + str + "입니다.";
}
void dog(String str){
System.out.println(str+"은 귀엽습니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal ani = new Animal();
ani.dog("토이푸들");
}
}
위와 같이 입력값이 같은 매서드를 오버로딩 할 경우 컴파일 에러가 발생한다.
오버라이딩(Overriding)이란?
객체 지향 프로그래밍에서 서브클래스 또는 자식 클래스가 자신의 슈퍼클래스들 또는 부모 클래스들 중 하나에 의해 이미 제공된 메소드를 특정한 형태로 구현하는 것을 제공하는 언어의 특징이다.
출처 : 위키백과
오버라이딩은 상위 클래스의 매서드를 하위 클래스에서 재정의해서 사용하는 방식을 이야기한다.
여기서 주의할 점은 오버라이딩할때의 매서드는 상위 클래스 매서드와 이름, 매개변수 수, 매개변수 타입, 리턴 타입이 동일해야한다.
class Animal {
void ani() {
System.out.println("동물은 소중합니다.");
}
}
class Dog extends Animal {
@Override
void ani() {
System.out.println("강아지는 소중합니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal Ani = new Animal();
Dog Puppy = new Dog();
Ani.ani();
Puppy.ani();
}
}
위의 코드를 실행하면 Dog클래스의 객체는 Animal 클래스의 상속을 받았지만 ani() 매서드를 호출할때 오버라이딩된 결과 값을 리턴 받았음을 확인할 수 있습니다.
동물은 소중합니다.
강아지는 소중합니다.
정리
오버로딩과 오버로딩의 차이는 아래의 표와 같이 정의할 수 있다.
오버로딩(Overloading) | 오버라이딩(Overriding) | |
매서드 이름 | 일치해야함 | 일치해야함 |
매개변수의 개수, 타입 | 부분적으로 동일해도 되나 전부 일치하면 안 됨 | 일치해야함 |
리턴 타입 | 무관 | 일치해야함 |
오버로딩은 동일한 함수명으로 처리하고 싶은 일이 있는 경우에 오버라이딩은 상위 클래스의 매서드를 재정의 해서 사용할 때 사용하면 된다.
반응형
'Back-end > JAVA' 카테고리의 다른 글
[JAVA] 부동소수점에 대해 - 0.1 + 0.2 = 0.300...4? (0) | 2024.07.12 |
---|---|
[JAVA] 싱글톤 패턴(Singleton pattern) 사용법과 장단점 (0) | 2024.07.09 |
[JAVA] 자바의 인터페이스(interface)란? 게임으로 알아보는 사용이유 (0) | 2024.07.04 |
[JAVA] 접근 제어자(public, protected, default, private) (0) | 2024.07.03 |
[JAVA] 강한 결합(Strong Coupling)과 약한 결합(Weak Coupling) (0) | 2023.08.01 |