반응형
728x170
객체 지향 프로그램에서 가장 혼동하기 쉬운 용어 중 하나가 오버로딩과 오버라이딩일 것이다. 지금부터 두 용어의 의미와 정확한 사용예를 들어 보면서 두 용어의 차이를 이해해 보자.
1.오버로딩
오버로딩은 우리말로 다중 정의라고 번역한다. 즉 여러개의 메서드로 만들 수 있다는 의미가 된다. 좀더 자세히 설명하면 한 클래스 내에서 같은 이름의 메서드를 인수와 메서드 안의 내용, 리턴값을 다르게 하여 여러 번 정의 하는 것이다.
예를 들어 보자.
ex)
public class Calc {
int plus(int a, int b) { <-- plus() 메서드의 인수가 2개이다.
int s = a + b;
return s;
}
double plus(double a, double b, double c) { <-- 인수가 3개이다.(메서드 이름은 같다)
double k = a + b + c; <-- 실행 내용도 달라졌다.
return k; <-- 리턴값도 다르다.
}
void plus() { <-- 인수가 없다.(메서드 이름은 같다)
System.out.println("더하기!"); <-- 실행 내용도 달라졌다.
}
}
위의 오버로딩에서 정의한 Calc 클래스를 이용하여 오버로딩한 메서드를 호출하는 프로그램을 작성해 보자. 오버로딩이 어떻게 적용되는지 쉽게 이해 할 수 있을 것이다.
ex)
public class CalcTest {
public static void main(String[] args) {
Calc calc = new Calc(); <-- calc 객체 생성.
calc.plus(); <- 인수가 없는 메서드를 호출함.
System.out.println(calc.plus(3, 5)); <- 인수가 두개인 메서드를 호출함.
System.out.println(calc.plus(2.5, 3.5, 5.5)); <- 인수가 세개인 메서드를 호출함.
}
}
실행 결과)
더하기!
7
12.0
이제 오버로딩이 무엇인지는 정확히 알았을 것이다. 다음은 오버라이딩에 대해서 알아보자.
2.오버라이딩
오버라이딩은 우리말로 재 정의 또는 덮어쓰기라고 번역한다. 상위 클래스의 메서드를 상위 클래스를 상속받은 하위 클래스에서 다시 정의 하는 것이다. 이때 메서드의 이름과 인수는 같으면서 메서드의 내용만 달라지는 것이다.
예를 들어 보자.
ex)
class Subject { <-- 상위 클래스
String name;
void printInfo() { <- printInfo() 메서드 정의
System.out.println("교과명: " + name);
}
}
class MajorSubject extends Subject { <-- MajorSubject는 Subject를 상속받은 하위 클래스
String targetGrader;
void printInfo() { <- printInfo() 메서드 오버라이딩(메서드의 이름, 인수 같고 내용만 다름)
super.printInfo(); <-- 상위클래스의 printInfo() 메서드 호출
System.out.println("타깃학년: " + targetGrader);
}
}
위에서 정의한 클래스들을 이용하여 객체를 만드는 프로그램을 작성해 보자. 오버라이딩이 어떻게 적용되는지 쉽게 이해 할 수 있을 것이다.
public class SubjectExample {
public static void main(String[] args) { <-- 메인 메서드
MajorSubject sub = new MajorSubject(); <-- sub 객체 생성
sub.name = "컴퓨터 프로그래밍";
sub.targetGrader = "1학년";
sub.printInfo(); <-- 하위 클래스의 printInfo() 메서드 호출
}
}
프로그램을 실행해 보면
실행결과)
교과명 : 컴퓨터 프로그래밍
타깃 학년 : 1학년
으로 나온다.
이제 오버로딩과 오버라이딩의 차이를 확실히 이해했을 것이다.
반응형
그리드형
'SW 배움터 > 자바' 카테고리의 다른 글
자바 문법 핵심만5 : 인스턴스 (0) | 2017.04.14 |
---|---|
자바 문법 핵심만3 : 멤버 메소드 (0) | 2017.04.07 |
자바 문법 핵심만2 : 클래스 (0) | 2017.04.06 |
자바 문법 핵심만1 : 변수 (0) | 2017.04.05 |