mattduck 블로그에서 읽은 글에 대한 나의 생각 로그
Copied from https://www.mattduck.com/2021-04-a-philosophy-of-software-design
The idea of abstraction is closely related to modules. An abstraction is a simplified view of an entity which omits unimportant details, making it easier for us to think about and manipulate complex things.
모듈 외부에서 모듈을 보았을 때, 모듈이 단순하게 보이는 것이 좋다. 그 안에 들어간 세부 기능에 대해서 모두 모듈에 포함하거나 설명하는 것은 모듈을 복잡하게 보이도록 만들 것 이다.
모듈이 무엇을 포함하는지 어떤 기능을 하는지 추상적이고 단순하게 표현하는 것이 좋다.
The file I/O interface provided by Unix is a good example of a deep interface - the API only has a few system calls (open, read, write, seek, close), but hides a huge amount of complexity around implementation of files, directories, permissions, concurrent access, etc.
이것은 django
혹은 drf
(django rest framework)에서 모듈을 나눈 방식과 매우 유사하다.
API view와 관련된 모듈들은 views
, viewsets
에 보관하고, 권한에 대한 모듈들은 permissions
에 보관한다. 다른 기능들도 동일하다.
이러한 기술 방식은 마치 책의 목차를 만드는 것과 비슷하게 코드를 읽을 수 있도록 해준다.
라이브러리의 모든 기능들을 기술하지 않아도 어떤 기능들이 포함되어 있는지 사용자로 하여금 알 수 있게 해준다.