유니티 개발일지

SOLID 원칙

겜마고 김민재 2024. 6. 30. 22:52

 

SOLID 원칙이란: 객체지향 설계에서 지켜야하는 5가지 원칙

 

SOLID 원칙의 5가지 원칙

단일 책임의 원칙  하나의 클래스는 하나의 목적을 위해 생성한다.
개방 폐쇄 원칙 확장에는 열려있고 수정에는 닫혀있어야 한다.
리스코프 치환의 원칙  상속받은 하위 클래스는 어디서나 자신의 상위 클래스로 교체할 수 있어야 한다.
인터페이스 분리의 원칙 클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다. 
의존성 역전의 원칙  실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고받음으로써 관계를 최대한 느슨하게 만든다.

 

그럼 이제 SOLID원칙을 하나하나 간단하게 소개하도록 하겠습니다.

---------------------------------------------------------------------------------------------

1. 단일 책임의 원칙: 단일 책임의 원칙은 하나의 클래스가 하나의 목적을 위해 생성되는 것을 말한다.

 

예를 들어 플레이어가 있다 그리고 플레이어 게임오브젝트 안에는 PlayerMove 스크립트가 있을 것이다.

이 PlayerMove안에선 PlayerMove에 관련된 기능을 넣어야지 갑자기 총을 쏘는 기능을 넣으면 안된다는 말이다.

 

이것은 기본적인 원칙이기 떄문에 꼭 지켜야 한다.

 

---------------------------------------------------------------------------------------------

2.개방 폐쇠 원칙: 확장에는 열려이고 수정에는 닫혀있어야된다는 뜻이다.

 

쉽게 말해 원본 코드를 수정하지 않고 새로운 동작을 추가 할 수 있어야된다.

만약 원본코드를 계속해서 수정하게 된다면, 여러 휴먼 에러가 날 수 있기 떄문에 수정이 아닌 추가를 할 수

있는 코드를 설계해야된다.

---------------------------------------------------------------------------------------------

3.리스코프 치환의 원칙: 상속받은 하위 클래스는 어디서나 자신의 상위 클래스로 교체할 수 있어야 한다는 뜻이다.

 

기본적으로 파생클래스가 기본클래스를 대체할 수 있어야 한다라는 원칙으로 상속할떄 지켜야되는 원칙이다.

쉽게 말해서 하위 클래스는 어떤한 경우이더라도 상위 클래스를 대체할 수 있어야된다는 이야기이다.

 

예를 들어 플레이어를 상속 받아놓고 적을 만들면 안된다는 뜻이다.

이원칙을 잘 지키기 위해선 간단한 추상클래스와 상속보단 여러 인터페이스를 활용하는 것이 좋다.

---------------------------------------------------------------------------------------------

4.인터페이스 분리: 클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다. 

 

쉽게 말해 인터페이스 크게크게 사용하지 않고, 적은 단위로 나눠서 쓰라는 원칙입니다.

 

예를 들어, ICharacter Stat이라는 인터페이스 안에 Move Attack메서드를 넣지않고 Imove를 만들어 거기에

는 움직이는 것만 메서드로 만들고 IAttack을 만들어 거기에 Attack에 관련 되있는 것만 메서드로 만들어야 된다.

 

이를 사용하면, 코드의  결합도가 낮아지고 코드 수정이 용이해진다는 장점을 가지고 있습니다.

 

---------------------------------------------------------------------------------------------

5.의존성 역전의 원칙: 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고받음으로써 관계를 최대한 느슨하게 만드는 원칙

 

이것도 쉽게 예를들어 스위치가 있고 문이 있습니다 여기서 스위치가 문을 상속 받으면 스위치가 문만 열게 하겠죠? 이렇게 코드를 짜지말고 예를 들어 인터페이스 같은 기능을 사용해 스위치가 다른 오브젝트도 활성 비활성화를 시킬 수 있게 만들면 됩니다.

결론 적으로 특정 클래스에 직접 적으로 의존 하는 것이 아닌 인터페이스를 거쳐 느슨한 결합을 이뤄지게 하는 원칙 입니다.

 

---------------------------------------------------------------------------------------------

 

이것으로 간단한 SOLID 원칙 정리를 마치겠습니다.