코드의 구조화

📍 구조화의 필요성 업무를 하다보면 언제나 프로젝트의 구조를 고민하게 된다. 특히 볼륨이 큰 프로덕트나 기능이 복잡할수록 코드는 복잡해 진다. 이 때, 코드를 작성한 개발자 뿐만 아니라 그 누가와도 코드를 훑어보며 이 영역의 코드는 이런 작동을 위한 코드겠구나, 저 부분은 저런 작동을 위한 코드겠구나 하고 빠르게 파악할 수 있어야 한다. 그렇지 않으면 유지보수를 하거나 인력 변동이 있을 때 마다 적지않은 비용이 발생하게 된다. 따라서 프로젝트를 시작할 때 또는 새로운 도메인 영역을 기존 프로덕트에 추가할 때 코드를 어떻게 구조화할 것인가 하는 고민을 해야 한다. 그래서 신규 프로젝트에 중도 투입되어 코드를 보는데 구조가 불분명하여, 어떻게 할 것인가 고민하며 "코드 구조화" 키워드로 구글링을 하던 중 괜찮은 글이 있어 정리해봤다. --- 💡 구조화와 계층화 계층화(Layering)란 추상화(Abstraction)를 통해 책임을 분리하고 의존성을 분리하는 작업이다. 계층화에선 상위 계층일수록 추상적인 역할을 부여받고 하위 계층으로 갈수록 좀 더 구체적인 일을 맡게된다. 상위 계층은 책임(Responsibility)을 정의하며, 하위 계층은 상위 계층이 명시한 일을 수행해야 하는 책임이 있다. 이러한 분리가 성능상의 이점은 줄어들지라도 관리적인 측면에서는 변경의 유동성을 제어할 수 있게 된다. 즉, 계층화를 통해 코드를 구조화 할 수 있다. (계층화된 구조를 보고 싶으면 Spring의 구조를 봐보자!) 💡 계층화의 원칙 계층화의 원칙은 “단순하지만 인접한 하위 계층에서 제공되는 것만 사용(Use)한다.” 이다. 만약 하위 계청에서 상위 계층으로 사용이 있거나, 인접한 하위 계층을 넘어 더 하위의 계층으로의 접근이 생기면 코드의 계층화가 깨지며 이해하기 어려운 코드가 된다. 단, 아래와 같이 예외적인 경우가 존재하지만, 이를 최대한 줄여주는 것이 유연한 시스템을 만드는데 유리하므로 예외를 줄이도록 해야 한다. ✓ 콜백(Callback) 함수 콜백 함수의 경우 상위 계층에서 하위 계층을 사용하더라도 원칙에 위배되지 않는다. 일반적인 경우 하위 계층은 상위 계층에서 전달 받은 요청을 처리할 책임을 가지지만, 콜백 함수의 경우 반대로 콜백 함수를 호출한 상위 계층이 그 책임을 갖기 때문이다. 콜백 함수가 수행되고나 결과에 대한 처리는 오로지 상위 계층에서 담당하고 하위 계층은 특정한 일이 발생했을 때 호출될 함수를 등록시켜주는 것으로 책임 범위가 한정된다. ✓ 공통 모듈, 컴포넌트 모든 계층에서 사용하는 공동 모듈이나 컴포넌트의 경우에도 단방향으로 사용되면 계층화 위반에 해당하지 않을 수 있다. 이런 경우에도 계층화를 명시적으로 표현하기 위해 화살표를 사용해 어떤 계층이 공동 모듈이나 컴포넌트를 호출하는지를 알려주어야 한다. 만약 쌍방향으로 이어진다면 계층간에 순환 구조가 생성되어 계층화 위반에 해당되게 된다.

좋은 개발자로 가는길 - 구조화된 코드

Medium

좋은 개발자로 가는길 - 구조화된 코드

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 1월 31일 오전 12:43

 • 

저장 4조회 373

댓글 0