JAVA

[JAVA] 추상클래스란

EJUN 2023. 4. 23. 01:02

추상클래스(abstract class)란?
우선 실체클래스란 객체를 생성할 수 있는 클래스를 의미하고
추상클래스는 이 실체클래스의 공통적인 부분을 따로 빼내서 형태를 만든 클래스를 의미

그럼 추상클래스도 객체를 생성할 수 있을까?

대답은 No이다. 

이유는 추상클래스 안에 있는 메소드 내용이 아직 추상적이라 객체를 생성할 수 없기 때문이다.

 

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

가장 우선적인 이유는 바로 유지보수와 재사용때문이다.

 

만약 예를들어 스마트폰이라는 클래스가 있고 S클래스와 A클래스가 있다고 가정하자.

S클래스, A클래스 둘 다 스마트폰기능을 하는 공통적인 전화받기, 걸기, 인터넷 사용등 동일한 기능이 들어가 있다고 하자.

여기서 L클래스를 만드는 데 L클래스 또한 S, A클래스와 동일한 기능을 한다고 하였을 때

개발자 입장에서는 분명 똑같은 기능을 하는 메소드인데 새로 코드를 작성해야 하는 고생이 있다.

이때 추상클래스를 사용하면 개발자는 쉽게 해결할 수 있다.

 

추상클래스 예시

위의 코드처럼 추상클래스는 반드시 구현되지 않은 메소드 즉, 추상메소드가 존재한다.

그리고 추상클래스 앞에는 abstract라는 키워드가 붙는다.

 

SmartPhone클래스를 상속한 App클래스

위의 A사 스마트폰 회사의 클래스인데 SmartPhone추상클래스를 상속받아 A사의 입맛대로 추상메소드를 구현하였다.

 

SmartPhone클래스를 상속한 L클래스

위의 L사 스마트폰 회사의 클래스 또한  SmartPhone추상클래스를 상속받아 L사의 입맛대로 추상메소드를 구현하였다.

SmartPhone클래스를 상속한 Sam클래스

위의 Sam사 스마트폰 회사의 클래스 또한  SmartPhone추상클래스를 상속받아 Sam사의 입맛대로 추상메소드를 구현하였다.

 

위의 3개의 코드처럼 스마트폰을 기능을 하는 3개의 클래스의 공통적인 메소드를 SmartPhone이라는 추상클래스에 모아놓고 각각의 클래스에 맞게 구현할 수 있도록 하기 위해 추상클래스를 사용하는 이유이다.

 

실행 결과

위처럼 동일한 메소드를 사용했음에도 불구하고 다른 결과가 출력된 것을 확인할 수 있다.

 

위에서 추상클래스는 객체를 생성하지 못한다고 하였는데 그럼 main메소드에서 추상클래스 생성자를 호출할 순 없을까?

대답은 가능하다 이다.

 

바로 이전에 말했던 super키워드를 이용하는 것이다.

 

추상클래스 생성자 호출예시

위의 코드는 추상클래스인 SmartPhone클래스의 생성자를 호출하려면 SmartPhone클래스를 상속받은 App클래스의 생성자에서 super키워드를 사용해서 추상클래스의 생성자를 호출할 수 있다.

 

추상클래스 생성자 호출 실행결과

 

'JAVA' 카테고리의 다른 글

[JAVA] Object클래스  (0) 2023.04.25
[JAVA] final 키워드  (0) 2023.04.23
[JAVA] 상속&super&오버라이딩  (0) 2023.04.12
[JAVA] 메소드(method)란?  (0) 2023.04.04
[JAVA] this키워드  (0) 2023.04.04