프로그래밍/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