개발자 미니민의 개발스터디

[JAVA] 자바 - 추상화 클래스(abstract 클래스)

by mini_min
[JAVA]
자바 - 추상화 클래스(abstract 클래스)

✔️ 추상화 클래스란?

추상화 클래스는 선언만 있고 정의가 없는 하나의 추상 메소드를 갖는 클래스

= 하위 클래스에서 재정의할 것으로 예성되는 메소드에 대해 미리 호출 계획을 세워두는 것

 

🏷️ 특징

클래스가 적어도 하나의 추상화 메소드 포함!!

클래스명 앞에 abstract 키워드 붙여서 추상 클래스로 명시한다!!

 

❌ static, final 과 같이 사용할 수 없다.

❌ 미완성 클래스라 객체 생성이 불가하다!!!

⭐ 추상 클래스는 독립적으로 존재 xxx 하위클래스를 가짐

하위 클래스를 통해서만 객체 생성이 가능하다.

⭐ 이때, 하위 클래스는 추상 클래스가 아닌 경우 반드시 모든 추상 클래스 재정의 해야한다.

 

❌ 추상 메소드를 포함할 수도 있고 포함 안할 수도 있다.

❌ abstract 키워드는 클래스와 메소드에서만 사용 가능하다.

필드나 로컬 변수에서는 사용할 수 없다!

 

 

 

◾ 정렬 관련 추상 클래스를 만들어보기

abstract class SortInt{
private int[] value;
//추상 메소드
protected abstract void sorting();
//다른 메소드 정의 (1.배열)
public void sort(int[] value)
this.value = value;
sorting();
}

 

💡 추상 클래스인 SortInt 에는 1)추상메소드 2)일반메소드 2개가 있다.
추상 클래스는 독립적으로 존재하여 객체가 생성될 수 없기 때문에 하위클래스에서 추상 메소드가 재정의 될 것을 기대해본다.  일반 메소드는 하위 클래스에서 재정의 되어 사용될 추상 메소드를 가져와서 사용할 수 있다. (하단에 sorting();)

 

class BubbleSort extends SortInt{ //버블정렬 (추상 클래스의 하위클래스)
//추상 메소드 재정의 : 하위클래스가 추상 클래스가 아니니까 추상 메소드 재정의
@Override
protected void sorting() {
boolean flag = true;
for(int i=1; flag; i++) {
flag = false;
for(int j=0; j<length()-i; j++) {
if(compare(j,j+1) > 0) {
swap(j, j+1);
flag = true;
}
}
}
}
}
public static void main(String[] args) {
int[] num = new int[] {35,8,14,54,19,22,33};
// up-casting //자식으로 객체 생성
SortInt ss = new BubbleSort();
ss.sort(num);

 

💡 버블정렬 이라는 추상 클래스의 하위클래스를 만들고, 추상 클래스에 있던 추상 메소드를 재정의한다. 
그리고 메인 메소드를 실행하면 되는데, 메인에서 하위 클래스를 up-casting 하여 객체를 생성한다. 이후 생성된 ss 라는 객체에서 sort () 메소드를 실행하면, 추상 클래스에 있던 일반 메소드가 실행되고 그 안에 재정의된 sorting() 가 실행되어 '버블정렬'이 일어난다. 

 

 

 

 

 

블로그의 프로필 사진

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기