블로그옮김글]추상클래스 설명 - Java



1. 형태

 

  • 본문 중에 추상메소드가 하나 이상 포함 된 것 (인터페이스는 모든 메소드가 추상 메소드)
  • 추상메소드 : 메소드의 선언부만 있고 본문이 없는 것 (중괄호 및 중괄호 안의 내용이 없는 것)
    ex) abstract public void sampleAbstract(int a); // {}가 없고 바로 ;로 끝난다.
2. 특징
  • 일반 클래스와 달리, 추상 클래스를 상속 받은 클래스는 반드시 추상 메소드를 오버라이딩 해야한다. // 그래서 강제 구현하려고 할때에 많이 쓰인다. 
  • 주로 개념적으로 공통된 의미를 추출하여 담을때 사용된다. 
  • 메소드 이름, 자료형, 매개변수 등의 메소드의 머리 내용만을 담으므로 직접 어떤 일을 할수 없다. 

 

3. 사용 이유
추상 클래스를 이해하기 전에 자바는 "객체지향"언어라는 점을 인지해야 한다.

이를 위해 단어의 의미를 정리.

 

추상 : 덜 구체화 된 것

객체 : "상태와 행동" 을 가진 것

클래스 : "객체를 만들기 위한 툴"

 

초기화 : 클래스를 이용하여 객체 생성

 

추상클래스의 경우는 앞서 말한 듯이 개념적인 내용만을 담았으므로 객체를 생성하기에는 

구체화 되어있지 않다. 즉, "추상클래스는 객체를 만들지 마라!" 라는 의미.

 

그럼 왜 쓰는가?

추상클래스는 다형성을 구현하면서, 개념적인 공통 부분을 추출하여 선언할때 사용된다.

 

예를 들면, 

상속받는 클래스들에서 공통적인 내용이면서 각 클래스에 맞게 변경되어야 하는 메소드들은

(가령, DB커넥션을 담당하는 메소드라고 한다면 다양한 DBMS등의 접속 환경에 따라 선언을 달리 해줘야 한다.)

추상메소드로 선언하는 것이 좋을 것이다. 

그리고 이러한 커넥션을 담당하는 추상메소드를 구성하는 DAO 클래스는 추상클래스가 될 것이다. 

 

ex)

public abstract class UserDao{

.......

 

public abstract Connection getConnection() throws ClassNotFoundException, SQLException;

}

 

DB접속을 위해서라면 UserDao를 반드시 상속받아 getConnection을 오버라이딩 해야 한다. 

 

이처럼 

1. 공통적인 내용이면서

2. 환경에 따라 변화되고 

3. 그에 맞게 새로 정의(오버라이딩)해야 하는 부분

에 대해서는 추상클래스를 써야 할 것이다. 

 

 

 

내용 출처 > 

http://itewbm.tistory.com/24 

http://jweh.tistory.com/64 

http://silverktk.tistory.com/134

 

상기 내용은 위의 블로그의 내용들을 종합하여 정리한 것입니다.  

좋은 정보를 제공해 주신 각 블로그 주인분들께 감사드립니다. 







AD_1