본문 바로가기

java

추상 클래스, 추상 메소드

객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 합니다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있습니다. 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고 추가적인 특성을 가질 수 있습니다. 여기서 특성이란 필드와 메소드를 말합니다. 

 

1. 추상 클래스의 용도

  •  공통된 필드와 메소드의 이름을 통일할 목적
  • 실체 클래스를 작성할 때 시간 절약 - 공통적인 것은 추상 클래스에 미리 작성하고 다른 점만 실체 클래스에 선언

 

2. 추상클래스 선언

클래스 선언에 'abstract' 키워드를 붙여야 합니다. 이 키워드를 붙으면 new 연산자를 통해 객체를 만들지 못하고, 상속을 통해 자식 크래스만 만들 수 있습니다. new 연산자로 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 때 super()를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 합니다. 

 

 

결과:

전원을 켭니다.

인터넷을 검색합니다.

전원을 끕니다.

 

--------------------------------------

 

3. 추상 메소드

메소드의 선언만 통일하고, 실행 내용은 실체 클래스마다 달라야 하는 경우가 있습니다. 이런 경우를 위해 추상 클래스는 추상 메소드를 선언할 수 있습니다. 추상 메소드는 abstract 키워드와 함께 메소드의 선언부만 있고 메소드 실행 내용인 중괄호가 없는 메소드를 말합니다. 

 

[public | pritected] abstract 리턴타입 메소드이름(매개변수, ...);

 

추상 클래스 설계 시 하위 클래스가 반드시 실행 내용을 채우도록 강제하고 싶은 메소드가 있을 경우 해당 메소드를 추상 메소드로 선언합니다. 자식 클래스는 반드시 추상 메소드를 재정의해서 실행 내용을 작성해야 하는데, 그렇지 않으면 컴파일 에러가 발생합니다.

 

 

'java' 카테고리의 다른 글

java 중첩 클래스, 중첩 인터페이스  (0) 2021.01.26
java 인터페이스(interface)  (0) 2021.01.25
다형성  (0) 2021.01.25
메소드 재정의(오버라이딩 Overriding)  (0) 2021.01.24
상속과 super(); + this()  (0) 2021.01.24