"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > SOLID: S - 단일 책임 원칙(SRP)

SOLID: S - 단일 책임 원칙(SRP)

2024-08-20에 게시됨
검색:404

SOLID: S - Single Responsibility Principle (SRP)

SRP 소개:
SRP(단일 책임 원칙)는 5가지 SOLID 원칙 중 하나이며, 보다 깨끗하고 지속 가능한 코드를 작성하기 위한 일련의 지침입니다. SRP에 따르면 클래스는 변경해야 할 이유가 하나만 있어야 합니다. 즉, 책임이나 기능이 하나만 있어야 한다는 뜻입니다. 이 원칙을 따르면 코드를 더 쉽게 이해하고, 유지 관리하고, 테스트할 수 있습니다.

SRP의 목표:

  • 간단한 유지 관리: 클래스가 단 하나의 책임만 가지면 버그를 식별하고 수정하는 것이 더 쉬워집니다.
  • 명확한 책임: 각 클래스에는 명확한 목적이 있어 코드를 더 쉽게 이해할 수 있습니다.
  • 향상된 테스트 가능성: 단일 책임이 있는 클래스를 분리하고 테스트하기가 더 쉽습니다.
  • 변경 용이성: 특정 책임의 변경은 시스템의 다른 부분에 영향을 주지 않습니다.

잘못된 관행 예(클래스):
여기에는 사용자를 관리하고 알림을 보내는 것 이상의 작업을 수행하는 UserService 클래스가 있습니다.

class UserService {
  createUser(user: User): void {
    // Logic to create user
  }

  deleteUser(userId: string): void {
    // Logic to delete user
  }

  notifyUser(userId: string, message: string): void {
    // Logic to notify user
  }
}

이 접근 방식에서 UserService 클래스에는 사용자 관리 및 알림 보내기 등 여러 가지 책임이 있습니다. 이는 SRP를 위반합니다.

모범 사례(수업):
SRP를 적용하기 위해 책임을 별개의 클래스로 분리할 수 있습니다.

class UserService {
  createUser(user: User): void {
    // Logic to create user
  }

  deleteUser(userId: string): void {
    // Logic to delete user
  }
}

class NotificationService {
  notifyUser(userId: string, message: string): void {
    // Logic to notify user
  }
}

이제 UserService는 사용자 생성 및 삭제만 처리하고,NotificationService는 알림을 처리합니다. 각 클래스에는 SRP에 따라 단일 책임이 있습니다.

잘못된 관행 예(함수):
여기에는 사용자를 생성하고 알림을 보내는 것 이상의 작업을 수행하는 함수가 있습니다.

function createUserAndNotify(user: User, message: string): void {
  // Logic to create user
  // Logic to send notification
}

이 접근 방식에서 createUserAndNotify 함수에는 사용자 생성 및 알림 보내기 등 여러 가지 책임이 있습니다. 이는 SRP를 위반합니다.

우수 사례(함수):
SRP를 적용하려면 책임을 별개의 기능으로 분리할 수 있습니다.

function createUser(user: User): void {
  // Logic to create user
}

function notifyUser(userId: string, message: string): void {
  // Logic to notify user
}

// Using the separated functions
createUser(newUser);
notifyUser(newUser.id, 'Welcome!');

이제 createUser 함수는 사용자 생성만 처리하고, informUser는 알림을 처리합니다. 각 기능에는 SRP에 따라 단일 책임이 있습니다.

TypeScript를 사용하는 React Native의 애플리케이션:
작업 관리 앱을 개발한다고 상상해 보세요. 작업 관리 로직과 알림 로직을 서로 다른 클래스로 분리하여 SRP를 적용할 수 있습니다.

잘못된 관행 예(클래스):

class TaskService {
  addTask(task: Task): void {
    // Logic to add task
  }

  removeTask(taskId: string): void {
    // Logic to remove task
  }

  notifyTaskDue(taskId: string): void {
    // Logic to notify that the task is due
  }
}

모범 사례(수업):

class TaskService {
  addTask(task: Task): void {
    // Logic to add task
  }

  removeTask(taskId: string): void {
    // Logic to remove task
  }
}

class TaskNotificationService {
  notifyTaskDue(taskId: string): void {
    // Logic to notify that the task is due
  }
}

잘못된 관행 예(함수):

function addTaskAndNotify(task: Task): void {
  // Logic to add task
  // Logic to notify that the task is due
}

우수 사례(함수):

function addTask(task: Task): void {
  // Logic to add task
}

function notifyTaskDue(taskId: string): void {
  // Logic to notify that the task is due
}

// Using the separated functions
addTask(newTask);
notifyTaskDue(newTask.id);

책임을 나누어 애플리케이션을 더 쉽게 유지 관리하고 확장할 수 있습니다.

결론:
단일 책임 원칙을 따르면 코드를 깔끔하고 체계적이며 유지 관리하기 쉽게 유지하는 데 도움이 됩니다. TypeScript를 사용한 React Native 개발에 SRP를 적용하면 더 모듈화되고 테스트 가능한 코드가 생성됩니다. 이 원칙의 모든 이점을 얻으려면 클래스와 함수를 단일 책임에 집중해야 한다는 점을 항상 기억하세요.

릴리스 선언문 이 기사는 https://dev.to/paulocappa/solid-day-1-single-responsibility-principle-srp-1f5k?1에서 재현됩니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3