추상화

Jay_u·2023년 1월 20일
0

Java

목록 보기
3/8

미완성 메소드가 있는 클래스는 반드시 미완성 클래스로 만들어야 하는 이유


미완성 메소드는 추상 메소드(abstract method)라고 하는데

이를 만드는 이유는 자식클래스에서 메소드를 무조건 오버라이딩(재정의)하기 때문에

부모 클래스에서는 메소드를 정의할 필요가 없으므로 미완성 메소드로 만들어 버린다.

=> 이러한 미완성 메소드가 있는 클래스는 미완성 클래스로 만들어야 한다.

일반적으로 부모클래스를 미완성 클래스(abstract class)로 만든다.

미완성 클래스(== 추상 클래스, abstract class)를 사용하여 객체(인스턴스)를 생성할 수 없다.

=> 미완성 클래스 즉, 추상 클래스는 언제 사용하나요?

먼저 추상 메소드에 대해 생각해보자 우리는 자바의 여러 추상적인 메소드 예컨데 String.toUpperCase()를 사용하면서 내부에서 어떤 방식으로 문자를 대문자로 바꿔주는지 생각하지 않는다. 당연하게 해주겠지 하고 넘긴다. ==> 이를 추상적이라고 한다.

이러한 추상화를 클래스에 접목시킨, 구체적이지 않은 추상적인 데이터를 담고 있는 클래스를 사용함으로써 구조적인 객체를 설계하고 유지보수성을 높여준다.

교과서처럼 사용되는 예를 통해 추상 클래스의 활용을 알아보자.


Animal이라는 클래스를 보자

모든 동물은 운다. 돼지는 꿀꿀, 오리는 꽥꽥, 고양이는 야옹~

우리가 조물주가 되었다고 생각하고 접근해보자

일단 모든 동물은 우는데 각각이 어떻게 우는지 한 페이지에 정의해버리면 나중에 동물이 우는 소리를 바꿀 때 힘들어진다.

음 그래서 Animal이라는 클래스는 추상적으로만 정의해놓는다. cry()울긴 우는데 대략적으로 어떻게 울진 모르는 것이다.

조물주 : 음,, 몰?루 추상적인 설계도나 그려볼까

이제 각각의 동물들은 추상 클래스를 상속받는다. 이때 자식 클래스는 부모클래스(추상 클래스)의 추상메소드를 반드시 정의해야 한다.

조물주 "이렇게 해놓으니깐 보기도 좋고 나중에 바꾸기도 좋네"

    Pig extends Animal {
        cry(꿀꿀)
    }  
    
    Duck extends Animal {
        cry(꽥꽥)
    }
    
    Cat extends Animal {
        cry(야옹~)
    } 

그렇다 추상적인 Animal 클래스를 활용함으로써 각 동물 객체를 구조적으로 설계할 수 있게 되었다.

이게 바로 추상화를 사용하는 이유이자 추상화를 객체지향의 시작점이라 하는 이유다.

profile
정확한 정보를 전달할려고 노력합니다.

0개의 댓글