์ ๋น์ฐํ ๊ฐ๋ฅํฉ๋๋ค 1!!!!
์ด๋ป๊ฒ ๊ฐ๋ฅํ๋์ ?!!!
์ ๊ฐ๋ฅํฉ๋๋ค ์ ๋ฏฟ์ผ์ธ์
[๋ฐฉ๋ฒ 1. BookRepository ์ธํฐํ์ด์ค ๋์ ๊ตฌํ์ฒด๋ฅผ 2๊ฐ ์ฃผ์ ๋ฐ๋๋ค]
์๋ ์ฝ๋์ ๊ฐ์ ๋๋์ ๋๋ค!!
์ด๋ ๊ฒ๋๋ฉด 1๋ฒ์์๋ A Repository, 2๋ฒ์์๋ B Repository๋ฅผ ์ฌ์ฉํ์ค ์ ์๊ฒ ๋ฉ๋๋ค!!
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์๋๋ฐ์!!
@RestController
public class BookController {
private final BookMemoryRepository bookMemoryRepository;
private final BookMySqlRepository bookMysqlRepository;
public BookController(
BookMemoryRepository bookMemoryRepository,
BookMySqlRepository bookMysqlRepository
) {
this.bookMemoryRepository = bookMemoryRepository;
this.bookMysqlRepository = bookMysqlRepository;
}
// ์ฌ์ฉํ๊ณ ์ถ์ ๊ณณ์ ์ ์ ํ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ค.
}
[๋ฐฉ๋ฒ 2. BookRepository ์ธํฐํ์ด์ค๋ฅผ ์ปฌ๋ ์ ์ผ๋ก ์ฃผ์ ๋ฐ๋๋ค]
๊ฐ์์์ ์๊ฐ๋๋ฆฌ์ง๋ ์์์ง๋ง, ์คํ๋ง ๋น์ ๋ฐ์ ๋ List๋ Map์ ํ์ฉํ ์๋ ์์ต๋๋ค!
์๋ฅผ ๋ค์ด, List ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด๋ณผ๊ฒ์!
@RestController
public class BookController {
private final List<BookRepository> bookRepositories;
public BookController(List<BookRepository> bookRepositories) {
this.bookRepositories= bookRepositories;
}
}
์ด๋ ๊ฒ๋๋ฉด List<BookRepository> bookRepositories ์๋ BookMemoryRepository ๊ณผ BookMySqlRepository ๊ฐ ๋ชจ๋ ๋ค์ด์๊ฒ ๋ฉ๋๋ค!! ๊ทธ๋์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌ๋ถํ ์๋ ์์ต๋๋ค!!
@Repository
public class BookMemoryRepository {
@Override
public RepositoryType getType() {
return RepositoryType.MEMORY
}
}
@Repository
public class BookMySqlRepository {
@Override
public RepositoryType getType() {
return RepositoryType.MYSQL
}
}
// enum class ํ์ฉ
enum RepositoryType {
MEMORY,
MYSQL;
}
@RestController
public class BookController {
private final List<BookRepository> bookRepositories;
public BookController(List<BookRepository> bookRepositories) {
this.bookRepositories= bookRepositories;
}
public void method1() {
// bookRepositories ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ getType์ ํธ์ถํ์ฌ MEMORY์ธ ๊ฒ์ ์ฐพ๋๋ค!
// stream + filter + findFirst๋ฅผ ์ฐ์
๋ ์ข๊ณ , for๋ฌธ์ ๋์
๋ ์ข์ต๋๋ค!
}
public void method2() {
// bookRepositories ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ getType์ ํธ์ถํ์ฌ MYSQL์ธ ๊ฒ์ ์ฐพ๋๋ค!
}
}
๋ง์ฝ Map์ ์ฌ์ฉํ๊ฒ ๋๋ฉด key๋ฅผ String์ผ๋ก, value๋ฅผ BookRepository๋ก ๋ฐ์ผ์๋ฉด ๋ฉ๋๋ค!!
@RestController
public class BookController {
private final Map<String, BookRepository> bookRepositories;
public BookController(Map<String, BookRepository> bookRepositories) {
this.bookRepositories= bookRepositories;
}
}
์ด ๊ฒฝ์ฐ, ์ด Map์๋
"bookMemoryRepository" -> BookMemoryRepository ์ธ์คํด์ค
"bookMySqlRepository" -> BookMySqlRepository ์ธ์คํด์ค
๊ฐ ๋ค์ด์๊ฒ ๋ฉ๋๋ค!!