728x90
오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것 (new)
오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 (change, modify)
class Parent { void parentMethod() {} }
class Child extends Parent {
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩
void childMethod() {}
void childMethod(int i) {} // 오버로딩
}
바인딩
오버로딩 : 정적 바인딩, 호출될 메소드가 컴파일 시점에 결정된다. (컴파일 다형성)
오버라이딩 : 동적 바인딩, 호출될 메소드가 실행 시점에 결정된다. (런타임 다형성)
바인딩이란 프로그래밍에서 컴각종 값들이 확정되어 더이상 변경할 수 없는 구속(bind) 상태가 되는 것
정적 바인딩 (Static Binding)
- 원시 프로그램의 컴파일링 또는 링크 시에 확정 되는 바인딩
동적 바인딩 (Dynamic Binding)
- 프로그램의 실행되는 과정에서 바인딩 되는 것
ex)
int a = 1;
// 데이터 타입 int 로 바인딩 : 정적 바인딩
// 변수명 a 로 바인딩 : 정적 바인딩
// a에 1이라는 값이 바인딩 : 동적 바인딩
오버로딩 사용 시 주의점
매개변수에 대해 어떤 오버로딩 메소드가 호출되는지 분명하게
- 매개 변수 중 최소한 하나가 근본적으로 다른 타입 (각 타입의 인스턴스를 다른 타입으로 캐스팅 할 수 없는 것)
- ex) ArrayList<Integer> remove(E) remove(int) </aside>
// <Integer> 타입의 Object와 int 가 상충
// remove(int)
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
// remove(Object)
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
'IT' 카테고리의 다른 글
[JAVA] next(), nextLine(), 입력과 버퍼 (0) | 2022.11.17 |
---|---|
클래스와 객체, 인스턴스 (0) | 2022.11.16 |
Kubernetes(쿠버네티스) 2 CNI 설치 및 실행, taint (0) | 2022.11.14 |
Kubernetes(쿠버네티스) 1 설치 및 활성화 (1) | 2022.11.13 |
JWT와 Security를 활용한 인증, 인가 구현 3 ( REST API 구현) (0) | 2022.11.11 |