우주코딩
추상 멤버 사용하기 본문
추상멤버 사용하기
oop - 07 - b,c
상속받은 메서드(sort)를 서브클래스에서 재정의하도록 강제한다.
메인 메서드에서 수퍼클래스인 Sorter를 통해 서브클래스의 인스턴스들 (QuickSort, BubbleSort)을 생성할 수 있도록 만든다.
이를 통해 두 클래스의 사용법을 통일한다.
static void display(Sorter sorter, int[] values) {
// 정렬 객체의 클래스가 뭔지 상관없다.
// 그 클래스를 사용할 때는 공통 분모가 되는
// 수퍼 클래스의 메서드를 호출한다.
sorter.sort(values);
수퍼클래스를 정의해서 generalization을 하는 이유이다. (다형적 변수!)
*Sorter는 서브클래스를 같은 타입으로 묶기 위해 만든 클래스이다. 직접 사용하기위해 만든 클래스가 아니기 때문에 sort 메서드의 바디가 없다. 하지만 sorter는 추상클래스가 아니기 때문에 직접 사용하는 상황을 막을 수 없다. ex) Sorter s = new Sorter(); 이런식으로 인스턴스 생성이 가능하다.
이를 금지하기 위해선 Sorter를 추상클래스로 만든다.
즉, 클래스를 직접 사용하려고 만든 것이 아닌 경우 추상클래스로 선언해야한다.
Sorter 클래스를 추상클래스로 선언한 후 직접 사용할 수 없다.
new Sorter(); ==> 금지~!
이 후 Mergesort 를 만든 후 extends Sorter를 적용하였으나 sort(int[] value)==(일반 메서드)를 오버라이딩 하지 않아도 오류가 나지 않는다.
이는 오버라이딩이 아닌 파라미터의 갯수가 다른 메서드를 오버로딩한 것이다.
public class MergeSort extends Sorter {
void merge(int arr[], int l, int m, int r)
{
..........
..........
}
}
따라서 수퍼클래스의 sort(int[] value) 메서드를 서브클래스에서 재정의하는 것을 강제하기위해 해당 메서드를 추상메서드로 전환한다.
'자바 본 강의' 카테고리의 다른 글
Object 클래스와 equals() 메서드 (0) | 2021.08.09 |
---|---|
Object 클래스와 toString() 메서드 (0) | 2021.08.09 |
레퍼런스 변수의 데이터 크기, 레퍼런스와 인스턴스의 크기 (0) | 2021.08.06 |
접근 권한, factory-method, singleton, 추상화 (0) | 2021.08.03 |
캡슐화, 게터와 세터 (0) | 2021.07.31 |
Comments