Object oriented design이라는 건.
Computer Language에서 요즘 유행하는 건데. (대두된지는 20~30년 됐고, 유행한지는 10년정도 된.)
어떤 물건(Object)이 중심이 되어 자신이 해야할 일을 알고 있는 것이다.(method, member function 등..)
또한 자신의 상태(condition, state, member variable)도 기억하고 있다.
이러한 design이 programming 외에 다른 부분에서도 적용될 수 있지 않을 까?
예를 들자면 사람들은 요리를 할 때 요리책을 보는 데.
요리책의 내용은 절차적(Procedural)이다.
첫번째 무슨일을 하고 다음에 무슨일을 하고 이런 식이라는 건데.
패러다임을 다르게 해서 다른 관점에서 바라보게 만든 거다.
예를 들자면 깎는 도구(Object)에 감자를 input으로 넣고 네 할일을 하렴(do your job)하면
알아서 감자를 깍는 다던지 말이다.
종전의 개념으로 보자면 "감자를 칼로 깎는 다."라고 했을 텐데 말이다.
음. 이건 그리 와닿지 않는 것 같고..
이 새로운 개념(object oriented)가 이미 적용된 곳을 보자면
컵라면이 있을 수 있다.
컵라면에서 컵은 사실 라면이라는 것의 필수요소는 아니다.
하지만 라면을 먹기 위해 필요한 물건인데. 그래서 라면에 붙어있는 거라고 할 수 있다.
이런 식으로 분말스프와 건더기 스프도 딱 필요한 양만큼 들어있다.
즉. 우리는 컵라면이라는 객체에게 "do your job"이라고 명령을 내리면
자신의 capacity에 맞게 뜨거운 물을 정수기에 요청한 후 물을 넣고 3분을 기다린 후,
우리에게 라면이 다 되었음을 알릴 수 있다.
요즘 나오는 청소기도 그렇다. 예전처럼 빗자루를 사서 직접 쓸고 벽에 새워두는 게 아니라.
단지 청소기에게 "do your job"이라고 하면 알아서 청소를 하고 에너지가 부족하면 충전도 하고
알아서 다 한다.
아무튼 이런 object oriented의 장점이라고 하면 "do your job"이라고만 하면 알아서 할 일을 다 해준다는 데
있다. 또한 각자 도구(object)와 그것을 사용하는 방법(manual, member function)이 항상 함께 존재해서
물건을 다루기 편리해진다.
단점은 이미 programming 분야에서 많이 알려져 있듯이, procedual한 종전의 개념에 비해 performance 문제가
있을 수 있다. 예를 들자면 빗자루는 청소외에 자식들을 때릴 때도 쓸 수 있고 마지막에 태워서 난방도 가능한데.
청소기를 훨씬 그런 다양성이 줄어서 단지 청소하는 데만 쓸 수가 있다. 그리고 가격도 비싸고 전기도 많이 먹는
다. 그래서 이렇게 에너지를 더 많이 쓰게 되고 또한 응용성을 떨어뜨린다. "do your job"으로 정의한 일 외의 작
업에 사용하기 더 힘들어 진다.
-------------------------------------------------------
아무튼 이런 디자인을 많은 물건에 적용하면 편리한 점이 많다.
가전 제품들이 배가 고프면(전기 에너기가 바닥에 가까우면) 스스로 알아서 콘센트에 접속해서 충전을 한다든지.
밥통이 쌀이 떨어지면 알아서 밥을 하고 냉장고가 반찬이 떨어지면 반찬을 스스로 주문하고
옷이 자신이 구겨졌다고 생각하면 다림질을 요청하고, 더러워지면 세탁기에 뛰어들고
방이 모기의 출현 빈도를 추적해서 스스로 모기약을 구입해서 뿌리고, 공기가 탁하면 환기도 하고
이런 것들을 할 수 있다는 거다.
단순한 automation의 개념이라기 보다는 object oriented개념이라고 봐야한다.
automation concept에서는 procedural한 사고를 할 수도 있기 때문에 모든 object를 synconize하고 중앙에서
통제해야 한다고 생각해서 design이 너무 어려워질 수 있기 때문이다.
그래서 이런 automation에는 procedural 방식보다 object oriented가 낫다고 할 수 있다.
각각의 개체(object)가 스스로 움직이고 알아서 자신의 일을 하고 필요하면 다른 개체들과 interaction을 주고 받고 communication, negotiation하게 해야 한다.
예를 들자면 휴대폰이 배터리에 문제가 있어서 너무 많은 전기를 먹는 다면 전기 콘센트는 에너지 공급문제를 휴
대폰과 negotiation해서 휴대폰에게 혹시 문제가 잇는 것은 아닌지 조언할 수도 있고 휴대폰은 자신을 self test한
후 주인에게 어떤 문제가 있음을 report할 수 있다.
그리고 중앙에서 관리하지 않고 각각의 객체가 독립적으로 움직이기 때문에 확장성이나 호환성에서 좀 더 자유
로울 수가 있다. self test기능이 추가되거나, report기능이 바뀐다고 해도 전기 콘센트나 중앙 통제 시스템 전체
를 바꿀 필요가 없다. 단지 휴대폰만 새로 사면 된다.
댓글 없음:
댓글 쓰기