프로그래밍/java
[java] 추상클래스(abstract class)
znvlcm
2021. 5. 31. 16:22
1. 추상클래스란
구현바디 없이 메서드의 선언만 있는 추상 메소드를 포함한 클래스
메서드는 원래 선언부 아래 바디를 구현하는 정의를 하는데 선언만하고 정의를 안한 메소드가 추상클래스
메서드선언(declare)
반환타입, 메서드이름, 매개변수
메서드정의(definition)
메서드 선언 +바디까지 정의
2. 특징
abstract 예약어를 사용
추상클래스를 인스턴스화 할 수 없음(new불가) -> 해당 클래스는 상속이 목적임.
변수를 가질 수 있음
추상클래스를 상속받은 자식 클래스가 추상메소드를 구현하지 않는다면 그 클래스 역시 추상클래스가 되어야한다.
상속받은 클래스에서 재정의를 하기 위해서는 private를 사용하지 못한다. (상속받은 클래스에서만 사용할 때 protected)
3. 추상클래스 작성
메서드의 선언만 있을 경우 abstract으로 추상메소드 선언할것
추상 메서드가 있을 경우 클래스에도 abstract
추상클래스를 상속받아 추상클래스를 구현
4. 사용예
정렬알고리즘을 복습할 때 추상메소드를 활용했다.
swap이라는 자리바꿈 함수는 공통으로 사용하기 때문에 부모인 추상클래스에 정의하였고,
각 정렬 알고리즘마다 정렬하는 과정이 다르므로 추상메소드로 선언해 각 정렬메소드에 따라 정렬과정을 거친다.
모든 정렬 클래스는 sort라는 메소드를 통해 결과를 도출하며, sort는 정렬 전후에 시간을 측정해 처리시간을 구현한다.
package amy.practice.Algorithm.School.Sort;
public abstract class AbstractSort {
public int[] sort (int[] array) {
long start = System.nanoTime();
sortProcess(array);
long end = System.nanoTime();
System.out.println(+ (end-start)+"나노초가 걸렸습니다.");
return array;
}
protected abstract int [] sortProcess (int[] array);
protected void swap (int[] array,int i, int j) {
int tmp = array[j];
array[j] = array[i];
array [i] = tmp;
}
}
package amy.practice.Algorithm.School.Sort;
import java.util.Arrays;
public class SelectionSortTest extends AbstractSort{
protected int[] sortProcess(int[] array) {
int i = 0;
while (i < array.length-1) {
int minIdx = i;
int min = array[i];
for(int j = i+1; j < array.length; j++) {
if( min > array[j] ) {
minIdx = j;
min = array[j];
}
}
if(i != minIdx) {
swap( array, i, minIdx);
}
i++;
}
return array;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {50,10,20,40,30};
SelectionSortTest s = new SelectionSortTest();
System.out.println(Arrays.toString(s.sort(array)));
System.out.println("-------------------------------------------");
int[] array2 = {10,20,30,40,50};
System.out.println(Arrays.toString(s.sort(array2)));
System.out.println("-------------------------------------------");
int[] array3 = {50,40,30,20,10};
System.out.println(Arrays.toString(s.sort(array3)));
System.out.println("-------------------------------------------");
}
}
728x90