SOLID - 문자 D - 종속성 역전 원칙
인터페이스란?
소프트웨어 개발에 대해 말하면 인터페이스는 데이터를 포함하지 않지만 동작을 메서드 서명으로 정의하는 추상 유형입니다.
예를 들어 데이터베이스에 계정을 삽입한다고 가정해 보겠습니다.
interface AddAccountRepository {
add: (email: String, password: String) => Account
}
AddAccountRepository 인터페이스에 구현이 없고 Add 메서드의 서명만 있는 것을 볼 수 있습니다. 하지만 궁금하실 겁니다. 코드가 없다면 어떻게 이 방법을 사용할 수 있을까요?
인터페이스를 구현하는 방법?
Add 메서드의 코드를 작성하고 싶다고 상상해 보십시오. 이 인터페이스를 구현하려면 새 클래스를 만들어야 합니다.
class AccountMongoRepository implements AddAccountRepository {
}
이 코드 줄만 작성하면 IDE(Visual Studio, Eclipse 등)에서 "Add"라는 메서드를 만들어야 한다고 말할 것입니다. 즉, "구현"이라는 단어를 사용하고 인터페이스 다음에 이 인터페이스의 모든 서명을 설명하고 구현해야 합니다. 따라서 코드는 다음과 같습니다.
class AccountMongoRepository implements AddAccountRepository {
add (email: String, password: String): Account {
// insert an user into a MongoDb
}
}
DeleteAccountRepository라는 또 다른 인터페이스가 있다면.
interface DeleteAccountRepository {
delete: (email: String) => void
}
"구현"부분에 인터페이스를 추가하고 삭제 메서드 구현을 작성하기만 하면 됩니다.
class AccountMongoRepository implements AddAccountRepository, DeleteAccountRepository {
add (email: String, password: String): Account {
// insert an user into a MongoDb
}
delete (email: String): void {
// delete an user
}
}
이제 인터페이스와 이러한 인터페이스의 메서드를 구현하는 클래스가 있습니다. 이제 이 인터페이스를 어떻게 사용할 수 있습니까?
인터페이스 구현을 사용하는 방법은 무엇입니까?
구현 방법을 사용하려면 클래스에 이 종속성을 주입해야 합니다. 의존성 주입에 대해 더 알고 싶다면 .
class DbAddAccount {
constructor (private readonly addAccountRepository: AddAccountRepository) { }
addUser (email: String, password: String): Account {
accountCreated = this.addAccountRepository.add(name, password)
return accountCreated
}
}
위의 코드에서 AddAccountRepository 인터페이스의 삽입을 볼 수 있습니다. DbAddAccount 클래스는 Add 메서드에 대한 구현에 대해 알지 못합니다. 종속성 클래스의 변경 사항을 인식할 필요가 없기 때문에 이는 중요합니다.
이름이 종속성 반전인 이유는 무엇입니까?
한 시나리오에서 구체적인 클래스를 사용하여 사용자를 데이터베이스에 삽입하는 경우 DbAddAccount 클래스는 이 클래스에 종속됩니다.
예를 들어 데이터베이스를 Postgres로 변경해야 하는 경우 클래스가 영향을 받습니다. 주입 종속성을 사용하여 아래 이미지에서 볼 수 있듯이 종속성을 반전시킵니다.
이제 DbAddAccount는 AddAccountRepository 인터페이스를 통해 AccountMongoRepository를 사용합니다. DbAddAccount는 AccountMongoRepository에 의존하지 않지만 그 반대입니다. 사용하려면 AccountMongoRepository가 DbAddAccount에 의존합니다.
결론
종속성 역전 원리와 종속성 주입은 함께 작동합니다. 우리는 다른 하나를 얻기 위해 하나를 사용해야 합니다. 이해하고 코딩하기가 더 어려울 수 있지만 코드에서 두 가지를 모두 사용하면 재사용성이 향상되고 코드가 더 깨끗해지고 변경하기가 더 쉬워집니다.
Reference
이 문제에 관하여(SOLID - 문자 D - 종속성 역전 원칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/vitoraa/d-of-solid-dependency-inversion-principle-mcm
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
interface AddAccountRepository {
add: (email: String, password: String) => Account
}
Add 메서드의 코드를 작성하고 싶다고 상상해 보십시오. 이 인터페이스를 구현하려면 새 클래스를 만들어야 합니다.
class AccountMongoRepository implements AddAccountRepository {
}
이 코드 줄만 작성하면 IDE(Visual Studio, Eclipse 등)에서 "Add"라는 메서드를 만들어야 한다고 말할 것입니다. 즉, "구현"이라는 단어를 사용하고 인터페이스 다음에 이 인터페이스의 모든 서명을 설명하고 구현해야 합니다. 따라서 코드는 다음과 같습니다.
class AccountMongoRepository implements AddAccountRepository {
add (email: String, password: String): Account {
// insert an user into a MongoDb
}
}
DeleteAccountRepository라는 또 다른 인터페이스가 있다면.
interface DeleteAccountRepository {
delete: (email: String) => void
}
"구현"부분에 인터페이스를 추가하고 삭제 메서드 구현을 작성하기만 하면 됩니다.
class AccountMongoRepository implements AddAccountRepository, DeleteAccountRepository {
add (email: String, password: String): Account {
// insert an user into a MongoDb
}
delete (email: String): void {
// delete an user
}
}
이제 인터페이스와 이러한 인터페이스의 메서드를 구현하는 클래스가 있습니다. 이제 이 인터페이스를 어떻게 사용할 수 있습니까?
인터페이스 구현을 사용하는 방법은 무엇입니까?
구현 방법을 사용하려면 클래스에 이 종속성을 주입해야 합니다. 의존성 주입에 대해 더 알고 싶다면 .
class DbAddAccount {
constructor (private readonly addAccountRepository: AddAccountRepository) { }
addUser (email: String, password: String): Account {
accountCreated = this.addAccountRepository.add(name, password)
return accountCreated
}
}
위의 코드에서 AddAccountRepository 인터페이스의 삽입을 볼 수 있습니다. DbAddAccount 클래스는 Add 메서드에 대한 구현에 대해 알지 못합니다. 종속성 클래스의 변경 사항을 인식할 필요가 없기 때문에 이는 중요합니다.
이름이 종속성 반전인 이유는 무엇입니까?
한 시나리오에서 구체적인 클래스를 사용하여 사용자를 데이터베이스에 삽입하는 경우 DbAddAccount 클래스는 이 클래스에 종속됩니다.
예를 들어 데이터베이스를 Postgres로 변경해야 하는 경우 클래스가 영향을 받습니다. 주입 종속성을 사용하여 아래 이미지에서 볼 수 있듯이 종속성을 반전시킵니다.
이제 DbAddAccount는 AddAccountRepository 인터페이스를 통해 AccountMongoRepository를 사용합니다. DbAddAccount는 AccountMongoRepository에 의존하지 않지만 그 반대입니다. 사용하려면 AccountMongoRepository가 DbAddAccount에 의존합니다.
결론
종속성 역전 원리와 종속성 주입은 함께 작동합니다. 우리는 다른 하나를 얻기 위해 하나를 사용해야 합니다. 이해하고 코딩하기가 더 어려울 수 있지만 코드에서 두 가지를 모두 사용하면 재사용성이 향상되고 코드가 더 깨끗해지고 변경하기가 더 쉬워집니다.
Reference
이 문제에 관하여(SOLID - 문자 D - 종속성 역전 원칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/vitoraa/d-of-solid-dependency-inversion-principle-mcm
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class DbAddAccount {
constructor (private readonly addAccountRepository: AddAccountRepository) { }
addUser (email: String, password: String): Account {
accountCreated = this.addAccountRepository.add(name, password)
return accountCreated
}
}
한 시나리오에서 구체적인 클래스를 사용하여 사용자를 데이터베이스에 삽입하는 경우 DbAddAccount 클래스는 이 클래스에 종속됩니다.
예를 들어 데이터베이스를 Postgres로 변경해야 하는 경우 클래스가 영향을 받습니다. 주입 종속성을 사용하여 아래 이미지에서 볼 수 있듯이 종속성을 반전시킵니다.
이제 DbAddAccount는 AddAccountRepository 인터페이스를 통해 AccountMongoRepository를 사용합니다. DbAddAccount는 AccountMongoRepository에 의존하지 않지만 그 반대입니다. 사용하려면 AccountMongoRepository가 DbAddAccount에 의존합니다.
결론
종속성 역전 원리와 종속성 주입은 함께 작동합니다. 우리는 다른 하나를 얻기 위해 하나를 사용해야 합니다. 이해하고 코딩하기가 더 어려울 수 있지만 코드에서 두 가지를 모두 사용하면 재사용성이 향상되고 코드가 더 깨끗해지고 변경하기가 더 쉬워집니다.
Reference
이 문제에 관하여(SOLID - 문자 D - 종속성 역전 원칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/vitoraa/d-of-solid-dependency-inversion-principle-mcm
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(SOLID - 문자 D - 종속성 역전 원칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vitoraa/d-of-solid-dependency-inversion-principle-mcm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)