소프트웨어 엔트로피란?
위키 백과에서 팩토리 메서드 패턴을 검색하다 '프로그램 엔트로피'라는 용어를 발견했다.
문맥상 "복잡도" 정도로 해석할 수 있었으나 (실제로도 맞고..), 전문용어인듯 싶어 정의를 찾아봤다.
프로그램 엔트로피의 범용적인 전문 용어는 'Software Entropy'였는데, 위키피디아에 한글이 없어서 두세줄짜리 읽는데 한참걸렸다.. 여하튼..
그러면 소프트웨어 엔트로피의 정의는 무엇인가?
1992년에 이바 제이컵슨(Ivar Jacobson) 의 Object-Oriented Software Engineering 에 등장한 용어라고 한다.
과학용어인 엔트로피를 사용해 프로그램의 복잡도를 설명하는 용어이다.
과학에서 엔트로피의 정의는 다음과 같다.
엔트로피가 일정하다는 것은 어떤 closed environment(=변화가 없는 닫힌 환경)에서의 disorder(=무질서)는 절대로 줄어들 수 없다는 뜻이다. 오로지 유지가 되거나 증가할 수 밖에 없다고 한다.
소프트웨어에서도 유사한 개념을 적용할 수 있다.
소프트웨어 시스템에 수정을 가할 수록 (일부로 줄이기 위한 수정을 하지 않는이상) 무질서가 줄어들수없고 오로지 증가할 수밖에없다는 의미이다.
이때의 무질서를 소프트웨어 엔트로피라고 한다.
아래의 그림처럼 v.0.5 에서는 깔끔한 코드였지만 v.4.0 에서는 뭐가 뭔지 모르겠는 복잡한 시스템이 될수밖에없는 우리의 코드를 보면 쉽게 이해가 가능하다..
처음에 예상했던대로 '소프트웨어 엔트로피'를 단순하게 '복잡도'정도로 해석할 수는 있지만
'복잡도'라는 의미 외에도 '자연히 줄지 않는 무질서'라는 의미도 포함하고 있다고 할 수 있을 것이다.
즉, 소프트웨어 엔트로피란:
소프트웨어 시스템의 복잡도 및 무질서의 정도로, 이것은 소프트웨어에 수정을 가할 수록 (특별히 줄이기 위한 노력을 하지 않는 이상) 증가될 수밖에없다.
따라서 코드에 수정을 할 때 복잡도를 최대한 적게 증가시키는 방식으로 수정을 해야하며 코드를 항상 단순화 시키고 읽기 쉽게 리팩토링 등의 노력을 끊임 없이 해야한다는 점을 강조하는 용어이다.