느슨한 결합의 장점느슨한 결합을 사용하게 됐을 때의 장점은 크게 다음 두가지가 있다.1. 변경 혹은 리펙토링이 편해진다.2. 컴파일 타임의 최소화 지금부터 각각이 무엇을 뜻하는지 알아보자. 1. 변경 혹은 리펙토링이 편해진다.클래스만을 사용해 구현을 하게 되면, 해당 클래스의 역할이 처음에 생각했던 범위를 넘어서는 일이 자주 생긴다.예를 들어 검색을 하는 클래스와 검색 결과 상태를 저장하는 클래스가 분리되어 있다고 하고, 검색을 하는 클래스는 검색 결과 클래스에 의존성이 있기 때문에 이 상태값을 알 수 있는 상황을 가정해보자. 누군가 검색 결과 상태를 검색을 하는 클래스로부터 가져올 수 있으니 검색을 하는 클래스로부터 검색 결과를 가져오는 로직을 추가하게 되면 검색을 하는 클래스는 졸지에 검색 결과 상태..
의존성
의존성이란?소프트웨어 개발에서 의존성(Dependency)이란 한 모듈이 다른 모듈의 기능을 사용하거나, 하나의 객체가 다른 객체의 기능을 사용하는 것을 뜻한다. 예를 들어 A 객체의 기능을 실행할 때 B 객체가 필요하다면, "A 객체는 B 객체에 의존한다"라고 한다. 의존성은 의존하는 정도에 따라 강한 결합과 느슨한 결합으로 나눌 수 있다. 이어서 이 두가지 개념을 사용해 의존성에 대해 이해해보도록 하자. 강한 결합을 통해 이해하는 의존성강한 결합이란?우리가 SNS앱을 개발하는데, 유저에게 푸시 알림을 보내는 서비스를 만든다고 해보자. 그러면 이런 역할을 하는 PushNotificationService는 다음과 같이 만들 수 있다. class PushNotificationService { fu..
커맨드 패턴 커멘드 패턴은 하나의 객체를 통해 여러 객체들에 명령(Command)을 해야 할 때 사용되는 패턴이다. 커멘드 패턴을 사용하면 요청을 캡슐화해서 커멘드 객체가 명령을 해야하는 객체들에 대한 의존성을 느슨하게 만들 수 있다. 이 말이 무슨 말일까? 커멘드 패턴을 사용하지 않으면 여러 객체들에 명령(Command)를 하기 위해서는 명령을 하는 객체(커멘드 객체)가 명령을 받는 객체들을 알아야 한다. 예를 들어 집 안의 조명을 제어하는 LightController 클래스가 있다고 해보자. LightController는 제조사가 다른 조명들(MainLight, SubLight, BedRoomLight)에 대한 제어를 한다. LightController는 조명을 제어하기 위해 각 조명을 제어하는 메서..
예제 링크 : https://github.com/seyoungcho2/Dagger2Example 이 글은 예제7,8,9과 함께 한다. Scope란? Dagger2의 역할은 외부에서 의존성을 주입해주는 것이다. 여기서 문제점이 생긴다. 외부(Container)에서 제공하는 인스턴스들이 한 번만 생성되어도 되는데 호출할 때마다 생성된다면 불필요한 메모리 사용이 생긴다. Dagger2에서는 이를 해결하기 위해 Scope Annotation을 이용해 같은 범위(Scope)의 내에서 객체들을 관리하게 된다. Scope Annotation이 적용된 Provider은 범위(Scope) 내에서 한 번만 객체를 생성한다. Dagger에서는 Scope Annotation을 이용해 한 번 생성된 객체가 재사용되는 범위(Sc..
Interface로서의 Component 앞서 Component는 Interface의 역할을 한다고 하였다. Component Interface에서 제공되는 함수는 두 가지가 있을 수 있다. 하나는 프로비전 메서드로 그 자체로 Provider에 의해 반환되는 인스턴스를 반환하는 메서드이며, 다른 하나는 멤버 인젝션 메서드로 인자로 받는 인스턴스에 Provider에 의해 반환되는 인스턴스를 제공하는 메서드이다. 우리는 이 둘을 다음과 같이 부른다. 프로비전(Provision) 메서드 그 자체로 Provider에 의해 만들어진 인스턴스나, 프로퍼티가 주입된 인스턴스를 반환하는 메서드 멤버 인젝션(Member Injection) 메서드 인자로 받는 인스턴스에 Provider에 의해 반환되는 인스턴스를 제공하는..