‘추상적이다.’라는 말을 들으면 나는 애매모호하고 두루뭉실한 느낌이 들었는데, 그래서 그런지 처음 추상화를 들었을 때도 그런 기분이었다.
객체 지향 관점에서의 추상화는 클래스를 정의할 때, 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것, 즉 클래스들의 중요하고 공통된 성질들을 추출하여 슈퍼 클래스를 선정하는 개념이다.
뭐 사실 이론적으로 설명하면 처음에는 뭐라는지 하나도 모르겠다.(본인이 그랬음) 내가 이해한 내용을 요약해서 이야기하자면 다음과 같다.
우선 앞서 포스팅한 메서드와 클래스의 개념을 떠올리자면 클래스안에 메서드가 존재했는데, 추상 클래스(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