추상 클래스

01_49g_63m·2024년 3월 28일
post-thumbnail

추상 클래스와 인터페이스의 등장 배경

자식 클래스가 재정의를 안하면? → 부모가 명령을 내리면 (메세지를 보내면) 오동작을 한다.

→ 다형성을 보장하지 않음 → 다형성을 보장하려면?→ 재정의를 강제로 하도록 만들어 주면 된다.

이때 추상 클래스, 인터페이스가 등장한다!

추상 클래스

= 불완전한 클래스

= 추상 메서드 (불완전한 메서드) 를 가지고 있는 클래스
but ! 구현된 메서드도 가지고 있을 수 있음

= 서로 비슷한 클래스의 공통 부분을 묶을 때 사용

= 다형성 일부만 보장

public class Animal{

public void eat();

}

위에서 eat() 메서드는 구현부가 없다.

그런 메서드를 추상 메서드 라고 부르고 그런 추상 메서드는 앞에 abstract 를 붙인다.

왜 구현부를 없앨까?

원래는 eat()의 구현부가 있었지만 사실 그 부분은 출력이 되지 않고 통로 역할만 하기 때문에 구현부를 없애고 추상 메서드를 만든 것이다.

  • 추상 클래스는 스스로 new를 통해 객체를 생성 불가
  • 단독으로 사용 불가

그치만 부모의 역할은 할 수 있기 때문에 하위 클래스(자식)을 통해 객체 생성은 가능하다.

따라서 부모가 불완전하지만 자식은 완전해야 하기 때문에 무조건 재정의를 해야 오류가 나지 않는다.

재정의를 해야한다. = 구현해야 한다. = Body { } 를 만들면 된다.

추상 클래스와 일반 클래스의 차이점

추상 클래스는 재정의를 반드시 해야 동작이 된다.

일반 클래스는 재정의를 해도 되고 안해도 되기 때문에 다형성을 보장할 수 없다.
(바람직하지 않음)

문제를 풀어보자

추상 클래스에 대한 설명으로 옳지 않은 것을 모두 고르시오.

1번) 클래스를 정의할 때 abstract 키워드를 사용하여 해당 클래스가 추상클래스임을 명시한다.

2번) new 키워드를 통해 직접적으로 해당 클래스의 객체를 생성할 수는 없고, 생성자도 존재하지 않는다.

3번) 모든 메소드들을 반드시 재정의 하도록 강제하여 다형성을 보장한다.

4번) abstract 키워드를 사용하여 메소드를 정의하면 미구현 상태로 둔 채 재정의를 강제할 수 있다.

답: b , c
생성자는 존재할 수 있고, '모든' 메소드들을 반드시 재정의 하도록 강제하는 것은 아님 
profile
CODING, AND MANY MORE

0개의 댓글