추상클래스
클래스에는 추상 클래스라는 것이 있습니다. 추상클래스는 하나의 미완성 클래스입니다.
미완성 클래스 ?
완성할 필요가 있는 클래스입니다.
한마디로 일반 클래스는 '내가 가지고 있는걸 기본으로 추가해서 너가 써' 입니다. 그러나 추상클래스는 '내가 가지고 있는걸 기본으로 줄께 근데, 꼭 필요한게 있으니까 규격에만 맞게 너가 작성하고 반드시 추가해' 입니다.
즉 추상 클래스는 자식 클래스들에게 하나의 길을 알려주는 것과 같습니다.
또한 추상클래스는 추상 메서드를 가지고 있어야합니다.
추상 클래스 작성법
abstract class AbastractClass {
}
여기서 꼭 추상 클래스에 추상 메서드가 없어도 됩니다. 하지만 추상 메서드가 존재한다면 추상 클래스여야만 합니다.
이것을 제외하면 일반 클래스와 똑같습니다.
추상 메서드
작성해야할 기능을 추상화한 메서드입니다. 왜 미완성을 했을까요?
그 이유는 필요한 기능이 있지만 상속 받는 자식 클래스마다 동작 방식이 다르기 때문에 이와 같이 어떤 동작이 필요하다고만 선언해 놓는 것입니다.
추상 메서드 작성법
/**
* 주석과 메서드 명을 통해 수행해야할 기능을 정리하여 작성
*/
abstract void abstractMethod();
가장 중요한 것은 역시 어떤 동작이 필요한 주석일 수도 있겠지만, 이를 한 번에 알 수 있게 요약한 메소드 명이라 생각합니다.
또한 반환형과 파라미터를 통해 규격을 특정화 할 수 있습니다.
왜 사용할까?
위에서도 언급했지만 특정 동작에 대한 강제성을 부여하기 위해서입니다. 따라서 일반 클래스와의 차이 또한 강제성을 부여할지에 초점을 맞출 수 있습니다.
어떻게 사용할까?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
class Main {
public static void main(String[] args) {
List<Brand> brands = new ArrayList<>();
brands.add(new ABCmart());
brands.add(new Buckaroo());
brands.add(new TBJ());
brands.get(0).makeTagCode();
}
}
abstract class Brand {
int size; // 사이즈
int colorCode; // 색상 코드
int clothCode; // 옷종류 코드
int brCd; // 브랜드 코드
/**
* 위 4가지를 사용하여 택 코드를 반환해라
* @return
*/
abstract String makeTagCode();
}
class ABCmart extends Brand {
@Override
String makeTagCode() {
return ""; // ABC 마트 만의 코드만드는 규칙
}
}
class Buckaroo extends Brand {
@Override
String makeTagCode() {
return ""; // 버커루만의 코드만드는 규칙
}
}
class TBJ extends Brand {
@Override
String makeTagCode() {
return ""; // TBJ만의 코드만드는 규칙
}
}
|
위와 같이 일반 상속을 한 클래스 처럼 사용할 수 있지만 추상메서드의 경우 반드시 구현해야한다.