"객체 지향의 추상화는 곧 모델링이다"라는 뜻은 무엇일까?
추상의 사전적 의미는 다음과 같다.
여기서 주목해야 할 부분은 공통 특성 / 공통 속성 추출
이다.
객체와 클래스를 다음과 같이 정의해 볼 수 있다.
세상에 존재하는 유일무이한 객체를 특성(속성 + 기능)에 따라 분류해 보니 객체를 통칭할 수 있는 집합적 개념, 즉 클래스(분류)가 나오게 된다.
사람 홍길동 = new 사람();
위 정의를 가지고 코드를 설명해보면 사람이라는 클래스(분류)를 이용해 유일무이하고 새로운 하나의 사람(객체)을 만들어 홍길동(객체 참조 변수)이라는 이름을 지어준 것이다.
또한 클래스를 이용해 object를 만들었다는 것을 강조할 때는 object라는 표현보다는 클래스의 인스턴스라는 표현을 쓴다.
사람 클래스를 설계한다고 해보자. 사람 클래스를 만들기 위해 주변에서 보이는 실체들, 즉 사람 객체들을 관찰해서 사람 객체들이 가진 공통된 특성을 찾게 된다.
시력, 몸무게, 혈액형, 키, 나이, 직업, 취미 등등 명사로 표현되는 특성을 속성
이라고 한다.
먹다, 자다, 일하다, 운전하다, 울다 등등 동사로 표현되는 특성을 기능/행위
라고 한다. 이러한 기능/행위는 수행 절차 또는 로직이라고 하는 것을 갖게 된다. 기능/행위를 객체 지향에서는 메서드라고 한다.
그러나 사람 클래스를 설계할 때 사람 클래스가 사람 객체들의 모든 특성들을 나열할 수 없다. 이때 등장하는 개념이 바로 애플리케이션 경계
이다. 때로는 애플리케이션 경계를 컨텍스트(Context)
라고 부르기도 한다.
애플리케이션 경계를 알기 위해서는 단순한 질문을 하나 던져보면 된다.
"내가 창조하려는 세상은 어떤 세상인가?"
이를 프로그래밍적으로 질문을 바꾸면 다음과 같이 바꿀 수 있다.
"내가 만들고자 하는 애플리케이션은 어디에서 사용될 것인가?"
이는 병원 애플리케이션인지 은행 애플리케이션인지에 따라 달라질 것이다. 이에 따라 사람클래스에서 각 애플리케이션에 따라 필요한 특성과 필요 없는 특성으로 나뉠 수 있다.
여기서 추상화의 일반적인 뜻을 다시 살펴보면 다음과 같다.
추상화란 구체적인 것을 분해해서 관심 영역에 대한 특성만을 가지고 재조립하는 것
위의 정의를 IT 용어를 이용해 바꿔보면 다음과 같다.
추상화란 구체적인 것을 분해해서 관심 영역(애플리케이션 경계, Application Boundary)에 있는 특성만 가지고 재조합하는것 = 모델링
그렇다면 자바는 객체 지향의 추상화를 어떻게 지원하고 있을까? 바로 class 키워드
를 통해 지원하고 있다.
자바에서는 클래스와 객체의 관계를 다음과 같이 표현한다.
클래스 객체_참조_변수 = new 클래스();
참고