IT 개발노트
추상클래스란? 본문
1. 추상클래스
1.1 추상클래스란?
- 추상클래스(abstract class)는 미완성 설계도로 비유할 수 있는 구체화되지 않은 클래스이다.
- 미완성의 추상 메서드를 포함하고 있으며, 반드시 상속을 통해 완성한 후 사 용할 수 있다.
* 추상클래스 자체로는 인스턴스 생성이 불가능하다.
- 추상클래스는 추상메서드 외에도 일반적인 멤버변수와 메서드, 생성자도 포 함한다.
1.2 추상 클래스의 특징
- 클래스 앞에 abstract키워드를 붙여서 정의
- 인스턴스 생성 불가
- 추상 메서드를 포함(그 외 멤버변수, 메서드, 생성자도 포함가능)
1.2.1 추상 클래스 생성방법
1 2 3 | abstract class [클래스명] { // 클래스 내용 } |
* 추상메서드가 없어도 클래스에 abstract 키워드를 붙이면 추상클래스가되고 인스턴스 생성이 불가능하다.
1.3 추상메서드
- 추상클래스 내에 선언부만 작성하고 구현부는 작성하지 않은 형태로 만든 메서드를 추상메서드라고 한다.
- 상속받는 클래스에서 구현하도록 하기 위해 구현부는 작성하지 않은 형태이 다.
1.3.1 추상메서드 생성방법
1 | abstract [리턴타입] [메서드명](); |
* 추상클래스를 상속받은 자식 클래스는 추상클래스의 추상메서드를 모두 구현해줘야 한다. 그렇지 않을 경우 자식 클래스도 추상클래스로 지정해줘야한다.
1.4 추상클래스 작성
- 상속의 개념이 부모 클래스의 속성과 기능을 물려받아 구체화하는 것이라면,
추상화는 기존 클래스의 공통부분을 뽑아서 부모 클래스를 만드는 것이라고 할수 있다.
- 추상화 : 클래스간의 공통점을 찾아내어 부모 클래스를 만든다.
- 구체화 : 상속을 통해 클래스를 구현, 확장한다.
예제 1
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | package sungju.Java.AbstractClassTest; public class AbstractClassTest { public static void main(String[] args) { // Unit unit = new Unit(); // 인스턴스 생성 불가 Marine marine = new Marine(); Tank tank = new Tank(); Dropship dropship = new Dropship(); marine.move(10, 20); marine.stop(); marine.stimPack(); tank.move(30, 40); tank.stop(); tank.changeMode(); dropship.move(50, 60); dropship.stop(); dropship.load(); dropship.unload(); } } abstract class Unit { String unitName; Unit(String unitName) { this.unitName = unitName; } abstract void move(int x, int y); // 추상클래스 void stop() { System.out.println(unitName + " stop!"); } } class Marine extends Unit { Marine() { super("Marine"); } void move(int x, int y) { System.out.println(unitName + " move to x : " + x + ", y : " + y); } void stimPack() { System.out.println("Stim Pack Yeah!!!"); } } class Tank extends Unit { Tank() { super("Tank"); } void move(int x, int y) { System.out.println(unitName + " move to x : " + x + ", y : " + y); } void changeMode() { System.out.println("Change Mode!"); } } class Dropship extends Unit { Dropship() { super("Dropship"); } void move(int x, int y) { System.out.println(unitName + " move to x : " + x + " / y : " + y); } void load() { System.out.println("Load"); } void unload() { System.out.println("Unload"); } } |
- move( )추상 메서드를 포함한 Unit추상 클래스를 대상으로 다른 클래스에서 상속하여 각각 구현 후 실행한 결과를 확인할 수 있다.
- 5번째 줄에 Unit unit = new Unit( );은 추상클래스에 대해 객체를 생성한 것 인데 실행하면 'Cannot instantiate the type Unit'이라는 에러 문구가 출력되 어, 추상 클래스 자체로는 인스턴스를 생성할 수 없음을 확인할 수 있다.