본문 바로가기
Programming/객체 지향 프로그래밍(OOP)

OOP 활용: 추상클래스(Abstract Class)

by vita12321 2023. 10. 6.
728x90
반응형

이번 글에서는 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 핵심 요소 하나인 '추상 클래스(Abstract Class)' 대해 상세하게 다루겠습니다. 이전에는 오버라이딩과 활용법에 대해 살펴봤지만, 이번 글에서는 추상 클래스를 어떻게 활용하는지, 그리고 필요한지 등에 대해 심화된 내용과 실제 사례를 통해 설명하겠습니다.


1. 추상 클래스(Abstract Class)?

 

객체 지향 프로그래밍에서 '추상 클래스' 인스턴스를 생성할 없는 클래스를 말합니다. , 객체를 직접적으로 생성할 없으며 반드시 상속을 통해서만 사용됩니다. 추상 메서드(구현 내용이 없는 메서드) 하나 이상 포함하며, 해당 메서드들은 상속받은 자식 클래스에서 구현되어야 합니다.


2. 추상 클래스를 사용하는가?

 

추상 클래스는 공통적인 기능을 가진 여러 객체들의 베이스(base) 역할을 합니다. 예를 들어 동물(Animal) 나타내는 추상 클래스가 있고 강아지(Dog), 고양이(Cat), (Bird) 등의 구체적인 동물 종류들은 Animal 상속받아 각각의 특성을 구현합니다.

 

추상클래스의 주된 목적은 기본적인 행동 규칙(set of rules or behaviors) 정의하고, 규칙에 따라 여러 다른 형태로 확장될 있는 설계 방식입니다.


3. 추상클래스 활용

 

Java 언어 기준으로 Animal라는 이름의 추상클래스가 있고 Dog Cat클래스가 Animal클래스를 상속받았다고 가정하겠습니다.

 

예시 코드:

public abstract class Animal {

 

    public abstract void sound();

 

}

 

public class Dog extends Animal {

 

    @Override

 

    public void sound() {

 

        System.out.println("The dog barks");

 

    }

 

}

 

public class Cat extends Animal {

 

    @Override

 

    public void sound() {

 

        System.out.println("The cat meows");

 

   }

 

}

 

예제에서 Dog Cat클래스 모두 부모클래스인 Animal로부터 sound()메소드(추상 메소드) 상속받았으며 각각 재정의하여 고유한 소리 출력을 구현하였습니다.


4. 추상 클래스 사용 예시

 

Animal myAnimal = new Dog();

 

myAnimal.sound();  // Outputs: "The dog barks"

 

myAnimal = new Cat();

 

myAnimal.sound();  // Outputs: "The cat meows"

 

코드는 추상 클래스의 활용 예시입니다. Animal 타입의 변수 myAnimal Dog 객체와 Cat 객체를 할당한 , sound() 메소드를 호출하면 각각 다른 결과가 출력됩니다. 이는 다형성(Polymorphism) 예시로, 동일한 메서드 호출이지만 실제 참조하는 객체에 따라 다른 결과를 보여줍니다.


5. 주의사항

 

추상 클래스는 인스턴스화할 없습니다. , new 키워드를 사용하여 직접 생성할 없으며, 반드시 하위 클래스에서 상속을 받아 사용해야 합니다.

 

또한 추상 클래스 내부에 있는 추상 메서드들은 반드시 하위 클래스에서 구현되어야 합니다. 만약 하위 클래스에서 추상 메서드를 구현하지 않으면 해당 하위 클래스도 추상클래스로 선언해야 합니다.


6. 활용 사례

 

추상클래스는 다양한 상황에서 유용하게 사용됩니다.

 

  • 게임 개발: 게임 내의 다양한 캐릭터들이 같은 타입(예: Character)을 공유하지만 각각 고유한 동작(예: attack())을 수행해야 할 때, 이러한 동작들을 추상메서드로 정의하고 각 캐릭터마다 이를 오버라이딩하여 구현할 수 있습니다.

 

  • GUI 프로그래밍: 여러 컴포넌트(Button, TextField 등)가 같은 기본 기능을 공유하지만 세부적인 동작이나 모양이 달라야 할 때, 이런 기능들을 추상클래스로 정의하고 필요에 따라 오버라이딩하여 구현합니다.

7. 결론

 

객체 지향 프로그래밍에서 '추상클래스' 중요한 개념입니다. 개념을 이해하고 활용하면 코드의 유연성과 확장성을 높일 있으며 복잡한 문제에 대응하는데 유용합니다. 추상 클래스를 사용함으로써, 공통적인 로직은 곳에서 관리하고, 변화가 필요한 부분만 자식 클래스에서 구현함으로써 코드의 중복을 줄이고 유지 보수를 용이하게 있습니다.

 

그러나 추상 클래스도 잘못 사용되면 예상치 못한 결과를 초래할 있습니다. 추상 메서드가 많아지면 해당 추상 클래스를 상속받는 하위 클래스에서 많은 메서드를 오버라이딩해야 하므로 복잡성이 증가할 있습니다. 따라서, 설계 단계에서 충분히 고려하여 적절한 방법으로 사용하는 것이 중요합니다.

 

추상클래스는 객체 지향 설계 원칙 하나인 '공통된 부분을 상위(부모) 클래스로 올리라' 원칙에 드러납니다. , 여러 클래스들 사이에 공통된 필드나 메소드가 있다면 이들을 추출하여 상위클래스로 만들어 코드의 재사용성을 높일 있는 것입니다.

728x90
반응형

 

728x90
반응형