오버로딩(overloading)과 오버라이딩(overriding), 접근제어자(Access Modifier)

1. 오버라이딩(Overriding)

자바의 경우는 오버라이딩 시 동적바인딩되며 상위 클래스 혹은 인터페이스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 재정의하는 것을 말합니다.

2. 오버로딩(Overloading)

메소드의 이름과 return 타입은 동일하지만, 매개변수만 다른 메소드를 만드는 것을 말합니다. 오버로딩은 다른 시그니쳐를 만들며 정적바인딩시 처리되며 정적바인딩 됩니다. 즉, 상속관계에서 부모가 가진값들을 오버로딩하거나 인터페이스에서 직접 구현체를 구현해야할 경우 @Override 어노테이션으로 직접적으로 명시가 가능합니다.

3. 오버라이딩(Overriding) VS 오버로딩(Overloading)

오버라이딩과 오버로딩을 하나의 코드로 표현하면 다음과 같이 처리할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class overlodingoverriding {
public static void main(String[] args) {
Child c = new Child();
System.out.println(c.getValue());
}
// 오버 로딩 예제
static class Parent {
public int getValue(){
return 1;
}
}
static class Child extends Parent{
@Override
public int getValue() {
return super.getValue();
}
}

// 오버라이딩 예제
public int overriding_1(){
return 0;
}
public int overriding_1(int x, int y){
return 0;
}
public int overriding_1(int x, int y, int value){
return 0;
}

}

4. 접근제어자(Access Modifier)

public
어떤 클래스에서라도 접근이 가능합니다.

protected
클래스가 정의되어 있는 해당 패키지 내 그리고 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능합니다.

(default)
클래스가 정의되어 있는 해당 패키지 내에서만 접근이 가능하도록 접근 범위를 제한합니다.

private
정의된 해당 클래스에서만 접근이 가능하도록 접근 범위를 제한합니다.