반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ReactiveProgramming
- theming
- 코틀린
- 안드로이드강좌
- Coroutine
- Compose
- kotlin강좌
- Gradle
- 디자인패턴
- 자바
- 회고
- 커스텀상태
- 안드로이드
- android
- k8s
- 병럴프로그래밍
- 알게되는
- mockito
- 책
- 알고리즘
- viewmodel
- 스레드
- Kotlin
- g 단위테스트
- 테스트
- 글또
- 병렬프로그래밍
- Rxjava
- 코루틴
- 안드로이드스튜디오
Archives
- Today
- Total
선생님, 개발을 잘하고 싶어요.
[오브젝트] 챕터1 - 객체, 설계 본문
요즘 오브젝트라는 책을 읽는 중입니다. 한동안 방법론의 노예가 되서 생각 없이 아키텍쳐 공부를 하지 않았나 반성하게 되는 일이 많았는데, 그 때 마침 스터디 기회가 찾아와서 읽고 정리하는 중입니다.
"적절한"이 너무 많이 나오는데... 적절한 객체에 적절한 책임은 도대체 무엇일까요? 이 책을 읽어보고 토론해보며 나만의 적절함을 알아갈 수 있으면 좋겠습니다.
- 이 책은 훌륭한 객체지향 프로그램을 설계하고 유지보수하는 데 필요한 원칙과 기법을 설명하기 위해서 쓰인 책이다.
- 훌륭한은 무슨 의미인가?
- 티켓 판매 애플리케이션
- 모듈의 목적 3가지
- 제대로 동작
- 간단하게 변경가능
- 특별한 훈련 없이도 개발자가 쉽게 읽고 이해가능
- 이해 가능한 코드
- 예상에서 크게 벗어나지 않는 코드
- 코드를 보는데 한꺼번에 기억해야하는 게 적은 코드
- 변경에 취약한 코드
- 의존성(dependency)은 변경에 대한 영향을 암시한다.
- 객체지향 설계는 의존하는 객체간 공동체 구축
- 객체 사이 의존성이 과한 경우를 결합도(coupling)가 높다고 함.
- 자율성을 높이자.
- 객체 내부의 세부적인 사항을 감추는 것을 캡슐화(encapsulation)라고 함.
- 객체를 인터페이스(interface)와 구현(implementation)으로 나누고 인터페이스만 공개하자.
- 객체가 내부 구현을 외부에 노출하지 않고 자신의 문제를 스스로 책임지고 해결한다.
- 객체의 자율성 높이기 → 변경 범위 축소 → 변경 용이성 개선
- 자율성 높이는 방법 (아래 3가지는 모두 같은 말)
- 캡슐화
- 인터페이스와 구현 나누고 인터페이스만 공개
- 자신의 문제를 스스로 책임지고 해결하기
- 응집도(cohesion)가 높다 → 밀접하게 연관된 작업만 수행하고 연관성 없는 작업은 다른 객체에게 위임하는 것
- 객체 스스로 자율성이 높으면 응집도가 높아진다. (첫걸음)
- 모듈의 목적 3가지
- 외부의 간섭을 최대한 배제하고 메시지를 통해서만 협력하는 객체의 공동체를 만드는 것이 훌륭한 객체지향 설계를 얻을 수 있는 지름길
- 외부의 간섭을 배제하는 법 → 구현을 숨긴다.
- 메시지를 통해서 협력하는 법 → 의존하는 객체의 인터페이스만 활용한다.
- 훌륭한 객체지향 설계 → 변경 용이성이 높은 설계?
- 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것이 훌륭한 객체지향 설계의 핵심
- 캡슐화를 이용해 의존성을 관리해서 변경에 용이하게 만들자.
- 책임의 이동
- 책임 = 기능
- 기능을 처리하는 방법
- 중앙집중식 절차적 프로그래밍
- 각 객체에게 책임(기능)이 분산된 객체지향 프로그래밍
- 데이터와 데이터를 사용하는 프로세스가 동일한 객체 안에 위치하면 객체지향 프로그래밍을 따르고 있을 확률이 높다.
- 객체지향의 핵심 (
또 말하는)- 적절한 객체에 적절한 책임을 할당하는 것
- 객체가 어떤 데이터를 가지느냐의 관점에서 객체에 어떤 책임을 할당할 것이냐에 초점을 맞춰야 한다.
- 적절, 어떤 책임 ... 너무 경험에 의해서만 알 수 있는 기준같다. 어떤 기준으로 “적절성”을 판단할 수 있을까?
- 훌륭한 객체지향 설계 (
또 또 말하는)- 의존성이 설계를 어렵게한다.
- 따라서 불필요한 의존성을 제거해 결합도를 낮추라.
- 구현을 내부로 감춰 캡슐화
- 캡슐화 → 자율성을 높힘 & 응집도 높힘
- 객체간 낮은 결합도와 높은 응집도만 남기도록 최소한의 의존성만 남기는 것이 중요하다.
- (또 말하는 거)
- 소프트웨어를 구성하는 모든 객체들이 자율적으로 행동하는 설계
- 설계는 코드를 작성하는 매 순간 코드를 어떻게 배치할 것인지 결정하는 과정에서 나온다.
- 좋은 설계란 오늘 요구하는 기능을 온전히 수행하며, 내일의 변경을 매끄럽게 수용할 수 있는 설계다.
- 변경 가능한 코드는 이해하기 쉬운 코드여야한다. 이해하기 어려운 코드는 설사 변경에 열려있어도, 코드를 수정할 마음이 선뜻 들지 않는다.
- 훌륭한 객체지향 설계란 협력하는 객체 사이의 의존성을 적절하게 관리하는 설계다.
'일상 > 책 리뷰' 카테고리의 다른 글
[오브젝트] 챕터 4 - 설계 품질과 트레이드오프 (0) | 2022.03.01 |
---|---|
[오브젝트] 챕터 3 - 역할, 책임, 협력 (0) | 2022.03.01 |
[오브젝트] 챕터 2 - 객체지향 프로그래밍 (0) | 2022.03.01 |
함께 자라기 - 김창준, 인사이트 (0) | 2021.07.05 |
디자인과 인간 심리 - 도널드 노먼 책 리뷰 (0) | 2020.02.01 |
Comments