소프트웨어 개발 세계에서 SOLID 원칙은 코드가 다음과 같이 기능과 데이터를 구성하는 방법을 알려줍니다.
SOLID라는 용어는 아래 설명된 5가지 설계 가정의 약어입니다.
(S) 단일 책임 원칙: "모듈에는 변경 이유가 하나만 있어야 합니다."
(The) 개방/폐쇄 원칙: "소프트웨어 아티팩트는 확장을 위해 열려야 하지만 수정을 위해서는 닫혀 있어야 합니다."
(L) Liskov 대체 원칙: "파생 클래스는 기본 클래스로 대체 가능해야 합니다."
(I) 인터페이스 분리 원칙: "클래스는 사용하지 않을 인터페이스와 메소드를 강제로 구현해서는 안 됩니다."
(D) 종속성 반전 원칙: "구현이 아닌 추상화에 의존"
SOLID는 객체 지향 프로그래밍을 위해 설계되었으며 GoLang은 이러한 패러다임을 채택한 언어가 아닌 것으로 알려져 있습니다. 그러나 OOP 방법론을 충족하기 위해 제공되는 리소스를 사용할 수 있습니다. 예를 들어 Go에는 상속 지원이 없지만 구성 지원으로 아이디어를 보완할 수 있습니다. 마찬가지로 인터페이스를 사용하여 일종의 다형성을 만들 수 있습니다.
5개 시리즈 중 첫 번째 기사인 이 기사에서는 우리가 매일 접하는 상황에 가까운 예를 들어 첫 번째 원칙을 자세히 설명하려고 합니다.
우리는 이미 용어의 의미를 알고 있으므로 이제 GoLang에서 이를 구현하는 방법을 배울 차례입니다.
이 언어에서는 이 원칙을 "함수나 유형은 단 하나의 작업과 단 하나의 책임을 가져야 합니다"라고 정의할 수 있습니다. 다음 코드를 살펴보겠습니다.
위에 userService라는 구조체가 있습니다. 여기에는 관계형 데이터베이스와의 통신을 담당하는 db와 RabbitMQ 메시징 서비스와의 통신을 지원하는 amqpChannel
이라는 두 가지 속성이 있습니다.
UserService는 Create라는 메소드를 구현합니다. 이 방법에서는 수신된 사용자 정보를 데이터베이스에 저장한 다음 RabbitMQ에 데이터를 게시합니다.
이로 인해 다음과 같은 여러 가지 문제가 발생할 수 있습니다.
다음 코드에서는 SRP를 준수하도록 구조를 수정했습니다. 확인해 보세요:
우리는 책임을 세 가지 별개의 부분으로 분리했습니다. 사용자를 데이터베이스에 유지하는 저장소 UserRepository, RabbitMQ에 메시지를 보내는 게시자 UserPublisher, 이 두 가지 작업을 조율하는 UserService 서비스
이러한 방식으로 각 구성 요소는 특정하고 독립적인 작업을 담당하여 코드의 유지 관리 및 발전을 촉진할 뿐만 아니라 각 구성 요소를 다른 부분에 영향을 주지 않고 교체하거나 개선할 수 있습니다. 예를 들어, 사용된 데이터베이스를 변경해야 하는 경우 저장소만 교체하면 됩니다. 소통의 형태를 바꿔야 한다면 출판사만 바꾸면 됩니다.
두 가지 서로 다른 작업을 수행하는 것과 실행을 위임하는 것 사이에는 미묘한 차이가 있다는 점은 주목할 가치가 있습니다. 원래 userService.Create 예제에서는 두 작업이 한 곳에서 수행되어 단일 책임 원칙을 위반했습니다. 리팩토링 후 실행을 다른 구조체에 위임했으며 Create 메서드는 이 흐름을 조정하는 역할만 담당했습니다.
이 예에서는 SRP를 적용하기 위해 다른 SOLID 원칙 중 일부도 구현하게 되었습니다.
이 시리즈의 다음 기사에서는 구체적인 예를 들어 각 항목에 대해 더 자세히 설명하겠습니다.
나중에 만나요 여러분!
참고자료:
SOLID: 객체 지향 디자인의 첫 5가지 원칙
Clean Coder 블로그 - 단일 책임 원칙
위 내용은 GoLang의 SOLID 원리 - 단일 책임 원칙(SRP)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!