추상 클래스

추상(abstract) : 실체 간에 공통되는 특성을 추출한 것

추상 클래스 : 실체 클래스들의 공통적인 특성(필드와 메소드)을 추출해서 선언한 클래스. 

실체 클래스 : 객체를 직접 생성할 수 있는 클래스

https://www.proprofs.com/quiz-school/story.php?title=abstract-classes

 

추상 클래스의 용도

① 공통된 필드와 메소드의 이름을 통일할 목적

  • 실체 클래스를 설계하는 사람이 여러 사람일 경우, 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다.
  • 데이터와 기능이 동일한 필드나 메소드를 추상클래스에서 선언해줌으로써 더 간결하고 효율적인 코드 작성이 가능하다.

② 실체 클래스를 작성할 때 시간 절약

  • 공통되는 필드와 메소드를 추상클래스에 선언하면 다른 점만 실체 클래스에 선언하면 되기때문에 시간을 절약할 수 있다.
  • 일반적으로 개발 프로젝트에서 설계자와 코더는 다른 일을 수행하는데, 코더가 작성해야 할 클래스가 다수이고 이 클래스들이 동일한 필드와 메소드를 가져야 한다면 , 설계자는 이 내용들을 추려내어 추상 클래스로 설계 규칙을 만드는 것이 좋다.
  • 그리고 코더에게 추상 클래스를 상속하는 실체 클래스를 만들도록 요구하면 된다.

 

추상 클래스 선언

  • 추상 클래스를 선언할 때에는 선언에 abstract 키워드를 붙여야 한다.
  • abstract가 붙여진 추상클래스는 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있다.
  • 따라서 자식 객체가 생성될 때 super(...)를 호출해서 추상 클래스 객체를 생성해야 한다.
  • 추상 클래스는 새로운 클래스를 만들기 위해 부모 클래스로만 사용된다. 즉, 실체클래스를 만들 때 extends 뒤에만 붙을 수 있다.

 

추상 메소드와 재정의

  • 추상 클래스에는 메소드가 있을 수도 없을 수도 있다.
  • 그런데 만약 추상 메소드가 있다면, 꼭 추상 클래스 안에 선언되어야 한다.
  • 추상 클래스에서 메소드의 선언만 통일하고 실행 내용이 실체 클래스마다 다를 경우 추상 메소드를 선언할 수 있다.
  • 추상 메소드는 abstract 키워드와 함께 메소드의 선언부만 있고 메소드 실행 내용인 중괄호{}가 없는 메소드이다.
  • 자식 클래스(실체 클래스)는 반드시 추상 메소드를 재정의해서 실행 내용을 작성해야 하는데, 그렇지 않으면 컴파일 에러가 발생한다.

위의 예시를 보면, Animal 이라는 추상클래스에서 추상 메소드 sound() 를 선언했다. 이유는 동물들 마다 울음 소리가 다르기 때문에, 이 부분은 하위 클래스 마다 고유한 소리를 내도록, 즉 Dog 클래스 에서는 '멍멍'으로 실행이 되도록, Cat 클래스 에서는 '야옹'이 실행되도록 하기 위함이다. 하위 클래스인 Dog, Cat에서는 sound() 메소드를 재정의해서 사용한다.

 


※ 추상 클래스에대해 알아보다 인터페이스와의 차이에 대한 내용을 찾게되었는데, 다음에 공부할 내용인 인터페이스라 읽어 보면 좋을 것 같아서 참고용으로 가져와 봤다.

 

https://www.geeksforgeeks.org/difference-between-abstract-class-and-interface-in-java/

 

Difference between Abstract Class and Interface in Java

Abstract class vs Interface 

  • Type of methods: Interface can have only abstract methods. An abstract class can have abstract and non-abstract methods. From Java 8, it can have default and static methods also. From Java 9, it can have private concrete methods as well.
  • Final Variables: Variables declared in a Java interface are by default final. An abstract class may contain non-final variables.
  • Type of variables: Abstract class can have final, non-final, static and non-static variables. The interface has only static and final variables.
  • Implementation: Abstract class can provide the implementation of the interface. Interface can’t provide the implementation of an abstract class.
  • Inheritance vs Abstraction: A Java interface can be implemented using the keyword “implements” and an abstract class can be extended using the keyword “extends”.
  • Multiple implementations: An interface can extend one or more Java interfaces; an abstract class can extend another Java class and implement multiple Java interfaces.
  • Multiple Inheritance:  Interface supports multiple inheritance; an abstract class does not support multiple inheritance.
  • Accessibility of Data Members: Members of a Java interface are public by default. A Java abstract class can have class members like private, protected, etc.

'Coding > Java' 카테고리의 다른 글

[24] JAVA 타입 변환과 다형성  (0) 2022.12.06
[23] JAVA 인터페이스  (0) 2022.12.04
[21] JAVA 타입변환과 다형성  (1) 2022.12.02
[20] JAVA 상속  (0) 2022.11.30
[19] JAVA 패키지와 접근 제한자  (0) 2022.11.29

+ Recent posts