본문 바로가기
JAVA

오버 로딩 ,오버 라이딩

by zkzk7290 2024. 9. 9.
반응형
overloading : 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것- 재사용

 

1. 오버로딩의 성립 조건
- 메서드 이름이 같아야 함.!!!!!!
- 매개변수의 개수 또는 타입이 달라야 함.
- 반환 타입은 관계없음.
 
2. 장단점 
 오버로딩의 장점
 - 사용자가 매개변수의 순서를 외우지 않아도 사용 가능 (편의성)
오버로딩의 단점
중복적으로 의미 없이 생성하는 경우, 실질적으로 필요한 구현 메서드 찾기에 어려움 (복잡성)

 오버 로딩 사용 이유
1. 메서드가 수행하는 기본적인 작업이 동일할 때, 같은 이름 사용 가능 코드를 더 명확하고 가독성 있게 작성 가능 
2. 코드의 재사용성이 높아짐
3. 컴파일 시 타입 체크를 강화 - 올바른 매개변수 타입을 가진 메서드를 선택

 

 

class Calc1 {
	int a, b;
	int c, d;
	double x, y;
	
	// 두 정수를 "더하는 메서드"
	int add (int a, int b) { return a + b; }
	
	// 실제 값 차이 여부와 반환타입의 차이 여부는 오버로딩과 관련 X
	// >> 반드시!! 매개변수의 개수 또는 타입이 달라야 함!!
	// long add (int c, int d) { return c + d; } - Error 
	
	// ===매개변수의 타입 차이===
	double add(double x, double y) { return x + y; }
	double add(int a, double y) { return a + y; }
	double add(double x, int b) { return x + b; }
	
	// ===매개변수의 개수 차이===
	int add (int a, int b, int c) { return a + b + c; }
	
	
}

public class Overloading01 {
	public static void main(String[] args) {
		Calc1 calculator = new Calc1();
		System.out.println(calculator.add(10, 20));
		
		System.out.println(calculator.add(10.0, 20.5));
		System.out.println(calculator.add(10, 20.3));
		System.out.println(calculator.add(10.1, 20));
		
		System.out.println(calculator.add(10, 20, 30));
	}
}

같은 타입 매개 변수 이름만 변경하면 Error - 타입이든 개수든 변경해 줘야 같은 메서드라고 인식을 못한다

 

출력 값

 

30

30.5

30.3

30.1

60

 


오버라이딩(Overriding):자식 클래스가 부모 클래스에서 정의된 "메서드"를 자신의 상황에 맞게 "재정의"
상속 관계에 있는 클래스들 사이에서 사용
1. 오버라이딩 특징
메서드의 이름, 매개변수 , 반환 값  일치
부모 클래스에서 정의된 메서드와 동일한 이름, 매개변수 구성을 가져야 함
반환 타입은 같거나 자동 형 변환이 가능한 것이어야 함
@Override (어노테이션, 주석) : 오버라이딩 된 메서드임을 명시적으로 표시

2. 오버라이딩 구현 방법
부모 클래스의 상속받은 메서드를 자식 클래스에서 다시 정의
메서드의 이름, 매개변수를 일치, 반환타입은 같거나 자동 형 변환 가능하게 작성
메서드 위에 @Override 어노테이션을 작성

3. 오버라이딩을 사용하는 이유
다형성 구현: 하나의 이름으로 여러 기능을 수행하는 코드 작성
재사용성 확장성 향상: 기존 코드 변경 없이, 새로운 기능을 추가하거나 변경 가능
class AnimalClass {
	void sound() {
		System.out.println("동물이 소리를 냅니다.");
	}
}

class DogClass extends AnimalClass {
	// 어노테이션
	// : 코드에 메타데이터를 제공하는 방법
	
	// @Override
	// : 현재 메서드가 부모 클래스의 메서드를 오버라이딩 한다는 것을 명시
	@Override
	void sound() {
		System.out.println("개가 멍멍하고 짖습니다.");
	}
}

class CatClass extends AnimalClass {
	@Override
	void sound() {
		System.out.println("고양이가 야옹하고 웁니다.");
	}
}

public class Overriding {
	public static void main(String[] args) {
		
		DogClass dog1 = new DogClass();
		dog1.sound();
		
		CatClass cat1 = new CatClass();
		cat1.sound();
		}
        }

 

 총정리 
== 오버로딩 VS 오버라이딩 == 
: 모두 메서드의 이름을 재사용하는 방법 (다형성)
 1) 오버로딩
 - 같은 클래스 내에서 같은 이름을 가진 메서드를 여러 개 정의
- 메서드명이 동일, 매개변수의 타입, 개수, 순서 중 적어도 하나 이상은 달라야 함
 - 메서드의 동작을 다양한 상황에 맞게 조정

 2) 오버라이딩
- 상속 관계에 있는 클래스에서 사용
 - 메서드의 시그니처(이름, 매개변수, 반환타입)가 같아야 함
 - 메서드의 동작을 변경하거나 확장 + @Override 어노테이션을 사용 >> 컴파일러에게 전달 }
반응형

'JAVA' 카테고리의 다른 글

접근제한자  (1) 2024.09.23
OOP 객체 지향 프로그램  (1) 2024.09.20
반복문  (0) 2024.09.06
조건문 (if~else, switch)  (0) 2024.09.06
연산자 (Operation)  (0) 2024.09.04