public class FlowController {
// fileName 필드 초기화 코드 생략
public void process() {
FileDataReader reader = new FileDataReader(fileName); // 객체 생성
byte[] plainBytes = reader.read(); // 메서드 호출
ByteEncryptor encryptor = new ByteEncryptor(); // 객체 생성
byte[] encryptedBytes = encryptor.encrypt(plainBytes); // 메서드 호출
FileDataWriter writer = new FileDataWriter(); // 객체 생성
writer.write(encryptedBytes); // 메서드 호출
}
}
파라미터를 통한 의존성 구현
public void process(ByteEncryptor encryptor) {
// 내부에서 encryptor를 사용할 가능성이 높다.
}
FlowController
도 변경되어야 한다.FileDataWriter
의 매개변수가 변경된 경우public class FlowController {
// outFileName 필드 초기화 위한 코드 추가 발생
public void process() {
// ... 다른 코드 생략 ...
// FileDataWriter writer = new FileDataWriter(); 기존 코드
FileDataWriter writer = new FileDataWriter(outFileName); // 변경 발생
writer.write(encryptedBytes);
}
}
public class Authenticator {
public boolean authenticate(String id, String password) {
Member m = findMemberById(id);
if (m == null) return false;
return m.equalPassword(password);
}
}
public class AuthenticationHandler {
public void handleRequest(String inputId, String inputPassword) {
Authenticator auth = new Authenticator();
if (auth.authenticate(inputId, inputPassword)) {
// 아이디/암호 일치할 때의 처리
} else {
// 아이디/암호 일치하지 않을 때의 처리
}
}
}
AuthenticationHandler
에서는 Authenticator
를 사용한다의존
한다고 표현한다.AuthenticationHandler
가 제대로 동작하려면 Authenticator
가 필요하다.해당 요구사항을 만족시키기 위하여 코드 이렇게 변경해야함..
public class Authenticator {
public void authenticate(String id, String password) {
Member m = findMemberById(id);
if (m == null) throw new MemberNotFoundException();
if (!m.equalPassword(password)) throw new InvalidPasswordException();
}
}
public class AuthenticationHandler {
public void handleRequest(String inputId, String inputPassword) {
Authenticator auth = new Authenticator();
try {
auth.authenticate(inputId, inputPassword);
// 아이디/암호가 일치하는 경우의 처리
} catch(MemberNotFoundException ex) {
// 아이디가 잘못된 경우의 처리
} catch(InvalidPasswordException ex) {
// 암호가 잘못된 경우의 처리
}
}
}
Authenticator
클래스가 변경되었다.
AuthenticationHandler
가 변경됨
하나의 변경점으로.. 의존성이 양방향으로 영향을 미칠 수 있다는 것을 보여준다.