[C#] SOLID 원칙 (5 : D/DIP)

Learning 

When: 1학년 8월 9일

 

How:

이제 마지막 SOLID 원칙인데 솔리드 원칙을 공부하면서 "클린 코드" 처럼 너무 맹신했을 때 부작용이 있을까 싶어 좀 살펴보았습니다. 이것도 코드를 짤 때 여러 가지 길이 있다고 하면 그 길들의 울타리 같은 것이기 때문에 이것을 맹신한다면 프로토타입이나 최근에 한 게임잼처럼 코드의 질보다 중요한 것이 있다고 했을 때 부작용이 있을 수 있습니다.

 

Understanding:

D : 의존 역전 원칙 (Dependency Inversion Principle, DIP)

  • 정의 : 의존 역전 원칙은 상위 모듈이 하위 모듈에 의존하면 안되고, 둘 다 추상화에 의존해야 한다는 원칙입니다.
    이게 무슨 소리냐 하면 공격 클래스(상위 모듈)의 공격 메서드에서 검 클래스(하위 모듈)의 공격 메서드를
    실행시켜선 안되고,(자식, 부모 관계가 아니여도 됩니다.) IAttacker 인터페이스의 무언가를 실행하는 추상화를
    해야 한다는 뜻입니다. 상위 모듈도 IAttacker를 참조하고 하위 모듈도 IAttacker를 구현하니
    둘 다 의존하는 중입니다. 이것은 확장에는 열려 있고, 수정에는 닫혀 있어야 한다는 OCP 원칙과도
    관련된 원칙입니다.
  • 사용 이유 : 이것을 어기는 코드를 예로 들자면 공격을 담당하는 클래스에서 기본 공격을 사용할 때
    검을 휘두르는 공격 클래스를 직접 참조하게 됩니다. 여기서 기본 공격이 검이 아니라 미사일을 발사하는 등, 
    다른 클래스로 바뀐다면 공격을 담당하는 상위 클래스를 직접 바꿔주어야 합니다. OCP 원칙도 어기게 되고
    코드의 유연성, 재사용성이 많이 떨어져 다른 NPC나 적의 공격 클래스를 만들 때 상속해도 거의 따로
    짜야하는 수준이 됩니다. 여기서 공격을 담당하는 상위 클래스가 SwingAttack 클래스를 직접 참조하는 대신,
    IAttacker 인터페이스를 참조한다면 매개 변수를 바꾸는 등 코드를 거의 또는 아예 수정하지 않아도 됩니다.

 

Result: 기능을 구현하는 코드는 어느정도 알게 되었지만 코드를 예쁘게 짜는 방법을 몰랐기 때문에 솔리드 원칙을 공부하게 되었는데 원래 코드를 어떻게 짰나 되새기며 공부하니 효과가 더 좋았던 것 같아 이 글을 읽을 때도 그렇게 하면 좋을 것 같습니다.

'C#' 카테고리의 다른 글

[C#] 가비지 컬렉터 (GC)  (4) 2025.08.11
[C#] 2차원 배열  (3) 2025.08.10
[C#] SOLID 원칙 (4 : I/ISP)  (1) 2025.08.08
[C#] SOLID 원칙 (3 : L/LSP)  (4) 2025.08.07
[C#] SOLID 원칙 (2 : O/OCP)  (3) 2025.08.06