Community

소프트웨어 디자인은 인간적인 측면에서 진행돼야 한다💡

객체 개발에서 중요한 것은 Feature Domain의 크기를 작게 유지하는 것입니다. 소트웍스 앤솔러지에서는 객체 지향 프로그래밍을 잘하기 위한 9가지 원칙, 객체 지향 생활 체조 원칙을 제시하는데, 그 중 “모든 엔티티를 작게 유지한다.”, “3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.”라는 원칙이 Feature Domain의 크기를 반강제적으로 작게 유지해 주기도 합니다. 그러나 모든 상황에 이런 원칙을 적용할 수 있을까 생각해본다면 쉽지 않습니다. “소프트웨어 설계의 인간적인 측면은 이해를 돕기 위해 잘게 자르고 덩어리를 만드는 것입니다. 소프트웨어를 변경하려면 소프트웨어를 이해해야 합니다. 소프트웨어를 이해하려면 청크 단위로 이해해야 합니다. 청크를 만드는 것이 바로 소프트웨어 설계의 방법입니다.” _ 켄트 벡 소프트웨어 설계의 인간적인 측면은 생활 원칙과 다릅니다. 이게 왜 인간적인 측면이지? 의문이 들겠지만 우선 두 가지 측면을 보자면, 1️⃣ 앱 구조를 자른다 2️⃣ 작은 구조 덩어리를 만든다 이 두 가지를 통해 소프트웨어를 변경하고, 잘린 작은 구조 덩어리(청크) 단위로 개발자가 이해하고, 청크를 만드는 것이 소프트웨어의 설계 방법이라고 말합니다. 인간적인 측면의 의미를 100% 이해할 수 없지만 큰 의미는 팀 협업을 위한 원칙이라고 볼 수 있고, 우리의 머릿속이 일반적으로 이해할 수 있는 객체의 역할과 책임에서 생겨나는 상태와 동작이 될 수 있습니다. 어떤 기능을 개발하거나 구조를 변경해야 할 때 먼저 앱 구조를 잘라야 합니다. 네트워크, 데이터베이스, 도메인을 자를 수 있습니다. 이렇게 자른 후에 도메인을 청크로 분리합니다. 청크는 함수, 클래스로 구성된 모듈의 분리입니다. 때로는 함수가 분리되기도 하고 상태와 행동이 또 다른 객체로 분리되기도 합니다. 켄트 벡은 소프트웨어 설계의 목표는 인간의 머릿속에 맞는 덩어리 또는 조각을 만드는 것이라고 말합니다. 인간의 머릿속에 맞게 만든다는 것은 객체 지향 생활 체조처럼 3개 이상의 인스턴스 변수를 가진 클래스를 만들지 않는다는 의미보다는 개발팀의 의사결정을 거쳐 만들어내는 Feature Domain이 될 것입니다. 마냥 원자(?) 단위로 청크를 잘게 만드는 것은 아니라는 의미가 됩니다. 적절하게 나눠야 하고 인간관계에 입각한 것이기 때문에 팀원 간 의사결정이 필수라고 할 수 있습니다.

알림

알림이 없습니다