SOLID 프로그래밍(1부): 단일 책임 원칙

SOLID 원칙은 소프트웨어 엔지니어링에서 가장 가치 있는 원칙 중 하나입니다. 깨끗하고 확장 가능하며 확장하기 쉬운 코드를 작성할 수 있습니다. 이 일련의 게시물에서는 각 원칙이 무엇이며 적용하는 것이 왜 중요한지 설명합니다.

어떤 사람들은 SOLID가 OOP에만 적용 가능하다고 생각하지만 실제로는 대부분의 원칙이 모든 패러다임에서 사용될 수 있습니다.

SOLID의 'S'는 단일 책임을 의미합니다. 많은 초보 프로그래머의 실수는 많은 일을 하는 복잡한 함수와 클래스를 작성하는 것입니다. 그러나 단일 책임 원칙에 따라 모듈, 클래스 또는 함수는 한 가지 일만 수행해야 합니다. 즉, 책임은 하나만 있으면 됩니다. 이렇게 하면 코드가 더 강력해지고 디버깅, 읽기 및 재사용이 더 쉬워집니다.

단어와 파일 경로를 매개변수로 받아 전체 단어 수에 대한 텍스트의 단어 발생 수의 비율을 반환하는 이 함수를 살펴보겠습니다.

def percentage_of_word(search, file):
    search = search.lower()
    content = open(file, "r").read()
    words = content.split()
    number_of_words = len(words)
    occurrences = 0
    for word in words:
        if word.lower() == search:
            occurrences += 1
    return occurrences/number_of_words


이 코드는 하나의 함수에서 많은 작업을 수행합니다. 파일을 읽고 총 단어 수, 단어 발생 수를 계산한 다음 비율을 반환합니다.

단일 책임 원칙을 따르려면 다음 코드로 대체할 수 있습니다.

def read_localfile(file):
    '''Read file'''

    return open(file, "r").read()


def number_of_words(content):
    '''Count number of words in a file'''

    return len(content.split())


def count_word_occurrences(word, content):
    '''Count number of word occurrences in a file'''

    counter = 0
    for e in content.split():
        if word.lower() == e.lower():
            counter += 1
    return counter


def percentage_of_word(word, content):
    '''Calculate ratio of number of word occurrences to number of all words in a text'''

    total_words = number_of_words(content)
    word_occurrences = count_word_occurrences(word, content)
    return word_occurrences/total_words


def percentage_of_word_in_localfile(word, file):
    '''Calculate ratio of number of word occurrences to number
       of all words in a text file'''

    content = read_localfile(file)
    return percentage_of_word(word, content)


이제 각 기능은 한 가지만 수행합니다. 첫 번째는 파일을 읽습니다. 두 번째는 총 단어 수를 계산합니다. 텍스트에서 단어의 발생 횟수를 계산하는 함수가 있습니다. 또 다른 함수는 총 단어 수에 대한 단어 발생의 비율을 계산합니다. 그리고 이 비율을 얻기 위해 텍스트 대신 파일 경로를 매개변수로 전달하는 것을 선호하는 경우 이를 위한 함수가 있습니다.

그래서 우리는 이런 식으로 코드를 재구성하여 무엇을 얻고 있습니까?
  • 함수는 쉽게 재사용할 수 있고 작업에 따라 혼합할 수 있으므로 코드를 쉽게 확장할 수 있습니다. 예를 들어 로컬 파일 대신 AWS S3 버킷에 포함된 텍스트에서 단어의 빈도를 계산하려는 경우 새 함수read_s3를 작성하기만 하면 나머지 코드는 없이도 작동합니다. 가감.
  • 코드는 DRY입니다. 코드가 반복되지 않으므로 함수 중 하나를 수정해야 하는 경우 한 곳에서만 수정하면 됩니다.
  • 코드가 깨끗하고 체계적이며 읽고 이해하기 매우 쉽습니다.
  • 각 기능에 대한 테스트를 개별적으로 작성할 수 있으므로 코드를 디버그하기가 더 쉽습니다. 이러한 기능에 대한 테스트를 확인할 수 있습니다here.

  • GitHub의 코드



    이 문서의 코드 및 테스트는 GitHub에서 사용할 수 있습니다.
    https://github.com/AnnaLara/SOLID_blogposts

    좋은 웹페이지 즐겨찾기