관리 메뉴

bright jazz music

추상클래는 왜 반드시 본문

Framework/Spring

추상클래는 왜 반드시

bright jazz music 2021. 12. 2. 20:24

###추상 클래스는 왜 반드시 상속한 후 사용하도록 만들었는가? 왜 상속을 강제하게 만들었는가?

구체적인 구현의 책임은 그것을 사용하는 쪽에 넘기는 것. 추상 클래스에서 공통 부분만 만들고, 맥락과 용도에 따라서 달라질 수 있는 부분이 있을 때 그것을 상속받은 하위 클래스에서 용도에 따라 달라지는 구현을 사용자가 직접하도록 규약하는 것이 추상클래스의 용도이다. 일부는 공통인데 또 일부는 각기 다른, 상황에 따라서 달라질 수 있는 공통적이지 않은 부분을 가지고 있는 어떤 클래스를 만들 때 추상클래스를 쓰는 것이 효과적이다. 계산기를 생각해 보자 사칙연산은 기본이니 추상클래스에 설계한다. 그리고 일부는 또 각기 다르기 때문에 상속받아서 직접 꾸미도록 한 것이다. 이렇게 프로그래밍하는 방식을 탬플릿 패턴이라고 한다. 모양자를 생각해 보자 똑같은 모양의 도형을 계속해서 그려 나갈 수 있지만 그것을 어떤 도구로 어떤 색으로 칠하는지는 사용자에게 달렸다.

그런데 여기서 질문이 생겼다. 그렇다면 인터페이스를 쓰면 되지 않는가?

이러한 추상 클래스의 사용은 작은 프로젝트에는 거의 없지만 큰 프로젝트에는 거의 쓰인다.

클래스 A는 abstract-- 추상클래스의 추상 중괄호가 없고 시그니처만 가지고 있음.
클래스 B는 A를 상속-- 익스텐드 후 반드시 오버라이딩을 해야함.

멤버 중 하나라도 추상이라면 그 멤버를 담고 있는 클래스도 추상이 된다.

abstract class A {
    public abstract int b();
    public void d(){
        System.out.println("world");
    }
}

class B extends A {
    public int b(){
        return 1;
    }
}

public class AbstractDemo {
    public static void main(String[] args) {
        // A obj = new A(); 오류
        B obj = new B();

    }
}


Comments