카테고리 없음

패키지 설계 및 관리법

KayEsQuo 2021. 8. 30. 22:20

프로젝트를 진행 시 규모가 점점 커지게되면 코드 작동순서가 엉켜버려 힘든 상황을 겪고는 한다.

위기상황을 빠르게 인지하고 코드관리에 신경을 쓰게 되면 다행이지만, 제품 출시 시일이 빨리 다가오거나, "나중에 봐야지" 라는 생각을 할 경우, 결국 손을 쓰기가 힘든 상황을 마주하게 된다.

  이러한 위기상황을 예방하기 위해서는 첫째도 둘째도 셋째도 코드관리이고, 이런 코드 관리를 체계적으로 다루기 위해서는 우선 큰그림에서 보는 패키지 관리가 아닐까 생각한다. 따라서 이글에서는 패키지관리를 하는법을 경험과 주변지식을 통해 정리하고자한다.

 

1. 정책에 따른 패키지 설계

누구에게나 기발한 설계 원칙이 있지만, 폴더 설계만큼은 큰틀에서 세부적인 틀로 설계를 진행하는것이 유지보수 측면이나 재사용성면에서도 유용할듯하다. 우선 위 그림에 나와있는것을 예시로 들고, 설명을 하면 큰틀과 세부적인 틀을 구분할 수 있다. 여기서 큰틀은 도형이고, 세부적으로 가면갈수록 사각형->정사각형 등과 같이 설명할 수 있다.

 

2. 결합도를 통한 패키지 특성

그림 2-1. 의존적인 그림

우선 A폴더는 다른 폴더를 의존하고 있다. 이럴경우 의존하는 폴더(B,C,D)가 조금이라도 변하게 된다면, A폴더는 변화한것을 토대로 자신도 그에 맞춰 변화해야한다. 이럴경우 의존성때문에 의존을 하고있는 많은 패키지의 코드를 전부 손을 대야하는 상황을 마주칠 수 있다.

 

그림 2-2. 의존적이지 않은 그림

소프트웨어 설계 및 작성 시 안정적으로 진행하기 위해서는 변화량이 적고 효율적인 패키지가 되는 즉, 최적화단계가 되야한다. 안정적인 패키지를 만들기 위해서는 사전에 많은 상황이 약속되고, 공통적인 모듈로 작동이 되어야 한다. 그림에서 나온 A패키지를 의존하는 패키지는 많이 있다. 이런경우는 다양한 상황을 충족해야 가능한 일이고, 이때 A패키지는 어떤 영향에 있어서 바꿔야할 이유도 없어 안전하다.

 

3. DIP를 통해 효율적인 패키지 관리법

결합도를 통한 패키지의 특성을 보면 의존을 당하는 입장과 의존을 하는입장 차이가 뚜렷하다. 

의존적이지 않은, 다시말해 독립적인 모듈을 안전하다고 했지만, 프로젝트를 진행하다 보면 이 마저도 변경해야될 상황이 오기마련이다. 이럴경우 변동성이 심한 구체클래스를 효율적으로 다루기 위해서는 변동성을 최소화 시키는 설계기법중 하나인 인터페이스를 적극 활용하는것이다. 간단히 설명하면, 인터페이스는 고정적인 함수들을 호출되게 하여 안정성을 지킬수 있고, 구체클래스는 인터페이스를 통하기때문에 다른 패키지들에게 큰 영향을 주지 못한다.