객체지향 4대 특성 중에 추상화 대해 알아볼게요!
스프링 입문을 위한 자바 객체 지향의 원리와 이해- 김종민 지음 을 참고했습니다!
객체 지향의 4대 특성은 캡슐화, 상속, 추상화, 다형성 이 있어요. 캡! 상추다! 라고 외우면 잘 외워지니까 반드시 외우도록 해요. 우선 4대 특성 중에 추상화를 설명하기 전에 클래스와 객체의 관계 먼저 알아봐요.
클래스와 객체
일반적으로 자바 클래스를 설명할 때 붕어빵 틀과 붕어빵으로 비유를 많이 하곤 해요. 그런데...?
클래스 객체명 = new 클래스();
붕어빵틀 붕어빵 = new 붕어빵틀(); ???
새로운 붕어빵틀을 만들었더니 붕어빵이 되었다라...? 뭔가 어색함이 느껴지네요. 다른 예제를 더 봐보죠.
사람은 클래스인가? 객체인가?
JDragon 은 클래스인가? 객체인가?
객체지향을 공부한 사람이라면 답을 바로 낼 거에요. 클래스와 객체를 구분하는 간단한 방법은 변수에 대해 생각해보는 거에요.
사람의 나이는 몇 살인가?
JDragon 의 나이는 몇 살인가?
누가 사람의 나이가 몇이냐 물어보면 뭔 소리인가 싶을거에요. 그래서! 사람은 클래스 라는거에요. 나이를 바로 답할 수 있는 JDragon 은 객체가 되는거고요. 클래스는 분류에 대한 개념이지 실체가 아니고, 객체가 실체인거예요. 클래스와 객체의 관계를 알았으니 이제 추상화 대해 알아봅시다.
클래스 : 분류, 집합, 같은 속성과 기능을 가진 객체를 총칭하는 개념
객체 : 세상에 존재하는 유일무이한 사물
추상화 : 모델링
객체 지향의 추상화는 곧 모델링이다.
추상화란 구체적인 것을 분해해서 관심 있는 특성만 가지고 재조합 하는 거에요. 추상화의 개념이 위와 같기 때문에 추상화는 클래스, 객체와 밀접한 연관이 있어요.
사람이라는 클래스를 설계하려면! 사람 클래스를 만들기 위해 주위에 보이는 사람 객체들을 관찰해서 사람들이 가진 공통된 특성 을 찾아요.
시력, 몸무게, 혈액혁, 나이 등등... 명사로 표현되는 특성을 속성이라고 해요.
그리고 먹다, 자다, 일하다 와 같은 동사들은 기능,행위 라고 하죠. 기능, 행위를 객체 지향에서는 메서드라고 말하죠.
그리고 또 하나의 개념! 애플리케이션 경계가 있어요. 컨텍스트 라 부르는 경우도 있죠. 애플리케이션은 쉽게 말해서 내가 만들고자 하는 애플리케이션은 어디에서 사용될 것인가? 와 같은 개념이죠. 어디에서 쓰이느냐에 따라 경계를 나누는거에요. 병원에서는 환자라는 사람이 필요하고 은행에서는 고객이라는 사람이 필요하죠.
이제 종합해서 추상화에 대해 정의를 해봐요. 클래스 , 객체, 컨텍스트...
추상화란 구체적인 것을 분해해서 관심 영역(컨텍스트)에 있는 특성만 가지고 재조합 하는 모델링.
위에서 한가지 단어가 좀 거슬려요. 모델링? 모델링은 뭐지.
모델은 실제 사물을 복제하는 게 아니라 목적에 맞게 관심 있는 특성만을 추출해서 표현하는 거에요. 바로 모델은 추상화를 통해 실제 사물을 단순하게 묘사하는 것이지요.
이런 모델링(추상화)은 객체 지향에서 클래스를 설계할 때 필요한 기법이고 DB 테이블 설계할 때도 필요한 기법이에요. 이제 추상화는 모델링이다 라는 말이 이해가 가시나요? 추상화에서 기억해야 할 건 클래스와 객체에 대한 이해와 추상화는 모델링 작업이라는 것을 기억하는 것 같아요!