오늘은 객체지향의 사실과 오해 책의 3과에 대해서 리뷰할 예정이다!
타입과 추상화,, 추상화라는 개념이 Software Engineering에서도 나오고, Business Process Management에서도 나오는데 과연 객체 지향 프로그래밍 관점에서는 추상화를 어떻게 정의할지 궁금하다
바로 레쯔고~
목차
- 추상화
- 분류
- 타입
1. 추상화
책에서는 우선 가볍게 지하철 노선도로 추상화 개념을 아주 간략하게 틀만 잡아주었다
헤리 백의 지하철 노선도
= " 정화성 " 을 버리고 " 목적 " 에 집중하는 것
현실 = 복잡성의 총체 / 아주 복잡하다는 말,,괴물같다는 말,,
-> 인간이 이해못함 인간은 보잘 것 없엉 뇌의 요량이
-> 인간이 현실 단순화하는건 본능!
좀 더 자세하게 해리 백의 지하철 노선도를 이어서
어떻게 하면 추상화를 통해서 현실의 복잡성을 극복할 수 있는지 알아보자
헤리백 지하철 노선도
= 지형정보 제거, 역사이 연결성 강조
= 왜 이 추상화가 유용 ? 승객의 지하철 시야와 일치
= 역의 위치가 아니라 "역 사이의 연결관계" 가 중요했던 것
결론
1. 추상화 : 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
2. 추상화가 어떻게 복잡성을 다루나?
1) 구체적인 사물들간의 공통점은 get, 차이점은 버려 (일반화)
2) 불필요한 세부사항 제거 to 중요한 부분 강조
3. 그래서 객체지향에서 추상화가 가지는 의미는 ?
객체 자체가 추상화!
2. 분류
저번 day2때 내가 놓친 엘리스 어쩌구저쩌구 이야기
여기서도 나온다,,하
이 부분을 읽으면서 웃겼던 게 저자도 엘리스 공주 이야기가 아주 지긋지긋하다고 한다ㅋㅋㅋㅋㅋ
아무튼.
엘리스 이야기는 정원사, 병사, 신하 등 다양한 사람들이 나온다.
각각의 사람들마다 가지고 있는 무기들이 다르다
정원사? 페인트 통과 붓
병사? 클로버
신하? 치링치링 보석 치장
각 인물들에게는 서로를 구별할 수 있다는 독특한 특징이 있다는 것이 중요하다
이렇게 명확한 경계를 가지고 서로 구별할 수 있는 구체적인 사람이나 사물을 객체 지향 패러다임에서는 객체라고 한다.
위에서 언급한 것 처럼
저자 정원사, 병사, 신하, 뭐 왕자 공주 뭐 다 트럼프라고 부르고 싶다고 한다..~
그렇다면, 여기서 이들을 모두 합쳐 트럼프라고 부를 수 있는 이유가 뭘까?
이유는 차이점이 있기는 하지만, 이를 모두 무시하면 가능하다고 한다...
여기서 다시 동화로 돌아오면
엘리스 : 기껏해야 트럼프에 불과해!
라는 말이 트럼프인 그룹1, 트럼프가 아닌 그룹2 이렇게 엘리스의 머리 속에는 2개의 그룹이 있다는 것을 알 수 있다.
이렇게 그룹으로 나누는 것의 이 점은
정원 안에 있는 다양한 사람들의 차별점을 무시함으로서,
정원에 내재된 복잡성을 효과적으로 감소시킬 수 있다!!
이렇게 정원에 있다는 공통점처럼 객체들이 모두 가지고 있는 공통점,
객체들을 묶기 위한 그릇 = 개념
개념을 이용해서 객체를 여러그룹으로 묶는 행위 = 분류
이다
결론 :
1. 분류 : 객체에 특정한 개념을 적용하는 작업으로 객체에 특정한 개념을 적용하기로 결심했을 때 우리는 그 객체를 특정한 집합의 멤버로 분류하고 있는 것이다
2. 분류가 객체 지향에서 중요한 이유?
1) 어떤 객체를 어떤 개념으로 분류할지가 객체지향의 품질을 결정함.
2) 분류를 잘하면 어플의 유지보수가 용이하고 변경에 유연하게 대처가 가능함
3) 뷴류는 추상화를 위한 도구임. 분류를 한다는게, 추상화의 두 가지 차원 (공통점 취하고, 차이점 버리고) 을 모두 사용한다는 것임
3) 객체지향에서 제일 많이 하는 말이 뭔데. class자나..
근데 분류 = 'class'ification임ㅋ 중허지~
3. 타입
우선 '타입 = 개념'이다
타입도 공통점을 기반을 객체들을 묶기 위한 틀이다.
데이터 타입
사실 실제 메모리 안에서는 타입이라는 질서가 존재는 안함
그러다가 옛날에 어른들이 메모리 내부의 값을 다루다가
수많은 시행착오를 부딪힘
혼란의 혼란을 낳고 어플이 죽어버리는거임,,
그래서 사람들이 혼돈이 아주 지겨워서 메모리안에 데이터에 특정한 의미를 부여하기 시작함
숫자면 숫자형으로, 문자면 문자열형으로, 참거짓나오면 논리형으로
이 안에 타입에 관한 2가지 중요한 사실이 숨겨져있음ㅎ
1. 타입 = 데이터가 어떻게 사용되는가
여기서 어떻게는, 더하거나 빼는거와 같은 연산이냐 혹은 글자 연결이냐와 같은 걸 의미한다
* 데이터가 어떤 타입에 속하는 지를 결정하는 것
= 데이터에 적용할 수 있는 작업
2. 특정 타입에 속한 데이터의 메모리 안에서 처리방식은, 철저히 감춰진다
그치 메모리 내부에 숫자가 어떤 방식으로 저장되는 지 몰라도
숫자형 데이터 잘만 코딩할 수 있음
그렇다면 데이터 타입과 객체지향이 무슨 의미가 있는가?
객지프할때 객체를 사실 데이터 처럼 써왔던 것임,,
객체를 타입에 따라 분류하고, 그 타입에 이름을 붙이는 것
= 프로그램에서 사용할 데이터 타입 선언
근데 또 중요한게
객체 = 데이터? 아 이건 아님
객체에서 제일 중요한 건, 객체의 행동임
객체의 상태 = 객체의 행동으로 초래된 부수 효과를 표현하기 위한 추상적인 개념일 뿐,
day2에서 말한 것처럼 객체는 이웃하는 객체와 협력하기 위해서 어떤 행동을 할 지가 가장 중요함
어떤 객체와 다른 객체를 동일한 타입으로 분류하는 기준
= 어떤 객체와 다른 객체가 동일한 행동을 하기만 하면 된다
Q. 동일한 데이터, 다른 행동?
서로 다른 객체!
핵심은 객체를 결정하는 것은 행동, 데이터는 행동을 따를 뿐!
뒤에 일반화/ 특수화의 관계, 슈퍼타입과 서브타입, 정적 모델과 동적 모델 등
다양한 이야기 나오지만...
궁금한 사람들은 구글링을 통해 자세하게 알아보기를 추천한다..ㅎㅎ..!
끝~!
'IT > [ GDSC ] 객체지향의 사실과 오해' 카테고리의 다른 글
[ 객체지향의 사실과 오해 ] ch7. 함께 모으기 (0) | 2024.01.19 |
---|---|
[ 객체지향 사실과 오해 스터디 ] Day5_ 책임과 메시지 (0) | 2024.01.07 |
[ 객체지향 사실과 오해 스터디 ] Day2_이상한 나라의 객체 (0) | 2023.11.05 |