- 오버로딩은 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미합니다.
- 오버라이딩은 상위 클래스의 메서드를 하위 클래스에서 재정의 하는 것을 의미합니다.
- Call by Value는 메소드의 매개변수의 값을 복사를 하여 처리를 하느냐, 아니면 직접 참조를 하느냐 차이를 의미합니다. Call by Value의 경우 인자로 받은 값이 보존되고 Call by reference의 경우에 메소드에 의해 원래의 값이 영향을 받게 됩니다.
- 추상 클래스는 클래스 내 '추상 메소드'가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다. 반면 인터페이스는 모든 메소드가 추상 메소드인 경우입니다.
- 추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는 데 있습니다. 반면에 인터페이스는 함수의 껍데기만 있는데, 그 이유는 그 함수의 구현을 강제하기 위해서 입니다.
- Overloading
- 두 메서드가 같은 이름을 갖고 있으나 인자의 수나 자료형이 다른 경우
- Overriding
- 상위 클래스의 메서드와 이름과 용례(signature)가 같은 함수를 하위 클래스에 재정의하는 것
- Call by value(값에 의한 호출)
- 메소드로 인자값을 넘길때 그 값을 복사하여 넘기는 형태이다. 따라서 이 방식으로 메소드 호출을 하면 메소드 내에서는 복사된 값으로 작업을 하기 때문에 원래의 값을 변경시키지 않는다.
- Call by reference(참조에 의한 호출)
- 인자값을 메소드로 넘겨 줄때 그 객체를 참조하는 주소를 넘겨주는 형태이다. 따라서 메소드 내에서도 원래의 값에 접근이 가능하다.
-
추상클래스란?
-
추상클래스는 일반 클래스와 별 다를 것이 없습니다. 단지, 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스입니다. 그래서 미완성 설계도라고도 표현합니다. 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없습니다.
-
class 앞에 "abstract" 예약어를 사용하여 상속을 통해서 구현해야한다는 것을 알려주고 선언부만 작성하는 추상메서드를 선언할 수 있습니다.
abstract class 클래스이름 { ... public abstract void 메서드이름(); }
-
-
인터페이스란?
-
추상클래스가 미완성 설계도라면 인터페이스는 기본 설계도라고 할 수 있습니다. 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하고 클래스와 다르게 다중상속(구현)이 가능합니다.
-
클래스는 크게 일반 클래스와 추상 클래스로 나뉘는데 추상 클래스는 클래스 내 '추상 메소드'가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다. 반면 인터페이스는 모든 메소드가 추상 메소드인 경우입니다. (자바 8에서는 default 키워드를 이용해서 일반 메소드의 구현도 가능합니다.)
-
interface 인터페이스이름 {
public static final 상수이름 = 값;
public abstract void 메서드이름();
}
- 목적의 차이
- 인터페이스와 추상 클래스는 존재 목적이 다릅니다. 추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는 데 있습니다. 반면에 인터페이스는 함수의 껍데기만 있는데, 그 이유는 그 함수의 구현을 강제하기 위해서 입니다. 구현을 강제함으로써 구현 객체의 같은 동작을 보장할 수 있습니다.