강의 소개
현재 수강하고 있는 멀티캠퍼스 k-digital 지능형 웹서비스 풀 스택 과정을 수강하며 적은 내용입니다.
교재로는 자바의 정석을 사용하고 있습니다.
오버로딩
오버 로딩(overloading, 중복 정의)
1개의 클래스에 포함된 여러 메서드의 관계이다.
같은 이름의 메서드가 여러 개 정의되지만 '매개변수'에 따라서 기능을 다양하게 제공하기 위해서 사용된다.
반드시 메서드 이름은 같고 매개변수는 달라야 한다(매개변수의 개수 또는 타입에서 달라야 한다)
반면, return타입이나 modifier과는 오버 로딩은 무관하다.
[오버 로딩 예제 코드]
class ArithMetic {
int add(int i, int j) {
return i + j;
}
double add(double i, double j) {
return i + j;
}
String add(String i, String j) {
return i + j;
}
}
public class OverloadingTest {
public static void main(String[] args) {
ArithMetic a = new ArithMetic();
double r1 = a.add(1.1, 2.3);
String r2 = a.add("자바", "스프링");
int r3 = a.add(1, 2);
double r4 = a.add(3.14, 1); // 두 번째 매개변수 1이 자동형변환으로 double 로 변경됨
System.out.println(r1); // 3.4
System.out.println(r2); // 자바스프링
System.out.println(r3); // 3
System.out.println(r4); // 컴퓨터의 오차범위 때문에. 4.140000000000001
}
}
ArithMetic 클래스에서 add()라는 동일한 이름을 가진 메서드를 3개 만들었다. 이 메서드들은 이름은 같지만 매개변수는 int, double, String으로 타입이 서로 달라 오버 로딩이 되었다.
따라서 이를 출력해본다면 r1은 3.4로 double 타입이 반환되었고, 이를 통해 순서로 2번째에 해당되는 add메서드가 실행되었음을 확인할 수 있다.
또한, r2는 "자바스프링"이 출력되었는데, 이를 통해 String 타입을 매개변수로 받았던 3번째 add매서드가 실행되었음을 알 수 있다.
오버 라이딩
오버 라이딩(overriding, 재정의)
상속관계에 있는 2개 클래스의 관계이다.
부모로부터 상속받은 메서드의 실행 내용을 상속받는 클래스(= 자식 클래스)에 맞게 변경하는 것이다.
특징
- 부모 클래스와 자식 클래스의 이름, 매개변수 리스트, 리턴 타입, modifier 모두 같은 경우, 자식(본인) 클래스의 메서드가 우선한다.
- @Override 어노테이션을 사용하여 컴파일러에게 미리 오버 라이딩을 할 것임을 알려줄 수 있다. 이 어노테이션은 생략해도 무방하다.
[오버 라이딩 예제 코드]
// 부모 클래스
class Employee /*extends Object*/{
void work() {
System.out.println("직원입니다");
}
}
// 자식 클래스
class Manager extends Employee{
// work기능을 manager에서 재정의(오버라이딩)하면 본인(즉, 자식) 클래스 내 메서드가 우선되어 실행.
void work() {
System.out.println("매니저입니다");
}
}
public class ManangerTest {
public static void main(String[] args) {
Manager manager1 = new Manager();
manager1.work(); // 매니저입니다
}
}
Employee클래스를 Manager클래스가 extends로 상속받았다. 따라서 Employee는 부모 클래스가, Manager는 자식 클래스가 되는데
부모, 자식 모두 work() 메서드를 가지고 있다.
이 경우 Manager의 인스턴스를 생성하여 manager.work()를 해보면 "매니저입니다"가 출력된다.
즉, 부모 클래스에서 상속받은 work메서드가 실행되었다면 "직원입니다"가 출력되었을 테지만
동일한 이름을 가진 메서드를 자식 클래스에서 재정의(= 오버라이딩) 하여 자식클래스 안에 있는 work메서드가 호출되었음을 확인할 수 있다.
오버 로딩, 오버 라이딩 주의점
오버 라이딩은 상속과 관련된 개념이지만, 오버 로딩은 상속과 무관하다.
출처: 자바의 정석(남궁 성 저), 멀티캠퍼스
'교육, 학습 > 멀티캠퍼스_풀 스택' 카테고리의 다른 글
JAVA 문법 - super 와 super() 비교, super를 활용한 메서드 오버 라이딩 (0) | 2022.01.06 |
---|---|
JAVA 문법 - 상속, 생성자 개념과 비교, 주의점(is - a, has - a) (0) | 2022.01.04 |
JAVA 문법 - 제어자(modifier)중 static의 특징, 자바를 run할 때 실행되는 순서 (0) | 2021.12.31 |
JAVA 문법 - String클래스 동등비교시 equals 메서드 사용하는 이유 (0) | 2021.12.30 |
JAVA 문법 - 인스턴스 생성시 스택, 힙 상태변화 (0) | 2021.12.30 |
댓글