1. 추상 클래스(Abstract Class)
오늘 우리가 배울 추상 클래스(Abstract Class)란 완전하지 않은 클래스를 의미합니다. 간단히 추상 클래스를 살펴보기 전에 특징부터 알아보도록 합시다.
● 추상 메소드가 하나 이상 포함되면 반드시 추상 클래스로 선언되어야 한다.
● 반드시 추상 클래스를 상속하는 자식 클래스에서 부모가 가진 추상 메소드를 모두 오버라이딩 해야 한다.
● 추상 클래스에서 추상 메소드가 아닌 일반 메소드를 포함시킬 수 있다.
● 추상 메소드는 몸체가 없고 선언부만 존재한다.
추가로 추상 클래스는, 상속 관계에서 어느 메소드를 오버라이딩 할때 사용됩니다. 우리가 앞으로 배울 abstract 키워드를 사용하여 추상 메소드, 클래스임을 알려줄 수 있습니다. 다음은 추상 클래스를 선언하는 방법입니다.
abstract 클래스명 {
...
abstract void 메소드명();
}
위의 추상 메소드를 보시면 이미 말했듯이 몸체는 없고 선언부만 존재합니다. 이는 자식 클래스들의 특징이 서로 다를때 메소드를 미완성 메소드로 남겨두어 부모 클래스를 상속한 자식 클래스에서 각각의 기능을 구현할수 있도록 한것입니다. 직접 추상 클래스를 선언해봅시다. 아래는 자식 클래스의 공통된 부분을 추상 클래스로 정의하여 사각형, 삼각형 넓이를 구하는 프로그램입니다.
abstract class Figure {
abstract void area(int a, int b);
}
class Tetragon extends Figure {
void area(int a, int b) {
System.out.println("사각형의 넓이 : " + (a * b));
}
}
class Triangle extends Figure {
void area(int a, int b) {
System.out.println("삼각형의 넓이 : " + (a * b / 2));
}
}
class Simple {
public static void main(String args[]) {
Tetragon tetragon = new Tetragon();
tetragon.area(4, 5);
Triangle triangle = new Triangle();
triangle.area(12, 5);
}
}
결과:
사각형의 넓이 : 20
삼각형의 넓이 : 30
코드를 보시면 1행에서 Figure라는 추상 클래스가 선언되었고 그 추상 클래스 내부에 area라는 추상 메소드가 선언되었습니다. 5행에서는 추상 클래스 Figure를 상속한 Tetragon 클래스에서 메소드 area를 오버라이딩 하여 사용합니다. 이것은 a와 b를 서로 곱하여 결과를 내놓습니다. 그 아래의 Triangle 클래스는 어떨까요? 마찬가지로 Figure 클래스를 상속하였고 메소드 area를 오버라이딩 하여 사용합니다. 여기의 area는 a와 b를 곱한 뒤 2로 나누고 그 결과를 내놓습니다.
19~20행을 보시면 Tetragon 객체를 생성하고 그 객체 내의 area라는 메소드를 호출하고 있죠? 4와 5를 매개변수로 넘겨주어, 4와 5를 곱한 20을 결과로 내놓습니다. 22~23행도 마찬가지로 Triangle 객체를 생성하고 area 메소드를 호출하여 12와 5를 매개변수로 받고 12와 5를 곱하고 2로 나눈 결과 30을 내놓습니다.
- 추상 클래스를 사용하면서 한가지 주의하실 점이 있는데 추상 클래스로는 객체를 만들 수 없습니다.
...
Figure figure = new Figure();
...
에러:
AsarOperators.java:19: error: Figure is abstract; cannot be instantiated
Figure figure = new Figure();
^
1 error
추상 클래스 강좌는 여기서 마치겠습니다. 다음 강좌는 인터페이스(interface)에 대해 공부합니다.
수고하셨습니다.
'프로그래밍 관련 > 자바/자바 스크립트' 카테고리의 다른 글
JAVA 강좌 22편. 콘솔 입출력(Console input and output) (1) | 2012.08.24 |
---|---|
JAVA 강좌 21편. 인터페이스(Interface) (8) | 2012.08.23 |
JAVA 강좌 20편. 추상 클래스(Abstract Class) (5) | 2012.08.21 |
JAVA 강좌 19편. 패키지(Package) (8) | 2012.08.21 |
JAVA 강좌 18편. 접근 지정자(Access Modifiers) (14) | 2012.08.19 |
JAVA 강좌 17편. 상속(Inheritance) (20) | 2012.08.16 |
작성자님 수고많으십니다^^ 올려주신 강좌덕분에 JAVA가 뭔지 이해하고 있는 학생입니다.
다름이 아니라 위에서 사용하신 예제에서 추상클래스는 어떤 용도로 쓰인 건가요? 추상클래스 부분을 들어내고 코딩하는 것과 Figure라는 추상클래스가 있을때와의 차이를 뭔가요?
그런데 저 추상 클래스 Figure를 없에더라도 똑같이 작동하는거 아닌가요?
감사합니다~ 컴퓨터에도 이런 추상적인 면이잇네요ㅎㅎ