YataNox

Separation of concerns (관심사의 분리) 본문

CS

Separation of concerns (관심사의 분리)

에이디/김우진 2023. 9. 12. 14:40

1. 관심사 분리란?

  개발의 기본 원칙 중의 하나로 프로그램을 하나의 단일 블록으로 작성하지 말고 작은 조각으로 나누어 각각 간단한 개별 작업을 완료할 수 있도록 하는 원칙

 

  즉 가장 낮은 레벨에서 긴 복잡한 함수를 쓰지 말라라고 말하는 것이다. 함수의 크기가 커지기 시작하면 함수가 너무 많은 작업을 처리한 다는 것이고, 함수를 분리할 필요가 있다는 뜻이된다.

 

  이러한 경우 이를 리팩터링하여 더 간결한 모양으로 만들어야 한다. 이 프로세스 중에 원래 알고리즘의 일부가 내보내지고 개인 액세스 수준을 가진 별도의 작은 함수로 캡슐화된다. 이렇게하면, 코드가 명료해지고 다른 부분에서 재사용할 수 있게 된다.

 

  간단한 예시로 이해를 돕자.

public static void main(){
	Scanner sc = new Scanner(System.in);
	int[] num = new int[3];
    
    for(int i = 0; i < 3; i++){
    	num[i] = sc.nextInt();
    }
	    
    int sum = 0;
   	for(int i = 0; i < 3; i++){
    	sum += num[i];
    }
    
    System.out.println(sum);
    sc.close();
}

  위 코드는 숫자 3개를 입력받은 뒤 숫자를 모두 더한 값을 출력하는 코드이다.

숫자를 입력하는 코드, 더하는 코드, 출력하는 코드가 모두 한 블럭 안에 존재하기에 하나의 블럭의 역할이 명확하게 떨어지지 않고 재사용에도 어려움이 있다. 이를 아래처럼 수정해보자.

 

public static void main(){
	int[] nums = new int[3];
    int sum = 0;
    
	InputValue(num);
    sum = SumValue(num);
    PrintValue(sum);
}

public static void InputValue(int[] nums){
	Scanner sc = new Scanner(System.in);
    
    for(int i = 0; i < num.length; i++)
    	nums[i] = sc.nextInt();
        
   	sc.close();
}

public static int SumValue(int[] nums){
	int temp = 0;
	for(int i = 0; i < nums.length; i++)
    	temp += nums[i];
        
   	return temp;
}

public static void PrintValue(int sum){
	System.out.println(num);
}

이 역시 좋은 코드라고 할 수는 없으나 역할 별로 코드를 나누어 블럭별로 기능을 구분해 역할이 명료하고 이후 재사용에서도 이점을 가져갈 수 있다.

 

  관심사의 분리는 결론적으로 결합도의 감소와 응집도의 증가의 과정을 포함한다. 이 둘은 모듈의 독립성을 파악하는 수치로 각각 모듈 내부에서 구성 요소 간에 밀접한 관계를 맺고 있는 정도, 서로 다른 모듈 간 상호 의존하는 정도 또는 두 모듈 사이의 연관된 관계를 뜻한다.

 

 

 

--참조

https://kaki104.tistory.com/725

 

Separation of concerns (관심사의 분리)

관심사의 분리(SoC)는 소프트웨어 개발에서 가장 기본적인 원칙 중 하나이며, SOLID 원칙 5개 중 2개(단일 책임 및 인터페이스 분리)가 이 개념에서 직접 파생될 정도로 매우 중요합니다. 원칙은 간

kaki104.tistory.com

 

-