본문 바로가기

JAVA

JAVA ) 추상 클래스와 추상 메소드

 

추상적,   구체성이 없이 사실이나 현실에서 멀어져 막연하고 일반적인 것

 

그렇다면 추상 클래스는 뭘 의미하는 거지?

추상 클래스도 위 개념과 동일하다 볼 수 있다. 추상 클래스는 실체 하지 않고 추상적인 형태를 가지고 있기 때문이다!

 

좀 더 자세하게 들어가 보자면

 

객체들의 공통되는 특성을 추상적으로 정의한 클래스라 볼 수 있다.

예를 들어 새, 물고기, 고양이 등의 실체들의 공통되는 특성을 추출해보면 동물이라는 공통점이 있다, 실체 된 것이기보단 실체들의 공통된 특성을 가지고 있는 것이 추상적인 것이라 볼 수 있다.

여기서 실체 하는 것이란 실체 클래스를 의미한다, 실체 클래스란 우리가 일반적으로 사용하는 필드, 생성자, 메서드로 구성된 클래스를 말한다, 즉 추상 클래스란 실체 클래스 안에서 공통되는 필드와 메서드를 추출하여 만든 추상적인 클래스인 것이다.추상적이기 때문에 기능의 대한 구체성이 없으며 공통되는 특성들의 지합을 목적으로 사용한다.

 

 

그럼 공통되는 특성들을 왜 추상 클래스로 만드는 것인가? 다음 두 가지 이유가 있다!

 

첫 번째 실체 클래스들의 공통된 필드와 메서드의 이름을 통일할 목적

프로그램 전체를 혼자서 개발하게 된다면 사실 추상 클래스는 필요가 없어진다, 프로그램에 모든 필드와 메서드의 이름을 내가 작성하니까!  하지만 실체 클래스를 설계하는 사람이 여러 사람일 경우 실체 클래스마다 필드와 메소드 이름이 제각각 일 것이다. 그렇게 된다면 동일한 기능을 가진 실체 클래스라도 사용방법이 달라지는 문제를 겪게 된다, 하지만 실체 클래스 설계 전부터 필드와 메서드의 이름을 공통적으로 사용하기로 합의를 한다면 코드 수정 시 영향도가 적어지게 되고 유지보수가 쉬워진다는 장점을 가질 수 있다.

 

 

두 번째 실체 클래스를 작성할 때 시간을 절약

추상 클래스에는 실체 클래스와 마찬가지로 필드, 생성자, 메서드를 선언할 수 있다는 특성을 가지고 있기 때문에 추상 클래스를 상속한 자식 객체들이 추상 클래스에서 선언한 기능을 상속 받음으로 시간을 절약할 수 있다는 장점을 가지고 있다. 

 

 

 

 

추상 클래스 선언 방법과 추상 클래스 안에 사용할 수 있는 인스턴스가 뭔지 알아보자.

 

public abstract class 클래스명 {
----필드----
---생성자---
---메소드---
-추상메소드-
}

 접근제어자 다음 단락에 abstarct를 선언 시 추상 클래스라 볼 수 있다.

 

추상 클래스 선언할 수 있는 인스턴스 종류로는 필드 , 생성자, 메서드, 추상 메서드가 존재한다, 

 

앞 3개의 의미를 알겠지만 추상 메서드?? 추상 클래스 같은 추상적인 메서드인가?라고 생각했다면 정확하게 케치 한 부분이다. 

추상 클래스를 상속받은 실체 클래스들에 존재하는 메서드의 실행이 동일하다면 추상 클래스에 메소드를 동일한 이름으로 선언하면 된다,

 

하지만 메서드의 실행 내용이 실체 클래스간 상이하다면?

 

추상 클래스에서 메소드의 이름만 동일하게 작성한 뒤 실행 내용은 실체 객체들 마다 다르게 작성되어야 된다.

이때 추상 클래스에서 선언되는 메서드를 추상 메소드라고 명명한다.

 

추상 메소드 선언방식

public abstract void 메소드명(); 추상적인 개념을 정의하기에 실체되는 내용{..}을 포함하지 않음 

 이후 추상 메소드를 사용하는 자식 객체는 오버라이드를 통해 추상 메소드를 재정의하여 사용하게 된다.

 

  

 

추상 클래스를 선언하고 필드,메소드,추상메소드를 직접 사용해보자.