Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[8장_김명석] #40

Merged
merged 1 commit into from
May 29, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions src/main/kotlin/kms/chapter08/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
### 의존성 이해하기

> 어떤 객체가 예정된 작업을 수행하기 위해 다른 객체를 필요로 하는 경우 의존성이 존재한다 말한다
> 의존성은 방향성을 가지며 단방향 이다

- **실행 시점**: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야한다
- **구현 시점**: 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경된다

#### 의존성 전이

> 캡슐화의 정도에 따라 객체가 의존하고 있는 객체의 의존성이 전이될 수 있다

- **직접의존성** (direct dependency)
- 한 요소가 다른 요소에 직접 의존하는 경우
- **간접의존성** (indirect dependency)
- 직접적인 관계는 존재하지 않지만 의존성 전이에 의해 영향이 전파되는 경우

#### 런타임 의존성과 컴파일타임 의존성

- **런타임 의존성** (run-time dependency)
- 객체간의 의존성을 다룸
- **컴파일타임 의존성** (compile-time dependency)
- 클래스간의 의존성을 다룸
- 실제 컴파일 진행 시점인지 코드 작성시간인지 파악이 중요

#### 컨텍스트 독립성

- 설계가 유연해지기 위해서는 가능한 실행될 컨텍스트에 대한 정보를 적게 알아야함

#### 의존성 해결하기

- 객체를 생성하는 시점에 **생성자**를 통해 의존성 해결
- 객체 생성 후 **setter 메서드**를 통해 의존성 해결
- 메서드 실행 시 **인자**를 이용해 의존성 해결

### 유연한 설계

#### 의존성과 결합도

- 의존성 : 두 요소 사이의 **관계 유무**
- 표준 클래스에 대한 의존은 해롭지 않다
- 의존성이 있어야 객체간 협력이 가능
- 하지만 과하면 문제가 될 수 있다
- 결합도 : 두 요소 사이에 존재하는 **의존성의 정도**를 상대적으로 표현
- 느슨한 결합도 (=약한 결합도) : Interface 에 의존하는 경우
- 단단한 결합도 (=강한 결합도) : 구체적인 class 에 의존하는 경우

#### 컨텍스트 확장하기

- null 을 통해서 **예외처리**하기 보다는 **None 타입**을 만들어서 처리하기