목차

1. 영어 문법적 해석

2. 오버로딩과 오버라이딩에 대한 각각에 대한 분석

3. 오버로딩과 오버라이딩에 차이점 분석

4. 예제분석

텍스트 추가


텍스트 추가

1. 영어 문법적 해석

자바를 포함한 여러 프로그래밍 언어를 공부하다보면 그 근원이 외국이다보니 영어를 분석하면 해당 개념에 대한 대략적인 이해를 할 수가 있다.

먼저 아래 오버로딩을 네이버에서 검색해볼 때 아래와 같은 뜻으로 확인된다.

 

- 오버로딩(overloading) : 과적

한 클래스 내에서 동일한 이름의 메소드를 둘 이상 정의하는 것은 허용되지 않는다.

그러나 매개변수의 선언이 다르면 가능하다. 그리고 이것을 메소드 오버로딩이라한다.

 

- 오버라이딩(overriding) : 다른 무엇보다 더 중요한, 최우선시 되는(쉽게 무효화된다고 이해)

상위 클래스에 정의된 메소드를 하위 클로스에서 다시 정의하는 행위를 가르켜 메소드 오버라이딩이라고 하는데, 여기서 말하는 오버 라이딩은 무효화 시키다의 뜻으로 해석된다.

 

 

 

2. 오버라이딩과 오버로딩의 각각의 분석

 

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가

 

오버로딩(overloading)

오버라이딩(overridng)

- 메소드의 이름, 메소드의 매겨변수 정보 를 참조하여 메소드를 찾게된다.

- 동일한 이름인 메소드가 둘 이상 존재하여도 매개변수의 정보가 다르다르다면 문제되지않는다.

- 구체적으로 매개변수의 정보가 다르다는 뜻은 매겨변수의 수 또는 형(type)이 달라야 한다.

- 예를 들어 void naver(int a), void naver(int a, int b), void naver(double a)와 같이 매개변수의 정보가 다르다면 선언시 문제가되지않는다.

- 상위 클래스에 정의된 메소드를 하위 클래스에 다시 정의하는 행위를 가르켜 메소드 오버라이딩이라한다.

- 메소드의 이름, 메소드의 반환형, 메소드의 매개변수 선언

-> 이 세가지가 같아야 오버라이딩이 성립된다.

 

 

※오버라이딩에 대해서 자세히 일아보자

오버로딩의 경우 상기 표에 설명된 것과 같이 간단하게 설명이 가능하지만 오버라이딩의 경우 간단한 소스코드 분석과 함께 설명이 가능할 것 같다.

아래 소스코드를 살펴보자.

 

class Cake{
public void yummy(){
System.out.println("Yummy Cake");
}
}

// extends : 상위 클래스 참조시 사용!
class CheeseCake extends Cake{
public void yummy(){
System.out.println("Yummy Cheese Cake);

class YummyCakeOverriding {
public static void main(String[] args) {
Cake c1 = new CheeseCake();
CheeseCake c2 = new CheeseCake();

c1.yummy();
c2.yummy();
}
}

 

 

 

 

위의 CheeseCake 클래스는 아래와 같다.

 

// extends : 상위 클래스 참조시 사용!
class CheeseCake extends Cake{
public void yummy(){
System.out.println("Yummy Cheese Cake);

 

 

해당 클래스는 Cake를 상속하면서 Cake에 정의된 yummy메소드에 정의된 다음 세가지가 같은 메소드를 정의하였다.

- 메소드의 이름, 메소드의 반환형, 메소드의 매개변수 선언

-> 이 세가지가 같아야 메소드 오버라이딩이 성립된다.

 

즉 Cake의 yummy 메소드를 CheeseCake의 yummy 메소드가 오버라이딩 하였다. 그리고 오버라이딩을 하면 참조 변수 형에 상관없이 오버라이딩 한 메소드가(CheeseCake의 yummy 메소드가) 오버라이딩된 메소드(Cake의 yummy 메소드를) 대신하게 된다.

 

상기 코드의 c1의 경우 Cake형 참조 변수이니 위 문장의 경우 Cake의 yummy 메소드가 호출되어야 한다고 생각 할 수 있다. CheeseCake 인스턴스를 참조하고 있는 상황이라도 말이다. 그러나 Cake의 yummy 메소드는 오버라이딩(무효화)되었기 때문에 이 경우에는 CheeseCake의 yummy 메소드가 대신 호출된다.

 

오버로딩과 오버라이딩의 차이점?!

 

 

3. 오버로딩과 오버라이딩의 차이점 분석

자 드디어 마지막이다. 오버로딩과 오버라이딩의 차이점을 간단히 생각하면 아래와 같다.

- 오버로딩은 메소드 이름은 같으나 매개변수가 달라야한다.

- 오버라이딩은 상위 클래스의 정의를 하위 클래스에 다시 정위하는 행위

메소드 이름, 반환형, 매개변수 이 세가지가 모두 같아야한다.

 

위와 같은 차이만 알아도 오버로딩과 오버라이딩을 햇갈리지않게 구분할 수 있을 것 같다.

 

* 위 글은 윤성우 선생님의 열혈 자바 책을 참조하여 작성하였습니다.

 

4. 예제분석

class Box {
    public void wrap() { 
        System.out.println("Simple Wrapping");
    }
}

class PaperBox extends Box {
    public void wrap() {
        System.out.println("Paper Wrapping");
    }
}

class GoldPaperBox extends PaperBox {
    public void wrap() {
        System.out.println("Gold Wrapping");
    }
}

class Wrapping {
    public static void main(String[] args) {
        Box box1 = new Box();
        PaperBox box2 = new PaperBox();
        GoldPaperBox box3 = new GoldPaperBox();a
        
        wrapBox(box1);
        wrapBox(box2);
        wrapBox(box3);
    }

    public static void wrapBox(Box box) {
        box.wrap();
    }
}

 

 

 

*위의 예제 결과를 보면 알 수 있다시피 wrap이 오버라이딩되어 아래와 같이 각 클래스의 wrap이 호출되는 것을 확인할 수 있다.

wrapBox에 매개변수가 Box box가 되어도 전달된 매개변수의 인스턴스의 각 메소드가 호출되는 것이 확인 가능하다.

 

+ Recent posts