본문 바로가기
개발 관련 지식/JAVA

추상 클래스

by 권태일1147 2020. 4. 1.

객체를 직접 생성할 수 있는 클래스를 실체 클래스 라고 하고, 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스 라고 한다.

추상 클래스와 실체 클래스는 상속 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식이다. 추상 클래스는 클래스들의 공통적인 멤버만 추출한 것이기 때문에 객체를 생성할 수 없다. new 를 사용할 수 없고 extends 뒤에만 올 수 있다.

 

추상 클래스를 사용하는 이유

  1.  실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적
    • 실체 클래스를 설계하는 사람이 다수일 경우, 같은 용도의 필드와 메소드인데도 이름을 다르게 선언하라 수 있기 때문에 통일하기 위한 목적으로 사용한다.
  2.  실체 클래스를 작성할 시간을 절약
    • 실체 클래스마다 서로 다른 점만 선언하고 공통적인 부분은 추상 클래스에서 불러오면 시간을 절약 할 수 있다.

 

추상 클래스 선언

추상 클래스는 class 앞에 abstract 를 붙이면 된다. 추상 클래스도 실체 클래스와 마찬가지로 필드, 생성자, 메소드를 만들 수 있다. new 로 객체를 생성할 수 없지만 자식 객체가 생성될 때 super(...)를 통해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.

 

추상 메소드와 오버라이딩

추상 클래스에서 메소드를 작성 할 때 메소드의 선언만 통일화하고, 실행 내용은 실체 클래스마다 달라야 하는 경우가 있다. 예를 들면 모든 동물은 소리를 내기 때문에 Animal 추상 클래스에서 sound()라는 메소드를 선언해야하는데 동물마다 내는 소리가 다르기 때문에 sound() 메소드는 공통적이지만 내용이 실체 클래스마다 내용이 달라야 한다. 이런 경우 추상 클래스에서 메소드를 만들고, 그것을 실체 클래스에서 오버라이딩 하는 것이다. 이때 부모 추상 클래스를 상속받은 자식 실체 클래스에서 반드시 오버라이딩을 해야 하도록 하는 것이 추상 메소드이다. 리턴 타입 앞에 abstract를 붙이면 된다. abstract가 붙은 메소드를 오버라이딩 하지 않으면 컴파일 에러가 발생한다. 

추상 메소드는 중괄호 {}가 없다.

'개발 관련 지식 > JAVA' 카테고리의 다른 글

인터페이스 타입변환과 다형성  (0) 2020.04.02
인터페이스  (0) 2020.04.01
다형성  (0) 2020.03.31
final 키워드  (0) 2020.03.31
메소드 재정의 Overriding  (0) 2020.03.31