코드 재활용과 생산라인 증설 - 結
이철우
모듈化로 코드 재사용 提高
마이크로소프트社에서 정의한 '모듈[참고 1]'은 다음과 같다.
‘모듈은 하나 이상의 클래스와 인터페이스로 구성된 type.dll 또는 application.exe와 같은 이식 가능한 실행 파일입니다.’
DotNet에서 일반적으로 하나의 프로젝트는 하나의 dll 또는 exe를 만든다. 곧 한 프로젝트는 한 모듈을 결과물로 갖게 된다.
앞의 글, ‘起’, ‘承’, '轉’에서는 모든 파일이 한 프로젝트 안에 있었다. 현재로서는 코드 재활용의 궁극이라 할 수 있는 '이식’이 가능하게, '轉’의 ‘의존성 주입 이용하기’ 방법을 모듈化 하자.
클래스 라이브러리 프로젝트 'Abstract’를 만들고 파일 IRunnable.cs, IStoppable.cs, IFactoryByDI.cs, FactoryAbstractByDI.cs를 넣는다.
클래스 라이브러리 프로젝트 'RunModule’을 만들고 파일 RunnerTwoItems.cs, RunnerThreeItems.cs를 넣고 프로젝트 'Abstract’를 참조한다.
클래스 라이브러리 프로젝트 'StopModule’을 만들고 파일 Stopper.cs를 넣고 프로젝트 'Abstract’를 참조한다.
클래스 라이브러리 프로젝트 'FactoryModule’을 만들고 파일 FactoryA.cs, FactoryB.cs를 넣고 프로젝트 'Abstract’를 참조한다.
어셈블리가 달라지니 C# 예약어 'internal’은 모두 빼고, 적절한 이름공간을 참조하자.
마지막으로 콘솔 프로젝트 'ExeModule’을 만들고 파일 ProgramDI.cs를 넣자. 위의 네 개의 프로젝트를 참조한다. 실행하니 작동한다.
코드 재활용 방법의 비교
ㄱ. 코드 '한 파일에 모두’를 복사하고 증설라인에 맞게 코드를 고치기
2022년 쯤 S社에서 이 방법으로 프로젝트를 진행하는 것을 보았다. 더 늘어난 코드에 대한 유지/보수는 당시 담당자(회사 임원일 수도 있는)에게 중요한 일이 아닐 것이다. 당장 ‘돌아가기만’ 하면 되니까. 이는 지속적으로 회사 손익에 惡영향을 줄 것이다.
ㄴ. 생산라인에 이름 붙여 코드 재활용 하기
구조적 프로그래밍[참고 2] 언어를 사용하여 개발할 때 많이 쓰는 방법이다. 코드를 복사하지 않기에 '생산라인 이름’이 필요한 곳의 코드를 모두 바꿔야 하는 부담이 있다. 아직도 상당한 프로젝트가 이 형태로 진행되리라 짐작한다. 이 방법도 낮은 수준의 코드 재활용이다.
ㄷ. 객체지향의 '물려받기’를 이용한 코드 재활용
앞 글 '轉’에서 세 가지 방법을 소개했다. 먼저 두 방법은 ‘생산라인’ 단위로 모듈화 할 수 있고, 마지막 방법은 생산라인의 ‘기능’ 단위로 모듈화 가능하다. 과감하게 마지막 '의존성 주입’을 이용하여 코드를 재활용 한다면, 이는 지속적으로 회사 손익에 도움을 줄 것이다.
객체지향 언어[참고 3]가 나온 지도 상당한 시간이 지났다. 그러나 상당수의 프로그래머가 쓰는 프로그래밍 틀은 아직도 객체지향 전의 언어 수준에 머물고 있다. 이는 꼭 프로그래머 탓만은 아닐 것이다. 프로젝트 계획/발주, 개발人 모집, 검수 등의 체계가 제자리를 잡지 못해서 아닐까 생각해 본다.
퀴즈) 클래스 FactoryA, FactoryB를 하나로 만들 수 있을까?
[참고 1] 모듈의 정의
[참고 2] 구조적 프로그래밍
[참고 3] 객체지향의 역사