객체의 세부적인 동작을 숨기는 것은 객체 지향에서 굉장히 중요한 정보 은닉의 개념입니다. 그렇다는 것은 동작을 변경할 때 객체 외부의 요소를 무시하면서 동작 세부 내용만 고려할 수 있다는 것입니다. 소프트웨어 개발뿐만 아니라 인간은 안전하게 무시할 수 있는 것이 있을 때와 무시할 수 있는 옵션이 있을 때 자신감이 생기고 일에 집중할 수 있다고 합니다. 이 원칙이 소프트웨어 디자인의 핵심이라고 생각합니다.
“경계는 사고의 기본 메커니즘 중 하나입니다. 이 경계 안에서는 경계 밖과 다르게 사물을 생각합니다
나는 내 피부 안의 물건을 피부 밖의 물건과 다르게 대합니다.
나는 가족네 사람들을 가족 밖의 사람들을 대할 때와 다르게 대한다.
나는 이 함수 안의 코드 줄을 이 함수 밖의 코드 줄과 다르게 취급한다.“
_ 켄트 벡
마지막 예시는 좀 과장된 표현이지만 이상적인 예시입니다. 함수를 변경할 때 함수 외부의 내용은 무시하고 함수 내부의 내용만 고려할 수 있기를 원합니다. 이렇게 구분할 수 있으면 전체 시스템의 모든 코드 줄을 동시에 고려해야 할 때는 생각할 수 없는 자유를 얻게 됩니다. 누군가는 드넓은 초원 어디든 뛰어다닐 수 있는 것을 자유라고 하지만, 울타리 밖의 변수를 고려하지 않고, 울타리 안에서 안전함을 느낄 수 있는 것이 진짜 자유라고 생각합니다. 전체 시스템이 아닌 작은 청크의 세부 동작만 고려할 수 있을 때 자유를 느낄 수 있을 거라 생각합니다.
하지만 개발자는 변경해야 할 구조만 고려하는 게 절대 쉽지 않다는 것을 알고 있습니다. 동작을 변경하려면 두 개 이상의 함수를 변경해야 할 때가 있습니다. 그래서 청킹은 프로그램을 구조화할 때 생각을 가능하게 하는 도구로 사용합니다. 하나의 동작이 변경되어 다른 동작에 영향에 받더라도 이 두 함수가 하나의 청크 즉, 하나의 모듈 안에 있는 동작들이라면 당연히 그럴 수 있다는 것입니다.
소프트웨어 설계자로서 우리는 우리가 원하는 변화에 대해 고려해야 할 것은 하나의 동작이 바뀔 때 다른 모든 동작이 영향을 받지 않는 것보다는 하나의 청크만 영향을 받는 설계가 중요할 수 있다는 것입니다.
그리고 그 구조적 변화를 동료들과 함께 의사결정을 하고 제품팀에 전달하면서 협업이 이뤄진다면 가장 좋을 것입니다.