본문 바로가기

플밍 is 뭔들/JAVA

[자바] 추상클래스 (Abstract Class)

※ 추상클래스란?
추상 메서드를 포함하고 있는 클래스.
추상 클래스는 미완의 추상 메서드가 있는 클래스로써 추상클래스는 상속을 통해서 자손 클래스에서 구현이된다.

ex)
abstract class Car { //추상클래스
      
      public void drive(){
            System.out.println("출발합니다. 부릉부릉");
      }
      
      public void stop(){
            System.out.println("멈춥니다. 끼이익");
      }
      
      public abstract void abstractTest(); //추상메서드
}


public class FireEngin extends Car{    //추상클래스인 Car를 상속받음
      public void water(){
            System.out.println("물을뿌립니다. 쉬이이이익");
      }
      
      public void abstractTest(){    //FireEngine에서의 추상메서드 구현
            System.out.println("소방차추상메서드"); 
      }
      
}


public class Ambulance extends Car{    //추상클래스인 Car를 상속받음
      
      public void siren(){
            System.out.println("사이렌을 울립니다. 삐뽀삐뽀");
      }
      
      public void abstractTest(){    //Ambulance에서의 추상메서드 구현
            System.out.println("엠뷸런스추상메서드");
      }
}     


※ 왜 추상클래스와 추상메서드를 사용하는가?
클래스를 설계도에 비유한다면 추상클래스는 미완성의 설계도 이다. 
공통적인 부분을 미완성으로 설계해 놓고(리턴타입과 메서드의 이름만 설계) 각각 상속받은 클래스에서 그 클래스의 특성에 맞게 구현하도록 사용하기 위해 사용된다.


※ 상속과 추상클래스의 비교
추상화는 어찌보면 상속에서 조상메서드를 오버라이드 하는것과 비슷하다. 
하지만 상속의 자손 클래스를 만드는데 조상 클래스를 사용하는 것이라면, 추상화는 이와 반대로 기존의 클래스의 공통부분을 뽑아내서 조상 클래스를 만들어 내는 것이다.

상속에선 구체화(상속을 통해 클래스를 구현, 확장)인 반면 추상클래스에서는 추상화(클래스간의 공통점을 찾아내어 공통의 조상을 만드는 작업)라고 할 수 있다.

하지만 막상 사용해보면 자손 클래스에서 조상 클래스의 메서드를 오버라이딩해서 사용하는 것과 조상 클래스에서 추상메서드로 선언하여 자손 클래스에서 구현하여 사용하는 것과 별차이 없어보인다.
하지만 abstract를 붙여 추상메서드로 선언하는 이유는 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해서이다.


'플밍 is 뭔들 > JAVA' 카테고리의 다른 글

[자바] 예외처리 (Exception)  (0) 2017.09.19
[자바] 인터페이스 (Interface)  (0) 2017.09.19
[자바] 다형성 (Polymorphism)  (0) 2017.09.18
[자바] 제어자(Modifier)  (0) 2017.09.18
[자바] 상속  (0) 2017.09.11