의견.png

추상클래스

위키원
rudgh01 (토론 | 기여)님의 2020년 8월 10일 (월) 15:35 판 (참고자료)
이동: 둘러보기, 검색

추상클래스(abstract class)는 1개 이상의 추상메소드멤버로 가지고 있는 클래스를 말한다. 추상클래스는 추상메소드를 포함하고 있다는 점을 제외하면 일반 클래스와 모든 점이 동일하며 생성자필드, 메소드도 포함할 수 있다.[1] 추상클래스 중에서 오직 추상메소드상수만을 멤버로 가지고 있는 것을 인터페이스(Interface)라고 한다.

개요

추상클래스는 실체클래스의 공통적인 부분을 추출해서 선언한 클래스이며 실체성이 없고 구체적이지 않기 때문에 객체를 생성할 수 없다. 그러므로 실체클래스와의 상속관계를 통해 사용할 수 있다.[2] 클래스를 설계도라고 했다면 추상클래스는 미완성 설계도라고 할 수 있다. 클래스가 미완성이라는 것은 미완성 메서드를 포함하고 있다는 의미로 온전한 객체를 생성할 수 없다.[3]

목적

추상클래스의 목적은 공통적인 기능을 하는 객체들의 추상화로 객체를 생성하는 것이 아닌 상속을 위한 슈퍼 클래스로 활용하는 것이다.[4] 추상클래스는 추상메소드를 통해 추상클래스를 상속받는 서브 클래스가 구현할 메소드의 원형을 알려주는 인터페이스의 역할을 하고 서브 클래스의 다형성을 실현한다.

통일 목적

추상클래스에서 미리 정의한 필드메서드가 있으면 실체클래스에서는 추상클래스의 필드와 메서드명을 변경할 수 없고 무조건 해당 명명으로 구현해야한다. 이로인해 필드와 메서드 이름을 통일하여 유지보성을 높이고 통일성을 유지할 수 있다. 예를들어 A자동차를 만드는데 각기 다른 실체클래스를 사용한다면 이후에 자동차를 교체하거나 업그레이드할 때 수정하거나 교체하는데 상당히 무리가 있다. 그렇기 때문에 새로 개발을 해야하는 상황이 올 수 있지만 추상클래스를 사용해 미리 필드와 메소드를 정의한다면 유지보수가 쉬워진다.

생성 및 구현

추상메소드를 가진 클래스로써 abstract로 선언하여 생성하고 추상클래스의 구현은 서브 클래스에서 슈퍼 클래스의 모든 추상메소드를 오버라이딩하여 실행 가능한 코드로 구현하는 것이다.[5]

//추상클래스 생성
abstract class A{
	abstract public int add(int a, int b);
}
//추상클래스 구현
class B extends A{
	@Override
	public int add(int a, int b){
		return a+b;
	}
}

특징

  • 객체 생성 불가능 : 추상클래스는 자체적으로 객체 생성이 불가능하여 서브 클래스가 상속을 통해 객체를 생성해야 한다.[6]
  • 추상클래스 상속 : 상속받은 서브 클래스는 반드시 추상메소드를 구현(오버라이딩)해야 한다. 만약 하나라도 추상메소드를 구현하지 않는다면 해당 서브 클래스도 추상클래스로 지정해야 한다.

각주

  1. TCPSCHOOL, <추상클래스>, <<TCPSHOOL>>
  2. Limky Lim-ky", 〈자바 추상클래스란?〉, 《개인블로그》, 2019-05-08
  3. lshjh4848, 〈추상클래스와 인터페이스〉, 《개인블로그》, 2019-11-04
  4. 피누, <인터페이스와 추상클래스>, <<litien.log>>, 2019-11-17
  5. 황기태, <JAVA ESSENTIAL>, <<생능출판사>>, 2018-08-10
  6. JOKER, <추상 클래스(abstract class), 추상 메소드)>, <<JOKER`s ROOM>>, 2017-03-21

참고자료

같이 보기


  의견.png 이 추상클래스 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.