자바

추상 클래스

chantleman 2024. 7. 23. 12:27

2024.07.23 - [자바] - 오버라이딩. 다형성

 

오버라이딩. 다형성

- 최상위 클래스public class Animal { public void cry() { } public void sing() { }}    - Animal 클래스를 상속받음public class Cat extends Animal{ @Override public void cry() { System.out.println("야옹~"); }}   - Animal 클래스를 상

chantleman.tistory.com

지난 시간에 만들었던 Animal 클래스처럼

상위 클래스 메소드에 아무 내용도 없고 설계만 하는 경우 추상클래스를 이용합니다.

 

 

public class Animal {

	public void cry() {
    
	}
	public void sing() {
		
	}
}

이런 식으로 설계만 하는 경우에는 메소드를 만들 필요가 없기 때문에 아래와 같이 추상 메소드로 만듭니다.

 

public abstract void cry();

 

추상 메소드가 만들어지면 해당 클래스는 구현할 수 없습니다.(객체로 구현 불가능) 

따라서 클래스도 abstract를 통해 추상 클래스로 만들어줘야 합니다.

public abstract class Animal {

	public abstract void cry();
	public void sing() {
		
	}
}

하지만 추상 메소드를 만들었다고 해서 그 클래스안에 있는 모든 메소드가 다 추상 메소드일 필요는 없습니다.

 

 

부모가 추상클래스이면 자식클래스에서 해야할 것이 있는데

 

1. 자식도 abstract를 통해서 추상클래스로 바꾸고 넘기던지

2. 부모클래스에 있는 추상 메소드를 자식에서 구현해주던지

 

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

이렇게 cry메소드를 구현해주던지

 

public abstract class Cat extends Animal{
	
}

 

자식 클래스도 추상클래스로 바꿔서 자식클래스에게 넘겨주면 됩니다.

public class Sedan extends Car {
    @Override
    public void run() {
        System.out.println("Sedan is running");
    }
}

 

 


 

근데 자식 클래스도 추상클래스로 바꿔버리면

어차피 그 자식의 자식에서 구현을 해야할텐데 왜 굳이 자식클래스를 추상클래스로 바꿔야하냐..

 

 

  • 단계적 구현: 추상 클래스를 여러 단계로 나눌 때, 일부 공통 기능을 중간 단계에서 정의하고, 구체적인 구현은 최종 단계에서 제공할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 각 단계에서 특정 기능을 확장하거나 오버라이드할 수 있습니다.
  • 설계의 명확성: 추상 클래스를 여러 단계로 나누면, 각 단계에서 제공하는 기능을 명확히 정의할 수 있습니다. 예를 들어, Vehicle 클래스는 모든 차량의 공통적인 기능을 정의하고, Car 클래스는 자동차에 특화된 기능을 정의하며, 최종적으로 Sedan 클래스에서 구체적인 구현을 제공합니다.
  • 기능의 확장성: 추상 클래스의 중간 단계에서 기능을 확장하거나 수정할 수 있습니다. 이를 통해 특정 기능을 단계별로 추가하거나 변경할 수 있습니다.

 

'자바' 카테고리의 다른 글

간단한 게시판 예제  (1) 2024.07.24
인터페이스  (2) 2024.07.24
오버라이딩. 다형성  (1) 2024.07.23
ValueObject  (0) 2024.07.22
lombok.jar  (0) 2024.07.22