최근에 Jake Warton의 Retrofit 라이브러리 발표 영상을 보고 추상화에 대해서 곰곰히 생각해 보았습니다. 아래 동영상인데요. Jake Warton의 발표를 보면 header abstraction, response abstraction, Call encapsulation 등의 용어를 사용하여 Retrofit을 설명합니다. 이 부분이 저에게는 좀 충격으로 다가왔는데요. 내가 OOP 개념에 대해 대학교 때 공부한 이후에 고민해 본적이 있는가? 나는 코드 설계할때 뭘 고려하지? 나는 저런 용어를 사용하여 내 코드를 설명할 수 있는가? 등등의 생각이 들었드랬죠.




애플리케이션 개발자는 기획에서 내려온 요구사항은 기본적으로 만족시켜야 하고 차후 변경에도 유연하고 확장성 있는 코드를 설계하고 구현 해야합니다. 이 글에서는 유지 보수 용이하고 확장성 있는 코드를 설계하고 구현하기 위해선 뭐가 중요할까 고민해 보는데 그 핵심은 추상화로 보고 고민해 볼까 합니다.


추상화라는 것을 간단하게 말하면 복잡한 것을 간추려서 간단하게 하는 것인데요. 사실 추상화라는 개념은 인간의 사고 방식과 빼놓을 수 없을 것 같습니다. 어떤  유무형의 사물을 볼 때 내 기준에 비추어서 흥미있고 필요한 부분만을 보고 그것에 대해 머리속으로 간단히 기억합니다. 제 생각엔 이미 인간의 인식, 사고, 기억하는 단계에 이미 추상화를 하고 있는것으로 보입니다. 대부분의 사물의 복잡하고 자세한 내부는 외부에 감추어져 있고 사람이란 동물은 꼭 필요하지 않으면 시간 써가면 자세한 내부사항은 알 필요가 없죠. 


만약 자신의 고용주가 어떤 개발 프로젝트를 따와서 본인에게 던져줬다고 합시다. 음, 구체적인게 좋겠군요. 자동차 중고매매 사업장에서 각 딜러가 어떤 차를 누구에게 팔았고, 어떤 차가 재고로 있으며 어떤 차가 새로 들어왔는지등을 확인할 수 있는 애플리케이션 개발을 해야한다고 합시다. 그럼 이 애플리케이션 개발하기 앞서 설계를 하고 개발을 해야하겠는데요. 시스템의 전체적인 설계는 소프트웨어 아키텍쳐 패턴에서 적절한 패턴을 이미 선택했다고 가정하고 이 시스템을 구성하는 객체가 무엇이 있는지 각 관계는 무엇인지 파악하는 단계로 들어섰다고 합시다.


그래서 자동차(Car)를 설계해야 하는데, 요구사항이 무엇인지에 따라 차후 어떤 변경이 있을지에 따라 자동차의 추상화 수준을 결정해야 합니다. 자동차 추상화(Car abstraction)작업을 그럼 해볼까요?



Posted by 제이제이랩
,