티스토리 뷰
추상 클래스(abstract Class)
추상클래스란 추상메서드를 포함하고 있는 클래스이며 미완성클래스이다.
그리고 추상클래스는 인스턴스를 생성 할 수없는데 그 이유는 미완성이기 때문이다.
추상클래스를 사용하기 위해선 항상 앞에 abstract라는 키워드를 입력하여야 한다.
추상클래스의 경우는 일반 멤버변수, 일반메서드들 다 동일하게 사용하지만
단지, 추상메서드가 있다면 추상클래스가 되어야 한다.
추상메서드(absteact method)
추상메서드란 메서드를 '선언'만 해놓고 수행문을 구현하지 않은 메서드이다.
쉽게 얘기하면 메서드가 있긴 하지만 수행 할 코드가 없는 것이고 이것또한 미완성메서드이다.
구핸을 하지 않기 때문에 수행문을 의미하는 { }을 쓰지 않고 ; (세미콜론)으로 끝은 맺는다.
추상클래스는 사용하기 위해선 항상 avstract를 붙였다면
추상메서드의 경우에는 abstract를 붙인다.
그리고 추상클래스를 상속 받은 클래스는 '반드시' 추상메서드를 오버라이딩 하여야 한다.
그림1
그림1은 추상메서드를 이용하여 추상클래스를 실행 할려고 한다.
그림1에서 보면 짐승 고양이 개 쥐가 있는데 각각의 클래스안에 출력 할 값을 적고 ClassEx_02인 상위 클래스에서 출력을 할려고 한다.
그림에서 보면 cat, mouse, dog와 Animal이 있는데 Animal는 만들지 않았는데 그 이유는 Animal가 추상클래스이므로 인스턴스 생성자체가 불가하다.
그림2
먼저 Animal이라는 추상클래스에 데이터를 입력하였다.
Animal가 추상클래스인 이유는 바로 추상메서드가 있기 때문이다.
일단 동물이 운다라는건 모든 공물의 공통적인 행위이지만 각 동물들이 우는 방식이 다르기 때문에 쉽게 단정 지을수 없다.
그렇기 때문에 cry();라는 추상메서드를 만들어서 각 동물들이 우는 행위를 간단하게 구현하도록 설계하였다.
그림3-1
첫째로 cat의 소리를 지정할려고 한다. 그림에서 보면 일단 상속을 받기위해서 필수적인 extends이라는 옵션을 붙인다.
그리고 그 뒤에는 Animal이라는 추상클래스를 붙였는데 여기서 보면 Cat가 붉은색인것을 알 수있다.
Cat의 붉은색에 커서를 올리면 두가지 문제가 나오는데
하나는 Add umimplemented methods와 Make type 'Cat' abstract가 나올것이다.
여기서 필자는 Add umimplemented methods를 누를것인데 이 뜻은 현재 오버라이딩을 해야하니 자동으로 만들어 주겠다라는 뜻이고
클릭하게 되면 자동으로 오버라이딩 해주게 된다.
다른 하나의 방법은 현재 있는 클래스를 추상클래스로 바꾼다는 것인데 바꾸게 되면 추상클래스가 되기 때문에 인스턴스 사용이 불가해진다.
그림3-2
그림3-2는 그림3-1의 설명처럼 오버라이딩을 자동완성 시켜준 모습이다. 여기서 필자는 출력문만 만들어 보았다.
여기서 public는 어디서든 동일하다 어떤 클래스, 어떤 패키지에 있던간에 외부에서도 접근을 허용해주는 것이니 오버라이딩이든
추상이든 상속이든 항상 붙는다.
그림4
그림4또한 그림3에서 보듯이 오버라이딩을 자동완성하여 cry( )라는 추상메서드에 출력 값만 입력 하였다.
그림5
그림5는 Animal이라는 추상클래스를 이용하여 Cat, Dog, Mouse라는 각각의 클래스의 자료의 값들을 최상위클래스에서 출력한 값들이다.
추상클래스를 상속받은 클래스는 '반드시' 추상메서드를 오버라이딩을 하여야 한다.
쉽게 얘기하면 미완성된 메서드의 완성을 자식 클래스에 떠넘긴다고 생각하면 되는데
여기서 굳이 Animal가 추상클래스일 필요도 없고 cry가 추상메서드일 필요도 없다.
하지만 추상클래스를 쓰는 이유는 무조건적인 오버라이딩을 해야 하기 때문에
혹시나 있을 작성하는 자의 실수를 사전에 방지하겠다라는 개념인것이다.