개발 일기

Overriding vs Overloading 본문

Tech/Interview

Overriding vs Overloading

flow123 2022. 2. 9. 11:20

오버라이딩: 상속받은 부모 클래스의 기능을 재정의한다.

용도: 상위 클래스에서 정의한 메서드가 하위 클래스에서 구현할 내용과 맞지 않을 때, 하위 클래스에서 메서드를 재정의 한다. 오버라이딩을 하려면, 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 같아야 한다. 그렇지 않으면 자바 컴파일러가 재정의한 메서드를 기존 메서드와 다른 메서드로 인식하기 때문이다. 

@Override 라는 어노테이션을 쓰면, 이 메서드가 재정의된 메서드임을 컴파일러에게 알려줄 수 있다. 

만약 메서드의 선언부가 다르다면, 컴파일 오류가 발생해서 실수를 막아준다.  

일반적인 주석과 다르게 검증하는 기능을 한다. 

 

오버로딩: 상속과는 상관없고, 기존에 없던 새로운 메서드를 정의하는 것이다.

기존에 존재하는 메소드와 같은 이름의 메소드를 복수로 탑재하게 된다. 

같은 이름의 메소드 여러개를 과적할 수 있다는 점이 자바의 특징이기도 하다 (c언어에서는 함수 명이 고유하게 존재해야 한다). 매개변수의 차이로 형태를 다르게 해서 구현한다. 

 

이 방법이 가능한 이유는 컴파일 + 인터프리터가 통합된 방법이기 때문이다. Java Interpreter가 바이트 코드로 쓰여진 파일의 코드를 한 줄씩 읽어내려가면서 실행하기 때문이다. 

파라미터를 다르게 해서 동일한 메서드 이름으로 여러 생성자를 생성하는 사례도 오버로딩에 해당한다. 

 

오버로딩의 장점? 

(1) 같은 기능을 하는 메소드를 하나의 이름으로 사용 가능 

메소드를 따로 구현하는 번거로움을 막는다. 

(2) 메소드 이름을 절약할 수 있다 (네이밍 고민 시간도 줄여준다. ) 

 

예시를 보자. 

public class Cal {
public int sum(int v1, int v2) {
    return v1+v2;
    }
    //Overloading 
    public int sum(int v1, int v2, int v3) {
    return v1+v2+v3;
    }

Cal3 는 Cal 을 상속받은 자식 클래스다. 

public class cal3 extends Cal {
	//Overriding 
public int sum(int v1, int v2) {
    System.out.println("Cal3!!"); //Print를 함으로써 재정의해주었다. 
    return v1+v2; 
    }
public class InheritanceApp{
	public static void main(String[] args) {
    Cal c = new Cal();
    System.out.println(c.sum(2,1)); //첫번째 메서드 출력
    System.out.println(c.sum(2,3,1)); //두번째 메서드 출력
    }
}

,

'Tech > Interview' 카테고리의 다른 글

접근자의 종류와 기능  (0) 2022.02.09
Primitve vs Reference  (0) 2022.02.08
Comments