[Java] 추상화(Abstract)와 애플리케이션 컨텍스트(Application Context) 또는 경계

    추상화(abstract) 정의

    추상화는 모델링이다. 

    추상화란 구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합하는 것이라고 정리할 수 있다. 

    1. object(명사)
    - 물건, 물체

    2. 개체(명사)
    - 전체나 집단에 상대하여 하나하나의 낱개를 이르느는 말

    3. 객체
    - 세상에 존재하는 유일무이한 사물

    4. 클래스
    - 분류, 집합. 같은 속성과 기능을 가진 객체를 총칭하는 개념

    클래스 :  객체 = 펭귄 : 뽀로로 = 사람 : 김연아 = 쥐 : 미키마우스

    세상에 존재하는 유일무이한 객체를 특성(속성 + 기능)에 따라 분류해 보니 객체를 통칭할 수 있는 집합적 개념, 즉 클래스(분류)가 나오게 된다.

    • 객체는 유일무이(Unique)한 사물이다.
    • 클래스는 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념이다.


    클래스의 의미는 분류이다. 따라서 객체들의 특성에 따라 분류했다는 의미가 된다. 

    • 사람 홍길동 = new 사람();
    • 사람 줄리엣 = new 사람();

    사람이라는 클래스(분류)를 이용해 유일무이하고 새로운 하나의 사람(객체)을 만들어 홍길동(객체 참조 변수)이라는 이름을 지어준 것이다.

    클래스를 이용해 object를 만들었다는 것을 강조할 떄는 object라는 표현보다는 클래스의 인스턴스(instance) 라는 표현을 쓴다.

    보통 객체를 먼저 인식하고 클래스를 인식하지만 창조자는 먼저 클래스를 인식하고 객체를 만들게 된다. 아담과 하와를 만들기 전에 사람이라는 개념을 먼저 가지고 있었을 것이다.
    프로그램을 만드는 과정에서 개발자는 바로 해당 애플리케이션의 창조가가 된다. 그래서 우리도 객체 지향 프로그래밍을 할 때 클래스를 먼저 설계하게 된다. 



    애플리케이션 컨텍스트(Context) 또는 경계

    사람이라는 클래스를 설계한다고 했을때 사람 객체들을 관찰해서 사람 객체들이 가진 공통된 특성을 찾게 된다.

    시력, 몸무게, 혈액형, 키, 나이, 직업, 취미 등등 명사로 표현되는 특성을 속성이라하고 속성을 값을 가질 수 있다.
    먹다, 자다, 일하다, 운전하다, 울다 동사로 표현되는 특성을 기능/행위 라고 한다. 이러한 기능/행위는 수행 절차 또는 로직이라고 하는 것을 갖게 된다. 기능/행위를 개체지향에서는 메서드라고 한다.

    사람의 모든 특성을 나열하고 싶지만 그렇게 하면 너무 광범위 하게 만들어야 한다. 그래서 애플리케이션 경계가 필요한 것이다.
    내가 만들고자 하는 애플리케이션에 맞게 클래스를 정의하는 것이다. 

    만약 병원 애플리케이션을 만들고 있다면 사람은 환자를 의미하는 좀 더 구체적인 이름으로 바꿀 수 있을 것이고 은행 애플리케이션을 만들고 있다면 사람은 고객이라는 구체적인 이름으로 바꿀 수 있을 것이다. 결국 애플리케이션 경계에 따라 사람클래스의 설계가 달라져야 할 것이다. 

    추상화

    병원 애플리케이션이라고 생각하니 사람 클래스에서 필요 없는 특성들이 보이기 시작하고 역시 애플리케이션을 은행이라고 생각하니 필요 없는 특성들이 보이기 시작한다.
    다시 추상화의 일반적인 뜻을 보자
    추상화란 구체적인 것을 분해해서 관심 영역에 대한 특성만을 가지고 재조합하는 것
    추상화란 구체적인 것을 분해해서 관심 영역(애플리케이션 경계, Application Boundary)에 있는 특성만 가지고 재조합 하는 것 = 모델링

    모델은 실제 사물을 정확히 복제하는 게 아니라 목적에 맞게 관심 있는 특성만을 추출해서 표현하는 것이다. 바로 추상화를 통해 실제 사물을 단순하게 묘사하는 것이다. 

    • OOP의 추상화는 모델링이다
    • 클래스 : 객체 = 펭귄 : 뽀로로
    • 클래스 설계에서 추상화가 사용된다.
    • 클래스 설계를 위해서는 애플리케이션 경계부터 정해야 한다.
    • 객체 지향에서 추상화의 결과는 클래스다.

    자바는 객체 지향의 추상화를 바로 class 키워드를 통해 지원하고 있다.
        추상화 = 모델링 = 자바의 class 키워드



    김종민, 스프링 입문을 위한 자바 객체 지향의 원리와 이해, 위키북스(2015)


    댓글

    Designed by JB FACTORY