
| 오버로딩(Overloading) |
| "과하다, 과적하다" 라는 뜻 한 메소드(생성자)를 각가 다른 매개변수를 주어서 중복하여 선언 한 것. |
class Func {
void func() {...}
void func(int num) {...}
void func(double num) {...}
void func(String str) {...]
}
같은 이름을 가졌지만, 서로 다른 "매개변수"를 가진 메소드나 생성자를 선언할 때 "오버로딩" 한다고 말한다.

자바가 알아서 형에 맞는 메소드를 찾아서 출력을 한다.
오버로딩 하는 이유 예제-1
| 계산을 해주는 메소드인 caclEngine 이라는 메소드가 있는데, 이 메소드에 int 값을 넣으면 int형으로 값을 계산해서 반환하고, double값을 넣으면 double 형으로 값을 계산해서 반환하도록 해야한다고 한다. |
위와 같은 상황일 때 오버로딩이 없을 때는 "int형 calcEngine"과 "double형 calcEagine"을 이름이 다르게 따로 만들어야 한다. 하지만 오버로딩이 있으면 아주 쉽게 자료형만 바꿔서 사용 할 수 있다.
오버로딩 하는 이유 예제-2
| 개발자 2명이 있는데 1명은 "이름.나이.학력.주소" 를 가지고 있고, 또 다른 1명은 "이름.나이.주소"를 가지고 있는데, 개발자 정보를 처리하는 프로그램이 필요하다 |
여기서 오버로딩이 없으면 힘들어진다. 한 가지 각각 상황에 따라서 다른 메소드를 불러와야 하고
하지만, 오버로딩이 있으면 쉽게 자료형 개수만 바꿔서 할 수 있다.
첫번 째 예제에서 다음과 같이 처리가 가능하다.

| 여기서 CalcEngine 클래스를 보면, int일 때의 add와 double 일 때의 add, min이 같이 선언 되어 있다. 만약 곱하기, 나누기까지 선언되면 코드가 길어지게 된다. int일 때, double 일 때 까지 오버로딩 비슷하게 처리하여 2개의 add메소드와 min메소드를 하나로 합칠 수 있다. Generic을 사용하면 된다. class CalcEngine { void add(final T num1, num2) {...} void min(final T num1, num2) {...} } CalcEngine cal = new CalcEngine(); 이렇게 하면, T가 Integer로 치환되게 된다. 쉽게 자료형을 바꿀 수 있지만, 기본자료형을 사용할 수 없다는 단점이 있다. |
| 오버라이딩(Overriding) |
| "깔아 뭉개는 것" 과 같다. 이전에 있던 메소드를 상속한 후, 그 수퍼 클래스의 메소드를 서브 클래스에서 재정의 한 것을 말한다. |
class Human {
private String name;
private int age;
Human(final String name, final int age) {...}
public void printInfo() {...}
class Student extends Human {
private String school;
private char grade;
Student(final String name, final int age, final String school, final char grade) {...}
void printInfo() {...} // Human 클래스의 printInfo() 오버라이딩
여기서 Student는 Human을 상속하게 된다.
원래의 Student 객체에서 printInfo()를 호출하면, Human의 printInfo()를 호출해야 하지만,
위 코드에서 Student 클래스 내에서 Human의 printInfo 메소드를 오버라이딩 함으로써,
Human의 printInfo()가 아니라 Student의 printInfo()가 실행이 된다.

여기서 man1.printInfo() 는 그대로 출력이 되고, man2.printInfo()는 오버라이딩 된 pritnInfo()가 실행된다.
'Backend > JAVA' 카테고리의 다른 글
| [JAVA] 접근 제어자 (0) | 2022.03.16 |
|---|---|
| [JAVA] Object (0) | 2022.03.15 |
| [JAVA] abstract , interface (0) | 2022.03.11 |
| [JAVA] 쓰레드 (Thread) (0) | 2022.03.10 |
| [JAVA] Stack, Queue, Deque (0) | 2022.03.09 |