YataNox
Separation of concerns (관심사의 분리) 본문
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
-
'CS' 카테고리의 다른 글
라이브러리와 프레임워크의 차이 (0) | 2023.09.12 |
---|---|
객체지향의 5원칙 (SOLID) (0) | 2023.09.12 |
단일 장애 지점(Single Point Of Failure) (0) | 2023.09.12 |
객체지향 프로그래밍 패러다임과 함수형 프로그래밍 패러다임 (0) | 2023.09.12 |
선언형 프로그래밍과 절차형 프로그래밍 (0) | 2023.09.12 |