[문법/자바/JAVA] 추상 클래스?

이나영·2022년 3월 27일
0

문법 - Java

목록 보기
5/7
post-thumbnail

🔰추상(Abstract)

추상(abstract)는 실체 간에 공통되는 특성을 추출한 것이다.


추상 클래스의 용도

1. 공통 필드와 메소드의 이름을 통일

실체 클래스 설계시 분업 작업을 할 때, 개발자마다 동일한 기능을 모두 다른 이름으로 작성할 때 객체마다 사용 방법이 다름을 방지하기 위해서 공통된 필드와 메소드 이름을 통일한다.

2. 실체 클래스 작성 시 시간 절약

공통 필드와 메소드는 추상클래스로 작성해두면 실체 클래스를 작성하는 데 시간을 절약할 수 있다.


public abstract class 클래스 {
	// 필드
    // 생성자
    // 메소드
}
  • 추상 클래스는 new연산자를 이용해서 객체를 생성하지 못하고, 상속을 통해 자식 클래스만 만들 수 있다.
  • 자식 클래스는 반드시 추상 메소드를 재정의해서 실행 내용을 작성해야 하는데, 그렇지 않으면 컴파일 에러가 발생한다.

추상 메소드와 재정의

추상 클래스는 실체 클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해놓은 것으로, 실체 클래스의 멤버(필드, 메소드)를 통일하는 데 목적이 있다. 모든 실체들이 가지고 있는 메소드의 실행 내용이 동일하다면 추상 클래스에 메소드를 작성하는 것이 좋다.

BUT,

추상 클래스 설계 시 하위 클래스가 반드시 실행해야 할 메소드가 있을 때 해당 메소드를 추상 메소드로 선언한다. 그리고 추상 클래스를 상속받고, 추상 메소드를 작성하지 않으면 컴파일 에러가 발생한다.



다음은 Animal 클래스를 추상 클래스로 선언하고, 동물은 소리를 낸다는 공통적인 특징을 규정하기 위해 sound() 메소드를 추상 메소드로 선언한 것이다.

// Animal.java

public abstract class Animal { // 추상 클래스
	public String kind;
    
    public void breathe() {
    	System.out.println("숨을 쉽니다.");
    }
    
	public abstract void sound(); // 추상 메소드
}
// Dog.java

public class Dog extends Animal {
	public Dog() {
    	this.kind = "포유류";
    }
    
    @Override
    public void sound() {
    	System.out.println("멍멍"); // 추상 메소드 재정의
    }
}
// AnimalExample.java

public class AnimalExample {
	public static void main(String[] arg) {
    	Dog dog = new Dog();
        Cat cat = new Cat();
        dog.sound();
        cat.sound();
        System.out.println("----");
        
        // 변수의 자동 타입 변환
        Animal animal = null;
        animal = new Dog();
        animal.sound();
        
        animal = new Cat();
        animal.sound();
        System.out.println("----");
        
        // 메소드의 다형성
        animalSound(new Dog()); // 자동 타입 변환
        animalSound(new Cat()); // 자동 타입 변환
    }
    
    public static void animalSound(Animal animal) {
    	animal.sound(); // 재정의된 메소드 호출
    }
}

👀책 <혼공자>를 참고하여 작성하였습니다 :)

profile
소통하는 백엔드 개발자로 성장하기

0개의 댓글