[javascript] MobX와 클린 코드

MobX는 JavaScript 애플리케이션에서 상태 관리를 위한 강력한 라이브러리입니다. 이 라이브러리는 React, Angular, Vue 등과 함께 사용되며, 상태 변화를 쉽게 추적하고 UI를 업데이트하는 것을 도와줍니다.

하지만, MobX를 사용하여 코드를 작성할 때 클린 코드에 주의해야 합니다. 클린 코드란 가독성이 좋고 유지보수가 용이한 코드를 의미합니다. 이를 위해 다음의 가이드라인을 따르면 좋습니다.

1. 명확한 목적과 역할 분리

클린 코드 작성에 가장 중요한 부분은 코드의 목적과 역할을 분리하는 것입니다. 기능과 역할 별로 각각 독립적인 모듈을 구성하고, 의존성을 관리하여 코드를 이해하기 쉽게 만들어야 합니다.

// 목적: 상태 관리
class Store {
  @observable data = [];

  @action
  fetchData() {
    // 데이터를 가져오는 비동기 작업
  }

  @computed
  get processedData() {
    // 데이터 가공 로직
  }
}

// 목적: 뷰 렌더링
class Component {
  @observable state = {};

  @action
  updateState() {
    // 상태 업데이트 로직
  }

  render() {
    // UI 렌더링 로직
  }
}

위의 예시는 StoreComponent라는 두 가지 목적을 가진 클래스를 보여줍니다. Store는 애플리케이션의 상태 관리를 담당하고, Component는 해당 상태를 사용하여 UI를 렌더링합니다. 각 클래스는 자체적인 역할을 수행하며, 코드의 목적이 명확히 드러나도록 작성되었습니다.

2. 의존성 주입

의존성 주입은 MobX 애플리케이션에서 클린 코드를 작성하는 데 매우 유용합니다. 의존성 주입을 통해 각 모듈 간의 의존성을 명확히 정의하고 분리할 수 있습니다.

// 의존성 주입
class Component {
  constructor(store) {
    this.store = store;
  }

  // ...
}

위의 예시에서 Component 클래스는 Store 클래스의 인스턴스를 의존성으로 주입받습니다. 이렇게 의존성을 주입함으로써 각 모듈은 독립적으로 테스트하고 재사용할 수 있습니다.

3. 함수와 메서드의 단일 책임

클린 코드를 작성할 때 함수와 메서드는 단일 책임 원칙을 따라야 합니다. 하나의 함수 또는 메서드는 하나의 기능만을 수행하도록 작성해야 합니다.

// 단일 책임 함수 작성
function calculateSum(numbers) {
  // 합계 계산 로직
}

function validateInput(input) {
  // 입력값 유효성 검사 로직
}

function displayError(message) {
  // 에러 메시지를 화면에 표시하는 로직
}

// 단일 책임 메서드 작성
class Store {
  @action
  updateState() {
    // 상태 업데이트 로직
  }

  @action
  fetchData() {
    // 데이터를 가져오는 비동기 작업
  }
}

위의 예시에서 calculateSum, validateInput, displayError는 각각 하나의 목적을 가진 함수를 보여줍니다. 마찬가지로, updateStatefetchData 메서드도 각각 하나의 역할만 수행하도록 구현되었습니다.

MobX 라이브러리를 사용하여 애플리케이션을 개발할 때 클린 코드를 유지하면 코드의 가독성과 유지보수성이 향상될 것입니다. 목적과 역할을 분리하고, 의존성을 관리하며, 단일 책임을 지닌 함수와 메서드를 작성하는 것을 권장합니다.

참고 자료