추상 클래스에서 추상 메서드는 필수인가?
추상 클래스에서 추상 메서드는 하위 클래스에서 반드시 구현되어야 하는 필수적인 요소이다.
추상 클래스(Abstract Class)
: 하나 이상의 추상 메서드(Abstract Method)를 포함하는 클래스
추상 메서드
: 메서드의 선언만 있고 구현은 없는 메서드
추상 클래스를 사용하는 이유
1. 메서드 구현 강제
추상 클래스를 상속받은 하위 클래스에서는 추상 메서드를 반드시 구현해야한다.
이를 통해 메서드의 구현을 강제할 수 있으며, 일관된 동작을 보장할 수 있다
2. 다형성(Polymorphism) 구현
추상 클래스를 상속받은 다양한 하위 클래스들은 같은 추상 메서드를 구현하므로, 일관된 방식으로 다룰 수 있다
다형성을 통해 유연하고 확장가능한 코드를 작성할 수 있다
3.공통 기능 제공
추상 클래스는 일반 메서드와 멤버 변수를 가질 수 있다
이를 활용하여 공통된 기능을 구현하고, 하위 클래스에서 중복 코드를 피할 수 있다
abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void makeSound(); // 추상 메서드
public void sleep() {
System.out.println(name + " is sleeping.");
}
}
class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println(getName() + " says Woof!");
}
}
class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println(getName() + " says Meow!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Buddy");
dog.makeSound(); // Dog 클래스에서 추상 메서드를 구현한 것을 호출
dog.sleep(); // Animal 클래스의 일반 메서드 호출
Cat cat = new Cat("Whiskers");
cat.makeSound(); // Cat 클래스에서 추상 메서드를 구현한 것을 호출
cat.sleep(); // Animal 클래스의 일반 메서드 호출
}
}
보통의 클래스와 추상 클래스의 차이는 ?
- 인스턴스화 가능 여부
- 보통 클래스는 직접 인스턴스화하여 객체를 생성함
- 추상 클래스는 추상 메서드를 포함하고 있기 때문에 직접적으로 인스턴스화 할 수 없음
-> 추상 클래스를 상속 받은 하위 클래스에서 추상 메서드를 구현한 후에 객체 생성
abstract class Shape {
private String color;
public Shape(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public abstract double calculateArea();
}
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}
public class Main {
public static void main(String[] args) {
Shape circle = new Circle("Red", 5.0);
double area = circle.calculateArea();
System.out.println("Circle area: " + area);
}
}
이 예시에서는 추상 클래스인 Shape 클래스를 직접 인스턴스화할 수 없습니다.
따라서 하위 클래스인 Circle 클래스를 통해 객체를 생성하고 사용합니다.
- 추상 메서드의 존재
- 보통 클래스는 모든 메서드에 대해 구현 내용이 있어야함
- 추상 클래스는 하나 이상의 추상 메서드를 가질 수 있음
- 일반 메서드와 멤버 변수의 존재
- 보통 클래스와 추상 클래스 모두 일반 메서드와 멤버 변수를 가질 수 있음
- 상속과 확장성
- 추상 클래스는 다른 클래스에서 상속받아 확장하여 사용될 수 있음
-> 추상 클래스를 상속받은 하위 클래스는 추상 메서드를 구현하고, 추가적인 메서드나 변수를 포함할 수 있음
- 보통 클래스도 상속을 통해 확장될 수 있지만, 추상 클래스는 더욱 구체적인 클래스 계층 구조를 형성할 수 있음
추상 클래스
일반적인 클래스와 달리, 추상 메서드를 통해 하위 클래스에서의 구체적인 동작을 강제하는 역할을 합니다.
또한 공통된 기능을 추상 클래스에서 구현함으로써 코드 중복을 줄일 수 있습니다.
일반 클래스는 특정한 동작을 구현하거나 객체를 직접 생성하기 위해 사용됩니다.
final은 추상 클래스를 수정할 때 사용할 수 있나?
final 키워드는 추상 클래스에 사용할 수 없다.
추상 클래스는 자식 클래스에서 구체적인 동작을 구현하기 위해 설계되었기 때문에,
일반적으로 final 키워드오 함께 사용되지않습니다.
final 키워드는 클래스, 메서드 또는 변수를 수정할 수 없도록 지정합니다.따라서 final 키워드를 추상 클래스에 사용하면 해당 클래스를 상속받아 확장하는 것이 불가능해집니다.
final
키워드는 클래스의 확장을 방지하고 변경 가능성을 제한하는 경우에 사용됩니다
'1. basic' 카테고리의 다른 글
String 클래스의 일반적인 메서드 (0) | 2023.07.10 |
---|---|
문자열을 반전시키는 가장 좋은 방법은 ? (0) | 2023.07.10 |
String str ="i"와 String str = new String("i")가 동일? (0) | 2023.07.06 |
자바에서 문자열을 조작하는 클래스? 각 클래스의 차이는? (0) | 2023.07.06 |
Java 에서 String은 기본 데이터 타입 ? (0) | 2023.07.05 |