Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
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
Archives
Today
Total
관리 메뉴

우주코딩

추상 멤버 사용하기 본문

자바 본 강의

추상 멤버 사용하기

우주코딩 2021. 8. 9. 18:04

추상멤버 사용하기

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) 메서드를 서브클래스에서 재정의하는 것을 강제하기위해 해당 메서드를 추상메서드로 전환한다.

Comments