티스토리 뷰

▶추상 클래스(Abstract Class)

 

🔎 추상 메소드(abstract method)


추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미합니다.

→ ✨ 무조건 재정의해서 사용해야 하는 메소드

 

자바에서 추상 메소드를 선언하여 사용하는 목적은

추상 메소드가 포함된 클래스를 상속받는 사직 클래스가 반드시 추상 메소드를 구현하도록 하기 위함입니다.

 

예를 들어 모듈처럼 중복되는 부분이나 공통적인 부분은 미리 다 만들어진 것을 사용하고,

이를 받아 사용하는 쪽에서는 자신에게 필요한 부분만을 재정의하여 사용함으로써 생산성이 향상되고 배포 등이 쉬워지기 때문인데요!

 

따라서 이러한 추상 메소드는 추상 클래스에서는 선언만 하고 구현부는 작성하지 않습니다.

바로 이 작성되어 있지 않은 구현부를 자식 클래스에서 오버라이딩하여 사용하는 것입니다.

 

→ ✨ 추상 클래스에서는 선언만 해두고, 반드시 자식 클래스에서 오버라이딩

→ ✨ 추상 메소드는 반드시 사용의 의미, 강제성이 부여되어 있음

 

📌 추상 메소드 문법

abstract 반환타입 메소드이름();

위와같이 선언부만 있고 구현구{ }가 없다는 의미로 선언부 끝에 바로 세미콜론(;)을 추가합니다.

 

🔎 추상 클래스(abstract class) - 추상 메소드를 사용하고 싶다면


자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 합니다.

이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성(오버로딩&오버라이딩)을 가지는 메소드의 집합을 정의할 수 있도록 해줍니다.

 

즉, 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의해야 합니다.

 

 📌추상 클래스 문법

abstract class 클래스이름 {
    ...
    abstract 반환타입 메소드이름();
    ...
}

 

 

📌 클래스는 원래 추상적이다

클래스에 대해 알아보았을 때 클래스라는 추상적인 개념을 인스턴스화 하면서 구체화하는 것이라고 했었습니다.

따라서 abstract를 붙인 추상 클래스에서도 추상 메소드 뿐만 아니라 그냥 일반 변수나 메소드들을 모두 선언이 가능합니다.

→ 추상 클래스에서 일반 생성자와 필드, 일반 메소드도 포함 가능

 

따라서 추상 클래스가 일반 클래스보다는 넓은 개념이어서

"아 그냥 abstract 키워드 붙이고 그냥 일반 클래스 사용하듯이 사용하면 되겠군" 할 수 있지만

다른 개발자들이 abstract 키워드를 보는 순간 의미를 찾으려고 할 것 입니다.

 

따라서 상황에 맞게 강제성의 목적이 있을 때만 추상 클래스를 사용하는 것이 좋습니다.

 

 

📌 구현이 되어야만 메모리에 올라간다

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

아직 메모리에 올라가지 않았기 때문에 메모리에 추상 클래스의 필드가 없습니다.

 

따라서 추상 클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 비로소 자식 클래스 인스턴스를 생성할 수 있게 됩니다.

 

📌 예제

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 Polymorphisom {
    public static void main(String[] args) {
        // Aninmal a = new Animal(); // 추상 클래스는 인스턴스를 생성할 수 없음
        Cat c = new Cat();
        Dog d = new Dog();
        
        c.cry(); // 냐옹냐옹!
        d.cry(); // 멍멍!
    }
}

 


✨ 정리

추상 메소드를 사용하는 목적 : 상속받은 자식 클래스에서 반드시 구현해서 사용하라는 강제성을 부여하기 위해

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함