본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
JAVA/객체지향

JAVA - 객체지향 프로그래밍(OOP) - 추상 클래스

by 방구석 대학생 2022. 1. 23.

 

추상 클래스

- 추상 클래스는 미완성된 클래스이다.

- 미완성된 클래스는 미완성된 메소드인 추상 메소드를 포함하고 있다.

- 추상 클래스는 혼자로는 클래스의 역할을 다 못하지만, 새로운 클래스를 작성하는 데 있어 그 바탕이 되는 부모 클래스로서의 중요한 의미를 갖는다.

왜냐하면 클래스를 작성함에 있어서 어느정도 작성된 상태에서 시작할 수 있기 때문이다.

- 클래스 앞에 abstract 키워드를 붙인다.

abstract class Car {
	abstract void accelrate();
}

- abstract 키워드가 있는 클래스라고 모두 구현해야 하는 것은 아니다. 왜냐하면 단지 공유의 목적으로 abstract class 를 만드는 경우도 있기 때문이다.

 

추상 클래스의 목적

- 기존의 클래스에서 공통된 부분을 추상화하여 상속하는 클래스에게 추상 메소드 구현을 강제화한다.

메소드의 동작을 구현하는 자식 클래스에게 위임한다.

- 공유의 목적을 가지고 있다.

 

추상 클래스의 특징

- 추상 클래스는 추상 메소드가 아닌 일반 메소드, 멤버도 포함할 수 있다.

하지만 추상 메소드를 하나라도 포함하고 있다면 추상 클래스로 선언해야 한다.

- 추상 클래스는 동작이 정의되지 않은 추상 메소드를 포함하고 있으므로 인스턴스를 생성할 수 없다.

abstract class Animal {
  abstract void cry();
}

class Cat extends Animal {
  @Override
  void cry(){
    System.out.println("냐옹냐옹 ~~!");
  }
}

class Dog extends Animal {
  @Override
  void cry(){
    System.out.println("멍멍 ~~!");
  }
}

public class Test{
  public static void main(String[] args){
    // Animal animal = new Animal();
    // 추상 클래스는 자체적으로 인스턴스를 생성할 수 없다. 불완전하기 때문에.
    
    Cat cat = new Cat();
    Dog dog = new Dog();
    
    cat.cry();
    dog.cry();
    
  }
}

 

추상 클래스인 Animal 은 추상 메소드인 cry() 를 가지고 있으며, Animal 클래스를 상속받는 자식 클래스인 Dog, Cat 클래스는 cry() 메소드를 오버라이딩 해야만 인스턴스를 생성할 수 있다.

 

* 추상 메소드

- 선언부만 작성하고 구현부는 작성하지 않는 메소드이며, 앞에 abstract 키워드를 붙인다.

- 구현부를 작성하지 않는 이유는 메소드의 내용이 상속받은 클래스에 따라 달라질 수 있기 때문이다.

- 사용하는 목적은 추상 메소드를 포함한 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 강제하기 위함이다.

- 추상 클래스를 상속받은 자식 클래스는 오버라이딩을 통해 조상인 추상 클래스의 추상 메소드를 모두 구현해야 한다.

- 만약, 자식 클래스에서 추상 메소드를 하나라도 구현하지 않는다면 자식 클래스 역시 추상 클래스로 지정해야 한다.

 

 

인터페이스 VS 추상 클래스

* 추상 클래스(abstract)

- 추상 클래스는 추상 메소드를 1개 이상 가지고 있는 클래스를 의미한다.

- 기존 메소드 이외에 추상 메소드를 상속 시켜서, 반드시 구현이 필요한 내용인 추상 메소드를 상속받은 클래스에서 구현시키는 것이 주 목적이다.

- 추상 메소드를 1개 이상 가진 클래스는 객체 생성이 안되므로, 추상 클래스를 상속받은 클래스의 객체 생성을 위해서는 추상 메소드를 구현해야 한다.(추상 메소드 구현을 강제한다.)

 

* 인터페이스(interface)

- 상수와 메소드 선언 집합으로서, 정의된 메소드를 implements 받은 곳에서 모두 구현을 강제한다.

- JAVA 는 단일 상속만을 지원하기 때문에, 추상 클래스를 상속받은 클래스는 다른 클래스를 상속받을 수 없다.

- 그러나 인터페이스는 인터페이스 끼리 상속이 가능하므로, 여러 인터페이스 상속이 가능하다.

 

 

참고 : https://velog.io/@woo00oo/%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4

 

추상 클래스

추상 클래스는 미완성된 클래스이다.미완성된 클래스는 미완성된 메소드인 추상 메소드를 포함하고 있다.추상 클래스는 혼자로는 클래스의 역할을 다 못하지만, 새로운 클래스를 작성하는 데

velog.io