본문 바로가기
카테고리 없음

TIL (2023/09/11) Monday

by 0to1ton 2023. 9. 11.

 

의존성 주입(Dependency Injection, DI)은 소프트웨어 공학 및 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 이것은 코드를 더 모듈화하고 유지 관리하기 쉽게 만들며, 테스트 가능한 코드를 작성하는 데 도움이 됩니다. 의존성 주입은 주로 의존성을 외부에서 주입하여 객체 간의 결합을 낮추는 데 사용됩니다.

간단히 말하면, 의존성 주입은 객체가 필요로 하는 다른 객체(의존성)를 직접 생성하지 않고 외부에서 주입받는 방법입니다. 이로써 코드 내에서 객체 간의 결합이 낮아지고 재사용성과 유지 관리성이 향상됩니다.

예를 들어보겠습니다. TypeScript를 사용하여 Node.js 애플리케이션에서 의존성 주입을 적용한 간단한 예제를 살펴보겠습니다.

typescriptCopy code

 

// UserService.ts - 사용자 서비스 클래스

class UserService {
  private userRepository: UserRepository;

  constructor(userRepository: UserRepository) {
    this.userRepository = userRepository;
  }

  getUserById(userId: string) {
    return this.userRepository.findById(userId);
  }
}

// UserRepository.ts - 사용자 저장소 인터페이스

interface UserRepository {
  findById(userId: string): Promise<User | null>;
}

// UserRepositoryImpl.ts - 사용자 저장소 구현

class UserRepositoryImpl implements UserRepository {
  async findById(userId: string): Promise<User | null> {
    // 데이터베이스에서 사용자 정보를 조회하는 로직
    // 예를 들어, MongoDB 또는 PostgreSQL을 사용한다고 가정
    const user = await db.collection('users').findOne({ _id: userId });
    return user;
  }
}

// main.ts - 주요 애플리케이션 로직

const userRepository = new UserRepositoryImpl();
const userService = new UserService(userRepository);

const userId = '12345';
userService.getUserById(userId)
  .then((user) => {
    if (user) {
      console.log('사용자 정보:', user);
    } else {
      console.log('사용자를 찾을 수 없습니다.');
    }
  })
  .catch((error) => {
    console.error('오류 발생:', error);
  });
ror); });

위의 코드에서 UserService 클래스는 UserRepository 인터페이스를 의존합니다. 그러나 UserService 클래스는 UserRepository의 구체적인 구현을 알지 못합니다. 대신, UserService의 생성자에서 UserRepository의 구현을 주입받습니다. 이것은 의존성 주입의 한 예입니다.

이러한 구조를 통해 UserService 클래스는 어떤 종류의 UserRepository 구현이 사용되는지 알 필요가 없으며, 이것은 코드를 더 유연하게 만들고 유지 관리를 쉽게 합니다. 나중에 다른 종류의 UserRepository 구현으로 교체하거나 테스트 목적으로 가짜 UserRepository를 주입할 수 있습니다.

의존성 주입은 특히 대규모 애플리케이션의 복잡성을 관리하고 테스트 가능한 코드를 작성하는 데 도움이 되는 중요한 원칙 중 하나입니다.

 

RegExp.prototype.test() - JavaScript | MDN

test() 메서드는 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환합니다.

developer.mozilla.org

 

 

230905(화) Prisma Migration

level 2과제를 하면서 prisma를 사용할 때, migration으로 변경된 데이터를 저장해야 좋다는 내용을 들었다. Prisma Migration이 뭔지 간단하게 정리하고 가기 👉 prisma 공식 doc 바로가기 마이그레이션은 손

velog.io