JavaScript, TypeScript

[TypeScript] 도서관 관리 시스템 구현하기

holy-s 2025. 4. 24. 22:40

개요

최근 TypeScript를 공부하면서 SOLID 원칙을 실습해볼 수 있는 간단한 프로젝트를 만들어봤다. 도서관 관리 시스템을 구현하면서 각각의 SOLID 원칙이 어떻게 적용되는지 살펴보자.

SOLID 원칙이란?

객체 지향 프로그래밍의 5가지 기본 원칙을 나타내는 약자.

  • Single Responsibility Principle (단일 책임 원칙)
  • Open/Closed Principle (개방/폐쇄 원칙)
  • Liskov Substitution Principle (리스코프 치환 원칙)
  • Interface Segregation Principle (인터페이스 분리 원칙)
  • Dependency Inversion Principle (의존성 역전 원칙)

SOLID 원칙 적용 사례

단일 책임 원칙 (SRP)

// models/Book.ts
export class Book {
  constructor(
    public title: string,
    public author: string,
    public publishedDate: Date
  ) {}
}

Book 클래스는 도서 정보만을 관리. 도서 대여나 반납과 같은 기능은 Library 클래스에서 처리.

 

개방/폐쇄 원칙 (OCP)

// interfaces/RentManager.ts
export interface RentManager {
  getBooks(): Book[];
  addBook(user: User, book: Book): void;
  removeBook(user: User, book: Book): void;
  rentBook(user: Member, book: Book): void;
  returnBook(user: Member, book: Book): void;
}

RentManager 인터페이스를 통해 새로운 기능을 추가할 때 기존 코드를 수정하지 않고 확장 가능.

 

리스코프 치환 원칙 (LSP)

// models/User.ts
export abstract class User {
  constructor(public name: string, public age: number) {}
  abstract getRole(): Role;
}

// models/Member.ts
export class Member extends User {
  getRole(): Role {
    return Role.MEMBER;
  }
}

MemberLibrarian 클래스는 User 클래스를 상속받아 동일한 인터페이스를 제공.

 

인터페이스 분리 원칙 (ISP)

// interfaces/RentManager.ts
export interface RentManager {
  getBooks(): Book[];
  addBook(user: User, book: Book): void;
  removeBook(user: User, book: Book): void;
  rentBook(user: Member, book: Book): void;
  returnBook(user: Member, book: Book): void;
}

도서 관리와 관련 메서드만 포함된 인터페이스 제공.

 

의존성 역전 원칙 (DIP)

// services/Library.ts
export class Library implements RentManager {
  private books: Book[] = [];
  private rentedBooks: Map<string, Book> = new Map<string, Book>();
  // ...
}

Library 클래스는 구체적인 구현보다는 추상화된 RentManager 인터페이스에 의존.

주요 기능

  • 도서 목록 조회
  • 도서 추가 (사서 전용)
  • 도서 제거 (사서 전용)
  • 도서 대여 (회원 전용)
  • 도서 반납 (회원 전용)

결론

이 프로젝트를 통해 SOLID 원칙을 실제로 적용해보면서 다음과 같은 이점을 얻을 수 있었다.

  1. 코드의 재사용성 향상
  2. 유지보수 용이성 증가
  3. 확장성 개선
  4. 테스트 용이성 향상

TypeScript의 타입 시스템SOLID 원칙을 함께 사용하면 더욱 견고하고 유지보수하기 쉬운 코드를 작성할 수 있다.

 

 

 

 

 

 

 

 

GITHUB

https://github.com/HolySSA/typescript-library-toy

 

GitHub - HolySSA/typescript-library-toy

Contribute to HolySSA/typescript-library-toy development by creating an account on GitHub.

github.com

 

참고 자료
[SOLID 원칙 위키피디아] https://en.wikipedia.org/wiki/SOLID
[TypeScript 공식 문서] https://www.typescriptlang.org/docs/

 

SOLID - Wikipedia

From Wikipedia, the free encyclopedia Object-oriented programming design principles This article is about software programming principles. For the fundamental state of matter, see Solid. For other uses, see Solid (disambiguation). In software programming,

en.wikipedia.org

 

 

The starting point for learning TypeScript

Find TypeScript starter projects: from Angular to React or Node.js and CLIs.

www.typescriptlang.org