프리 정보 컨텐츠

Overloading 과 Overriding 오버로딩과 오버라이딩 차이점 본문

코딩개념 정리

Overloading 과 Overriding 오버로딩과 오버라이딩 차이점

쏜스 2020. 12. 25. 13:01

오버 로딩(Overloading) , 오버 라이딩(Overriding) 비슷한 용어로 보이는 오버 로딩과 오버 라이딩은 비슷하지만 다른 점이 있다. 자주 헷갈릴 수 있으니 정확히 이해하고 넘어가자!

오버로딩(Overloading)


하나의 클래스에 같은 이름의 메소드들을 여러 가지 형태로 정의

매개변수의 유형과 개수를 다르게 지정하여 사용

 

코드를 예시로 오버로딩을 알아보자

 

public class Overloadingtest {

	// test() 호출
	void test(){
		System.out.println("매개변수 X");
	}
	
	// test에 매개변수 int형 2개 호출
	void test(int a, int b){
		System.out.println("매개변수 "+ a + "와 " + b);
	}
	
	// test에 매개변수 double형 1개 호출
	void test(double d){
		System.out.println("매개변수 " + d);
	}
}

 

Overloadingtest 클래스 내에서 같은 이름 메소드들의 매개변수 유형과 개수다르게 지정하여 사용하였다.

 

public class test {

	public static void main(String[] args) {
		
		// Overloadingtest 객체 생성
		Overloadingtest ob = new Overloadingtest();
		
		// test() 호출
		ob.test();
		
		// test(int a, int b) 호출
		ob.test(10, 20);
		
		// test(double d) 호출
		ob.test(50);
		
		// test(double d) 호출
		ob.test(123.4);
	}
}

 

위의 내용 Overloadingtest 클래스에서 다르게 지정한 함수를 호출하였다.

매개변수에 따라 매칭되어 함수를 실행시킨 모습을 볼 수가 있다. 실행결과는 잘 작동한다.

 

  • 장점

오버로딩된 메소들로 형변환과 같은 작업 없이 편리함 개발 가능.

클래스내에서 메소드 이름 절약 가능

메서드의 이름을 보고 같은 기능 예측 가능

 

오버라이딩(Overriding)


상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의

상위 클래스가 가지고 있는 메소드하위 클래스가 재정의해서 사용

 

즉, '부모클래스의 메소드는 무시' , 자식 클래스의 메소드 기능을 사용하겠다.

 

코드를 예시로 오버로딩을 알아보자

 

public class Employee{
	
	public String name;
	public int age;
	
	// print() 메소드
	public void print(){
		System.out.println("사원의 이름은 "+this.name+ "이고, 나이는" + this.age+"입니다.");
	}	
}


// Employee 상속
public class Manager extends Employee{
	
	String jobOfManage;
	
	// print() 메소드 오버라이딩
	public void print(){
		System.out.println("사원의 이름은 "+this.name + "이고, 나이는" + this.age + "입니다.");
		System.out.println("관리자 "+this.name+"은 "+this.jobOfManage+" 담당입니다.");
	}

}

 

public class test {

	public static void main(String[] args) {

		// Manager 객체 생성
		Manager lee = new Manager();
		lee.name = "하이언";
		lee.age = 30;
		lee.jobOfManage="프로젝트 매니저";
		// Overriding된 Manager객체의 print()호출
		lee.print();
	}
}

 

Employee 클래스에서 print() 함수를 선언했다.

Manager에서 Employee를 상속한 후에 print 메소드를 재정의(오버라이딩) 하였다.

 

main 함수에서 Manager 객체 생성 후, print() 메소드를 호출해서

결과는 오버라이딩된 Manager 객체의 print() 메소드가 호출된다.

 

실행결과는 잘 작동한다.

 

  • 장점

같은 이름으로 body를 변경하고 내용을 수정함을 통해서 프로그램의 리소스를 줄여준다.

 

오버로딩과 오버라이딩의 성립조건

Comments