- PSA λ νκ²½κ³Ό μΈλΆ κΈ°μ μ λ³νμ κ΄κ³ μμ΄ μΌκ΄λ λ°©μμΌλ‘ κΈ°μ μ μ κ·Όν μ μκ² ν΄μ€λ€.
- POJO λ‘ κ°λ°λ μ½λλ νΉμ κΈ°μ μ μ§μ λ
ΈμΆλμ΄ λ§λ€μ΄μ§λ©΄ μλλλ°, μ΄λ₯Ό μν΄ μ€νλ§μμ μ 곡νλ λνμ μΈ κΈ°μ μ΄
PSA
μ΄λ€. - μλΉμ€ μΆμνλ₯Ό μν΄ νμν κΈ°μ μ
DI
λΏμ΄λ€.- μ¦, PSA λ DI λ₯Ό μμ© νλ λ°©λ²μ΄λ€.
- μΆμν κ³μΈ΅μ μ¬μ©ν΄μ
μ΄λ€ κΈ°μ μ λ΄λΆμ μ¨κΈ°κ³
κ°λ°μμκ²νΈμμ±μ μ 곡
ν΄μ£Όλ κ²μ μλΉμ€ μΆμν(Service Abstraction) μ΄λΌκ³ νλ€. - μλΉμ€ μΆμνλ‘ μ 곡λλ κΈ°μ μ
λ€λ₯Έ κΈ°μ μ€νμΌλ‘ κ°νΈνκ² λ°κΏ μ μλ νμ₯μ±
μ κ°κ³ μλ κ²μ΄ PSA μ΄λ€.
- νΉμ μΈλΆμ μΈ κΈ°μ μ μ’ μλμ§ μκ² ν΄μ€λ€.
- ν μ€νΈκ° μ΄λ ΅κ² λ§λ€μ΄μ§ API λ μ€μ μ ν΅ν΄ μ£Όμ κΈ°λ₯μ μΈλΆμμ μ μ΄νκ² λ§λ€κ³ μΆμ κ²½μ° μ¬μ©ν μ μλ€.
public class RepositoryRank {
public int getPoint(String repositoryName) throws IOException {
GitHub github = GitHub.connect();
GHRepository repository = github.getRepository(repositoryName);
int points = 0;
if (repository.hasIssues()) {
points += 1;
}
if (repository.getReadme() != null) {
points += 1;
}
// μλ΅
}
}
νμ¬ getPoint() λ©μλλ ν μ€νΈνκΈ° μ΄λ €μ΄ μνμ΄λ€.
λ°λ‘ getPoint() λ΄λΆμμ GitHub API λ₯Ό νΈμΆνκΈ° λλ¬Έμ΄λ€. μ€μ λ‘ ν μ€νΈν λλ§λ€ API λ₯Ό λ§€λ² νΈμΆνκ² ν κ²μΈκ°?
API λ₯Ό λ§€λ²νΈμΆνκ² λλ©΄ GitHub API μ체μ μ νμ΄ μμ μλ μκ³ , API λ₯Ό νΈμΆνλ κ³Όμ μμ μ€ν¨κ° μΌμ΄λ μλ μμΌλ©°, μλλ λ릴 κ²μ΄λ€.
μ΄λ¬ν λ¬Έμ λ₯Ό PSA λ₯Ό μ¬μ©νμ¬ ν΄κ²°ν μ μλ€.
ν
μ€νΈνκΈ° μ΄λ €μ΄ λΆλΆ(GitHub github = GitHub.connect()
)μ μΆμννλ κ²μ΄λ€.
interface GitHubService {
GitHub connect();
}
public class DefaultGitHubService implements GitHubService {
@Override
public GitHub connect() {
return GitHub.connect();
}
}
public class RepositoryRank {
private final GitHubService gitHubService;
public RepositoryRank(final GitHubService gitHubService) {
this.gitHubService = gitHubService;
}
public int getPoint(String repositoryName) throws IOException {
GitHub github = gitHubService.connect();
GHRepository repository = github.getRepository(repositoryName);
// μλ΅
}
}
PSA λ₯Ό μ μ©νμ¬ λ¦¬ν©ν λ§ νμλλ ν
μ€νΈνκΈ° μ¬μ΄ μ½λ
κ° λμλ€.