SW개발/IT 용어

[SoC]관심사 분리란?

관심사 분리란? (Separation of concerns)

컴퓨터 프로그램을 구별된 부분으로 분리시키는 디자인 원칙으로,
각 부문은 개개의 관심사를 해결한다 - 위키피디아

https://ko.wikipedia.org/wiki/%EA%B4%80%EC%8B%AC%EC%82%AC_%EB%B6%84%EB%A6%AC

 

관심사 분리 - 위키백과, 우리 모두의 백과사전

컴퓨터 과학에서 관심사 분리(separation of concerns, SoC)는 컴퓨터 프로그램을 구별된 부분으로 분리시키는 디자인 원칙으로, 각 부문은 개개의 관심사를 해결한다. 관심사란 컴퓨터 프로그램 코드

ko.wikipedia.org

 

현업에서 개발을 하다보면 처음에는 단순한 기능에 불과했던 것들이 요구사항과 기능들이 추가됨에 따라서 점점 복잡해지곤 합니다.

즉, 처음에는 하나의 기능만을 담당하는 함수로 시작하였지만 결국에는 방대한 기능이 탑재된 GOD 함수가 탄생하기 마련입니다.

 

여러분들도 개발을 할 때 하나의 함수를 읽다가, 여러가지 조건들로 인하여 어떤 상황이었는지 까먹은 적이 많으신가요?

이럴때, 디자인 원칙 중 하나인 관심사의 분리(SoC)를 적용하는 것을 고려해볼 수 있습니다.

 

간단하게 풀어서 설명하자면, 하나의 모듈(혹은 함수)에서 여러가지의 관심사를 가지고 처리하려면 복잡성이 높으니 관심사를 여러개로 분리하여 하나의 관심사는 하나의 기능(역할만) 가지도록 구성하는 것입니다. 대부분의 객체지향적 특성, 디자인 패턴등에서 결론적으로 나오는 이야기라고도 할 수 있습니다.

 

SoC 적용 예시

# 최소와 최대의 합을 구하는 경우의 예시입니다.
array_numbers = [1, 3, 5, 7, 6, 2]

# SoC 미적용
def get_min_max_sum(array_numbers):
    # 1. 최솟값과 최댓값을 구하기 위해 정렬한다.
    sorted_array = sorted(array_numbers)
    # 2. 최솟값을 구한다.
    min_num = sorted_array[0]
    # 3. 최댓값을 구한다.
    max_num = sorted_array[-1]
    
    # 4. 최솟값과 최댓값을 더하여 return 한다.
    return min_num + max_num
    
    
# SoC 적용
def get_min_of_sorted_array(sorted_array):
    return sorted_array[0]

def get_max_of_sorted_array(sorted_array):
    return soreted_array[-1]

def get_min_max_sum(array_numbers):
    # 1. 최솟값과 최댓값을 구하기 위해 정렬한다.
    sorted_array = sorted(array_numbers)
    # 2. 최솟값을 구하는 관심사는 새로운 함수에게 맡긴다.
    min_num = get_min_of_sorted_array(sorted_array)
    # 2. 최댓값을 구하는 관심사는 새로운 함수에게 맡긴다.
    max_num = get_max_of_sorted_array(sorted_array)
    
    # 3. 단지 구한 값을 더하여 return 한다.
    return min_num + max_num

SoC를 적용하지 않았을 경우 get_min_max_sum() 함수의 경우는 무려 4가지의 관심사를 갖고 있습니다.

최솟값과 최댓값의 합을 구하기 위해서 거쳐야하는 일련의 과정들이죠. 위의 예시는 매우 간단하기에 문제가 없는 것처럼 보일지도 모르지만, 실제 비즈니스 로직의 경우는 이보다 몇배는 더 복잡하고 다양한 관심사를 가지고 있습니다.

 

따라서, 아래의 예시처럼 SoC 원칙을 적용시켜 각각의 관심사를 함수로써 분리하였습니다.

최솟값과 최댓값을 구하는 2가지의 관심사를 각각 함수로 분리시켜 역할을 나누었습니다. 이를 실제 비즈니스 로직에 대입하여 본다면 조금 더 좋은 가독성과, 유지보수에 용이한 코드로 탄생하게 될 것입니다.

 

지금까지 관심사의 분리에 대해서 간단하게 알아보았습니다. 제가 설명한 개념으로는 SoC에 대한 모든 것을 설명하기에는 모자랍니다.

하지만, 궁극적으로는 모듈, 함수들이 각자의 관심사에 집중하여 각자가 맡은 일을 잘 처리한다면 유지보수가 좋은 코드가 되어가는 방향이 될 것입니다.

 

읽어주셔서 감사합니다 :)

 

728x90