일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 영어원서읽기
- Problem Solving
- 잡생각
- 파비최
- 운동
- Daily Challenge
- 월간
- FIT XR
- 화상영어
- leetcode
- 뭐든
- 3줄정리
- 영어공부
- Writing
- 매일
- 미드시청
- 스탭퍼
- 쓰릴오브파이트
- 10분
- 사이드
- 읽기
- realclass
- 리얼 클래스
- 괜찮음
- 프로젝트
- English
- 개발자
- 링피트
- 만화도
- 30분
- Today
- Total
파비의 매일매일 공부기록
프로그래머를 위한 파이썬 - 10장 #1 본문
이번 장은 느슨한 결합 만들기에 대한 내용이다.
느슨한 결합은 각 부분의 코드를 변경해도 다른 곳에서 문제가 발생할 걱정 없이 작업할 수 있게 함.
또한 확장성과 같이 프로그램에 기대하는 다른 특성들의 기초가 됨. 느슨한 결합이 아니라면 코드 유지보수 작업이 어려울 수 있음.
10.1 결합의 정의
- 결합 : 코드의 서로 다른 영역 사이의 결합 조직.
10.1.1 결합 조직
- 코드 전체에 흐르는 그물망 같은 것.
- 만약 두 코드의 상호 의존성이 높으면 그물망은 단단하게 짜인 상태. 그러므로 둘 중 한 코드를 옮기려면 다른 코드도 같이 옮겨야 함.
- 상호 의존성이 낮거나 전혀 없는 영역 사이의 그물망은 유연함.
- 저자는 모든 경우에 단단한 결합이 본질적으로 나쁘다고 하지는 않음.
10.1.2 단단한 결합
- 다른 객체를 속성으로 저장하는 클래스
- 클래스의 메서드가 다른 모듈의 함수를 호출하는 클래스
- 다른 객체의 메서드를 사용하여 절차적인 작업을 많이 수행하는 함수 또는 메서드
- 응집력을 증가시켜 결합도를 낮출 수 있음(클래스 외부 함수를 내부 함수로 변경하는 등)
10.1.3 느슨한 결합
- 두 코드가 상호작용하여 다른 코드의 세부 사항에 크게 의존하지 않고 작업을 수행하는 능력.
- 보통 인터페이스를 구현하고 사용. 극단적인 경우 상호 간 통신을 위해 인터페이스만 사용.
10.2 결합도 인식하기
- 결합도는 몇 가지 특별한 형태를 취하므로 각 형태에 이름을 부여하고 표시를 인지하면 단단한 결합을 조기에 완화시켜 장기적으로 생산성을 높일 수 있음.
10.2.1 기능에 대한 욕심
- 어떤 코드가 다른 영역에 있는 주된 기능을 사용하여 여러 작업을 수행하는 경우.
- 기능에 대한 욕심을 제거하기 위해 리펙토링 하면 어느 정도 통제권을 포기하는 것처럼 느껴질 수 있음.
10.2.2 산탄총 수술
- 단단한 결합의 결과. 클래스나 모듈을 한 번 수정하면 다른 코드가 계속 동작하도록 광범위하게 수정해야 함.
- 기능에 대한 욕심을 해결, 관심사 분리, 훌륭한 캡슐화와 추상화를 통해 산탄총 수술의 양의 최소화할 수 있음.
10.2.3 새는 추상화
- 추상화의 목적은 특정 작업의 세부 사항을 숨기는 것.
- 만약 기능의 욕심이 생기는 것을 인지하기 시작했다면, 그것은 새는 추상화 때문.
- 세부 사항을 충분히 숨기지 않은 추상화.
- 일반적으로 코드의 개념을 더욱 추상화할수록 사용자화를 덜 제공하게 됨.
'Study > Python' 카테고리의 다른 글
프로그래머를 위한 파이썬 - 11장 #1 (0) | 2021.12.09 |
---|---|
프로그래머를 위한 파이썬 - 10장 #2 (0) | 2021.12.08 |
프로그래머를 위한 파이썬 - 9장 #3 (0) | 2021.12.06 |
프로그래머를 위한 파이썬 - 9장 #2 (0) | 2021.12.05 |
프로그래머를 위한 파이썬 - 9장 #1 (0) | 2021.12.04 |