울음참고 개발공부
Published 2023. 7. 11. 11:08
추상 클래스 1. basic
728x90

 

추상 클래스에서 추상 메서드는 필수인가?

 

 

 

추상 클래스에서 추상 메서드는 하위 클래스에서 반드시 구현되어야 하는 필수적인 요소이다.

 

 

 

추상 클래스(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
키워드는 클래스의 확장을 방지하고 변경 가능성을 제한하는 경우에 사용됩니다

 

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!