추상클래스(Abstract Class)


‘추상적이다.’라는 말을 들으면 나는 애매모호하고 두루뭉실한 느낌이 들었는데, 그래서 그런지 처음 추상화를 들었을 때도 그런 기분이었다.

객체 지향 관점에서의 추상화는 클래스를 정의할 때, 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것, 즉 클래스들의 중요하고 공통된 성질들을 추출하여 슈퍼 클래스를 선정하는 개념이다.

뭐 사실 이론적으로 설명하면 처음에는 뭐라는지 하나도 모르겠다.(본인이 그랬음) 내가 이해한 내용을 요약해서 이야기하자면 다음과 같다.

우선 앞서 포스팅한 메서드와 클래스의 개념을 떠올리자면 클래스안에 메서드가 존재했는데, 추상 클래스(Abstract Class) 안에 **추상 메서드(Abstract method)**가 존재한다.

검색해보면 Dog, Cat, Animal 이런 식으로 정리해놓은 코드들이 많은데, 이해는 되는데 뭐랄까 사용해보면 잘 모르겠어서 그냥 직접 코드를 짜봤다.

기본적으로 선언 자체는 Class나 method 앞에 abstract 제어자를 붙이면 완성이다.

abstract class AbstractClass {   // abstractClass를 추상 클래스로 선언
		void printIsAbs(int n) {     // printIsAbs 메서드 선언 
        System.out.println(n);
    }
		abstract int isAbs(int n);  // isAbs 메서드를 추상 메서드로 선언
}

근데 생각해보면 우리가 메서드를 사용하려면, 분명 그 기능이 안에 있어야 하는데, isAbs 메서드는 도대체 무슨 메서드인지 모른다. (해도 이름으로만 감을 잡아야하는 상황이다.)

이 개념은 상속받는 클래스가 나타나야 해결할 수 있다.

public class ExtendClass extends AbstractClass {
		int isAbs(int n) {
        return Math.abs(n);
    }
		public static void main(String[] args) {
				ExtendClass extendClass = new ExtendClass();
				extendClass.printIsAbs(-5);
		}
} // 출력: 5

갑자기 뭐 이리 바리바리 적어놨나 할 수 있는데 하나씩 보면 쉽다.

public class ExtendClass extends AbstractClass