목차
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가 되어도 전달된 매개변수의 인스턴스의 각 메소드가 호출되는 것이 확인 가능하다.
'[프로그래밍언어] > JAVA' 카테고리의 다른 글
[자바 개념] 클래스 선언으로 이동하길 원할 경우 (0) | 2019.12.05 |
---|---|
[JAVA 개념] try, catch문에 대하여 알아보자 (0) | 2019.11.29 |
[JAVA] 변수명, 클래스명, 함수명 규칙에 대해 알아보자 (0) | 2019.10.21 |