[기술면접 대비] Override 와 Overload 를 설명해주실 수 있을까요?

김엄지·2024년 4월 4일
0

기술면접

목록 보기
2/4

[ 공부 목표 ]

  • 대답은 간단하게, 지식 습득은 깊이있게
    - 가능하다면 짧고 간결하게 대답하자.
    - 세부적인 지식에 대한 꼬리질문의 가능성을 생각해 깊이 있게 공부하자.
  • 음성메모를 활용하기
    - 두괄식으로 말하자.
    - 어떤 내용이나 주장이 분명하게 전달이 되었는지 확인하자.
    - 이해한 것을 바탕으로 자연스럽게 설명하는 연습을 하자.
    - 목소리의 강도, 발음 등 개선점 찾자.

2. Override 와 Overload 를 설명해주실 수 있을까요?

  • Override는 부모 클래스에서 상속받은 메소드를 자식 클래스에서 재정의하는 것이고, Overload는 같은 이름의 메소드를 다양한 매개변수로 정의하는 것이다.

✅ Overriding

부모가 가진 기능을 올라타서 덮어쓰기(재정의)를 했다.
자식 클래스가 부모 클래스를 상속받으면, 자식 클래스에서 부모 클래스의 메소드를 재정의할 수 있다.

  • 오버라이드 하고자 하는 메서드가 상위 클래스에 존재해야 한다.
  • 메서드 이름, 메서드 리턴형, 파라미터 개수, 파라미터의 자료형이 같아야 한다.
  • 상위 메서드와 동일하거나 내용이 추가되어야 한다.
class Cal{
	public int sum(int v1, v2){
    	return v1 + v2;
    }
}

class Cal3 extends Cal{
	// 부모가 가지고 있지 않은 메서드
    public int minus(int v1, v2){
    	return v1 - v2;
    }

	// 부모가 가진 메서드를 재정의 : Overriding
    public int sum(int v1, v2){
    	System.out.println("Cal3!!!");
    	return v1 + v2;
    }
}

public class InheritanceApp{
	public static void main(String[] args) {
    Cal c = new Cal();
    System.out.println(c.sum(2,1));
    
    Cal3 c3 = new Cal3();
    System.out.println(c3.sum(2,1));
    System.out.println(c3.minus(2,1));
    System.out.println(c3.sum(2,1));
    }
}
// 출력값
// 3
// Cal3!!!
// 3
// 1
// Cal3!!!
// 3

✅ 오버로딩 Overloading

형태가 다르다면, 같은 이름의 메서드를 과적할 수 있다.
같은 이름의 메서드를 매개변수만 다르면 얼마든지 여러개 정의하고 사용할 수 있다.

  • 메서드 이름이 같아야한다.
  • 리턴형이 같아도 되고 달라도 된다.
  • 파라미터 개수가 달라야 한다.
  • 파라미터 개수가 같을 경우, 데이터타입이 달라야 한다.
class Cal{
	public int sum(int v1, v2){
    	return v1 + v2;
    }
    
    // Overloading
    public int sum(int v1, v2, v3){
    	return v1 + v2 + v3;
    }
}

class Cal3 extends Cal{
    public int minus(int v1, v2){
    	return v1 - v2;
    }

    public int sum(int v1, v2){
    	System.out.println("Cal3!!!");
    	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,1,1)); // 출력
    
    Cal3 c3 = new Cal3();
    System.out.println(c3.sum(2,1));
    System.out.println(c3.minus(2,1));
    }
}
// 출력값
// 3
// 4 
// Cal3!!!
// 3
// 1

마무리

프로그래밍 공부를 시작하면서, 매번 overriding과 overloading의 차이를 잘 구분하라고 하셨던게 기억난다. 아직까지도 설명 못하고 있다가 오늘에서야 비로서 확실히 외우고 갈 수 있겠다 !
Overriding 개념을 이해하기 위해서는 상속에 대해서 알아야하고, 상속 개념을 이해하기 위해서는 객체지향 프로그래밍에 대해서 알아야했다.
Overloading은 상속과 직접적 관련이 없다.(상속과 Overloading은 함께 사용될 수 있다.)

글이 날라가서 처음부터 다시 쓰는.. 이제 오버라이딩과 오버로딩은 절대 안잊어버리겠다


참고자료

profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글