컴퓨터/정보처리기사 SW 공학

| 니앙팽이 - 객체지향(OOP) | 3-4 | 추상클래스

객체지향

📕 3. 객체지향 상속


📄 4. 추상 클래스

1). 추상 클래스(abstract class)?

ⓐ 하나 이상의 추상 메소드를 포함하는 클래스를

  1. 클래스는 클래스인데..
    추상클래스 그 자체로는 인스턴스를 만들 수 없는 미완성 클래스다.. 😶

    • 들어있는 추상 매서드도 미완성이다.(구현부가 없다)
  2. 오직 상속용으로, 파생클래스 만 쓸수 있는 미완성 클래스

    • 오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다..
  3. 추상 클래스는 추상 메소드를 포함하고 있다는 점을 제외하면
    일반 클래스와 모든 점이 같은것이,
    생성자와 멤버변수, 일반 메소드도 포함할 수 있다.

ⓑ 생긴 모습

  • 추상메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다.
    abstract class 클래스이름 {
        /*...*/
        abstract 반환타입 메소드이름(); 
            선언부만 있고 구현부가 없다
        /*...*/
    }
    

2). 왜 쓰는건가?

  1. 꼭 필요한 매서드 이지만, 자손마다 다르게 구현될 수 있다는 점을 염두해 틀(Form)만 제공한다.
    즉, 이름은 똑같은데 내용(돌아가는 알고리즘)이 달라야할때

    • 조상이 사용하던걸 써야 되는게 아니라 클래스 생성마다 거기에 맞는 함수를 만들어야 할때,
  2. 확장에 있어서 사용하는 틀(Form)을 만든다

    • 절차
      1. 이 추상 클래스를 상속한다
      2. 확장할때 추상 메소드를 자식 클래스에서 반드시 오버라이딩을 통해 구체적으로 구현한다.

3). 예시

ⓐ 분명 Animal로 같고, cry()도 분명 똑같은데 다른 실행모습을 보여준다.

abstract class Animal { 
    abstract void cry(); 
}
class Cat : Animal { 
    void cry() { System.out.println("냐옹냐옹!"); } 
}
class Dog : Animal { 
    void cry() { System.out.println("멍멍!"); } 
}

public static void main(String[] args) {
    // Animal a = new Animal(); // 추상 클래스는 인스턴스를 생성할 수 없음.
    Animal c = new Cat();
    Animal d = new Dog();
    c.cry();  
    d.cry();
}

>> 냐옹냐옹!
>> 멍멍!
ⓑ 다형성을 응용해, 분명 똑같은 Attack()인데.

참고

  1. https://brunch.co.kr/@kd4/6