[Java] 추상클래스

해니·2024년 10월 21일
0

Java

목록 보기
21/34
post-thumbnail

추상 클래스 & 추상 메서드

  • Java에서는 abstract 클래스명과 메서드명 옆에 붙임으로서 컴파일러에게 추상 클래스와 추상 메서드임을 알려준다.
  • 추상 메서드
    • 메서드의 선언부만 작성하고 구현부는 미완성인 채로 남겨둔 메소드
    • 부모(추상) 클래스에서 메서드를 선언부만을 작성하고, 실제 내용은 상속받는 클래스에서 구현하도록 하기 위해 미완성채로 남겨둔다.
  • 추상 클래스
    • 하나 이상의 추상 메소드를 포함하는 클래스

📘 클래스의 선언부에 abstract 키워드가 있다는 말은 안에 추상 메서드(abstract method)가 있으니 상속을 통해서 구현해주라는 지침을 의미한다.



추상 클래스 생성자

  • 추상클래스는 상속 구조에서 부모 클래스를 나타내는 역할로만 이용 되기 때문에
    new 생성자를 통해 인스턴스 객체로 직접 만들 수 없다.

abstract class Animal { 
}

Animal a = new Animal(); // ERROR !!

  • 추상 클래스를 어느 자식의 클래스에 상속시키고, 자식 클래스를 인스턴스화 하여 사용해야 한다.
abstract class Animal { 
}

class Cat extends Animal {
}

public class Main {
    public static void main(String[] args) {
        Cat c = new Cat();
    }
}
  • 직접적인 인스턴스화가 불가능하지만, super() 메소드를 이용해 추상 클래스 생성자 호출이 가능하다.
abstract class Animal {
	public String name;
    
    public Animal(String name) {
    	this.name = name;
    }
    
    public abstract void run();
}

class Cat extends Animal {
	
    public Cat(String name){
    	super(name);
    }
    
    @Override
    public void run() {
    	/* ... */
    }
    
}

public class main {
	public static void main(String[] args){
    	Cat cat = new Cat("콩물이");
        cat.name; // 콩물이
    }
}



추상 클래스의 활용


공통 멤버의 통합으로 중복 제거

  • 추상 클래스의 활용 전
class Cat {
	void run() {}
    void cry() {}
    void grooming() {}
    
}

class Dog {
	void run() {}
    void cry() {}
    void takeAWalk() {}
}

  • 추상 클래스의 활용 후

class abstract Animal {
	void run();
    void cry();
}

class Cat extends Animal {
	void run(){
    	/* ... */
    }
    void cry(){
    	/* ... */
    }
    void grooming() {}
    
}

class Dog extends Animal {
	void run(){
    	/* ... */
    }
    void cry(){
    	/* ... */
    }
    void takeAWalk() {}
}



💡 공통된 필드와 메서드를 통일하는 것은 일반 클래스로도 가능하기 때문에 추상 클래스만의 고유 용도라고 할 수는 없지만, 인터페이스(Interface)와의 차이점을 이해하기 위해 알맞은 예제이다.



구현의 강제성을 통한 기능 보장

  • 추상 클래스를 상속받는 자식 클래스가 추상 메서드를 구현하지 않으면 오류 메세지가 나타나기 때문에 기능 구현을 누락하지 않을 수 있다.



💡 인터페이스(interface)에도 동일하게 적용되는 특성이다.





출처

추상 클래스(Abstract) 용도 완벽 이해하기

profile
💻 ⚾️ 🐻

0개의 댓글