객체 지향의 추상화는 곧 모델링이다
유일무이한 객체의 특성( 속성 +기능 )에 따라 분류해 보니 객체를 통칭할 수 있는 집합적 개념인 클래스( 분류 )가 나오는 것
Ex) 클래스 : 객체 = 사람 : 마이클 = 사람 : 존슨
사람 마이클 = new 사람();
사람 존슨 = new 사람();
객체를 흔히 object 라고 표현하지만 클래스를 이용해 만들었다는 것을 강조할 때는 instance 라는 표현을 쓴다 ( object 라는 단어의 의미를 보았을 때 instance 가 더 좋은 것 같다 )
이번에는 추상화의 일반적인 뜻을 봐보자
추상화란 구체적인 것을 분해해서 관심 영역에 대한 특성만을 가지고
재조합하는 것
이제 내가 필요한 영역에 대입을 해보겠다
추상화란 구체적인 것을 분해해서 관심 영역(애플리케이션, Application Boundary)에 있는 특성만 가지고
재조합하는것 = 모델링
위와 같은 쥐 클래스를 만든 후
드라이버 클래스를 통해 객체를 구현하는 과정을 살펴보자
정리가 조금 필요할 것 같다
우선 Mouse 라는 타입을 지정해준 것은 Mouse 의 구조를 가진 객체(instance)만을 가리키는 참조 변수라는 의미라고 보면 되겠다 (참조 변수(reference variable)에 더 자세한 개념을 알고싶으면 C언어의 포인터,노드에 관해 찾아보자)
아래의 사진을 봐보자
Mouse 라는 클래스를 만들고 그에 따라 instance가 3개 Heap 영역에 생성된 것을 볼 수 있다 countOfTail 이란 변수는 꼬리의 개수를 의미하는데 이 지구상의 쥐 중에 꼬리가 1개가 아닌 쥐를 본 적은 없을 것이다. 그렇지만 꼬리가 1개라는 사실을 변수로서 할당 받고 있어야한다면 어떻게 하면 될까..
위와 같이 코드를 짜면
이러한 형태가 나오는데 핵심은 heap 메모리에 객체별로 할당되었던 변수가 클래스 멤버로 옮겨진 것을 볼 수 있다.
UML 을 작성할 때 정적 변수는 밑줄을 친다는 것도 알아두면 좋다
사실 이 분야는 두말 할 것 없이 구글에 검색해보면 한 눈에 이해할 좋은 자료들이 많다
객체 지향에서 의미하는 상속성은 이것보다 더 설명을 잘 할 수 없다
하위 클래스 is a kind of 상위 클래스
Ex ) 사람은 마이클이다 X
마이클은 사람이다 O
자바나 C# 은 다중 상속(extends)이 불가능하다
이는 다이아몬드 문제를 찾아보면 이해가 편할 것이다
대신 interface 를 통해 구현했다
interface : 구현 클래스 is able to interface
Ex) 고래는 헤엄칠 수 있다
쉽게 정리했는데
실제로 자바에 대표적인 interface 들을 보면
이러한 구조를 가진 것을 알 수 있다.
정적변수는 밑줄 추가
상속(재사용, 확장)과 인터페이스(구현 강제)