파비의 매일매일 공부기록

프로그래머를 위한 파이썬 - 10장 #1 본문

Study/Python

프로그래머를 위한 파이썬 - 10장 #1

fabichoi 2021. 12. 7. 23:30

이번 장은 느슨한 결합 만들기에 대한 내용이다.
느슨한 결합은 각 부분의 코드를 변경해도 다른 곳에서 문제가 발생할 걱정 없이 작업할 수 있게 함.
또한 확장성과 같이 프로그램에 기대하는 다른 특성들의 기초가 됨. 느슨한 결합이 아니라면 코드 유지보수 작업이 어려울 수 있음.

10.1 결합의 정의
- 결합 : 코드의 서로 다른 영역 사이의 결합 조직.

10.1.1 결합 조직
- 코드 전체에 흐르는 그물망 같은 것.
- 만약 두 코드의 상호 의존성이 높으면 그물망은 단단하게 짜인 상태. 그러므로 둘 중 한 코드를 옮기려면 다른 코드도 같이 옮겨야 함.
- 상호 의존성이 낮거나 전혀 없는 영역 사이의 그물망은 유연함.
- 저자는 모든 경우에 단단한 결합이 본질적으로 나쁘다고 하지는 않음.

10.1.2 단단한 결합
- 다른 객체를 속성으로 저장하는 클래스
- 클래스의 메서드가 다른 모듈의 함수를 호출하는 클래스
- 다른 객체의 메서드를 사용하여 절차적인 작업을 많이 수행하는 함수 또는 메서드
- 응집력을 증가시켜 결합도를 낮출 수 있음(클래스 외부 함수를 내부 함수로 변경하는 등)

10.1.3 느슨한 결합
- 두 코드가 상호작용하여 다른 코드의 세부 사항에 크게 의존하지 않고 작업을 수행하는 능력.
- 보통 인터페이스를 구현하고 사용. 극단적인 경우 상호 간 통신을 위해 인터페이스만 사용.

10.2 결합도 인식하기
- 결합도는 몇 가지 특별한 형태를 취하므로 각 형태에 이름을 부여하고 표시를 인지하면 단단한 결합을 조기에 완화시켜 장기적으로 생산성을 높일 수 있음.

10.2.1 기능에 대한 욕심
- 어떤 코드가 다른 영역에 있는 주된 기능을 사용하여 여러 작업을 수행하는 경우.
- 기능에 대한 욕심을 제거하기 위해 리펙토링 하면 어느 정도 통제권을 포기하는 것처럼 느껴질 수 있음. 

10.2.2 산탄총 수술
- 단단한 결합의 결과. 클래스나 모듈을 한 번 수정하면 다른 코드가 계속 동작하도록 광범위하게 수정해야 함.
- 기능에 대한 욕심을 해결, 관심사 분리, 훌륭한 캡슐화와 추상화를 통해 산탄총 수술의 양의 최소화할 수 있음.

10.2.3 새는 추상화
- 추상화의 목적은 특정 작업의 세부 사항을 숨기는 것.
- 만약 기능의 욕심이 생기는 것을 인지하기 시작했다면, 그것은 새는 추상화 때문.
- 세부 사항을 충분히 숨기지 않은 추상화. 
- 일반적으로 코드의 개념을 더욱 추상화할수록 사용자화를 덜 제공하게 됨.

반응형
Comments