모듈화
코드를 작은 독립적인 모듈 또는 컴포넌트로 분해하는 프로세스를 의미한다.
모듈이란?
특정 기능이나 목적을 수행하는 코드의 논리적 단위입니다. 모듈은 일반적으로 관련된 함수, 클래스 또는 파일로 구성된다.
모듈의 특징
- 독립성: 각 모듈은 독립적으로 동작할 수 있어야 하며, 다른 모듈에 크게 의존하지 않고 자체적으로 기능을 수행할 수 있어야 한다.
- 인터페이스: 모듈은 외부와 상호작용하기 위한 인터페이스를 정의하는데, 이 인터페이스는 모듈 외부에서 모듈의 기능을 호출하거나 데이터에 접근하는 방법을 규정한다.
- 재사용성: 모듈화된 코드는 다른 프로젝트나 부분에서 재사용될 수 있어야 한다.
- 가독성: 모듈화된 코드는 논리적으로 구성되어 있어 코드를 읽고 이해하기 쉬워진다.
- 유지보수성: 모듈은 수정 또는 업데이트가 쉽도록 만들어져야 하며, 모듈을 수정할 때 다른 모듈에 영향을 미치지 않도록 설계해야 한다.
모듈화를 사용하는 이유
- 코드의 구조화: 작은 독립적인 모듈 또는 컴포넌트로 분할하여 코드의 구조를 조직화한다.
- 오류 범위 제한: 각 모듈이 독립적으로 동작하므로 특정 모듈에서 발생한 오류가 다른 모듈로 확산되지 않고 오류를 발견하기 쉽다.
- 협업: 모듈화는 다수의 개발자가 동시에 작업하고 협력할 수 있는 환경을 제공한다.
의존성 주입하다가 모듈화가 나온 이유는 모듈화랑 비슷한데 뭐가 다르지? 라는 의문이 들어서이다. 둘다 유지 보수나 재사용성이나 등등을 언급하며 비슷하게 보였다. 그럼 두 차이는 무엇일까?
가장 큰 차이는 관점의 차이라고 보여진다. 모듈화는 코드를 나눠서 분리하는 방법이고, 의존성 주입은 코드 간의 결합도를 낮추는 방법이다. 그래서 모듈화는 구조화, 가독성, 독립성이 중요하고 의존성 주입은 유연성과 확장성이 강조된다.
모듈화와 의존성 주입은 하나만 사용되지 않고 서로 다른 개념이라 같이 사용되는 경우가 많다.
모듈화
// usersRouter.js 모듈
const express = require('express');
const router = express.Router();
// 사용자 목록 라우트
router.get('/users', (req, res) => {
// 사용자 목록을 조회하는 로직
});
// 사용자 생성 라우트
router.post('/users', (req, res) => {
// 사용자 생성 로직
});
module.exports = router;
// app.js에서 모듈 사용
const usersRouter = require('./usersRouter');
app.use('/api', usersRouter);
의존성 주입
// database.js 모듈
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydb', { useNewUrlParser: true });
// usersService.js 모듈
class UsersService {
constructor(database) {
this.database = database;
}
getUsers() {
// 데이터베이스에서 사용자 목록을 조회하는 로직
}
createUser(user) {
// 데이터베이스에 사용자 생성 로직
}
}
module.exports = UsersService;
// app.js에서 의존성 주입
const mongoose = require('mongoose');
const UsersService = require('./usersService');
const database = mongoose.connection;
const usersService = new UsersService(database);
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
23.09.29 제어 역전 (Inversion of Control, IoC) (0) | 2023.10.02 |
---|---|
23.09.28 의존성 주입이 있을 때 없을 때 (0) | 2023.09.29 |
23.09.26 의존성 주입(Dependency Injection, DI) (0) | 2023.09.26 |
23.09.25 실행 컨텍스트(Execution Context)(다시 정리) (0) | 2023.09.26 |
23.09.24 미들웨어(Middleware) (0) | 2023.09.25 |