과제를 하다보면 필요한 기능만 구현한 나머지 코드의 구조적인 부분이 많이 부족하다고 느꼈다. 그래서 이번 과제에서는 아래의 요소를 많이 생각하면서 리팩토링을 하려고 노력하고자 한다.
public class Player : MonoBehavior
{
private PlayerController controller;
private PlayerCondition condition;
private Equipment equip;
private void Awake()
{
controller = GetComponent<PlayerController>();
condition = GetComponent<PlayerCondition>();
equip = GetComponent<Equipment>();
}
}
public class PlayerController : MonoBehavior
public class PlayerCondition : MonoBehavior
public class Equipment : MonoBehavior
개방 폐쇄 원칙 : 원본 코드를 수정하지 않고도 새로운 동작을 생성할 수 있도록 구조화한다.
추상클래스, 인터페이스를 활용해보자.
리스코프 치환 원칙 : 부모 클래스에 들어가는 로직을 불필요하게 늘리지 않는다. 추상화를 단순하게 유지한다. 자식 클래스를 설정할 때 기능을 제거하지 않는다.
비슷한 기능을 하지만 세부적인 내용이 다를 때는 인터페이스를 활용해보자.
인터페이스 분리 원칙 : 인터페이스를 작은 단위로 분할하여 클래스에서 필요한 요소만 선택해 사용하도록 한다.
의존관계 역전 원칙 : 추상화에 의존한다. 다른 클래스와 관계가 있는 클래스는 종속 또는 결합 관계가 있다고 하는데, 이러한 관계는 하나를 수정하면 다른 하나에도 영향을 줄 수 있기 때문에 결합도를 낮춰야 한다.
결합도를 낮추고 응집도를 높이려고 노력해보자.
| 추상클래스 | 인터페이스 |
|---|---|
| 메서드 전체 또는 일부를 구현 | 메서드를 선언하지만 구현 X |
| 변수와 필드를 선언하고 사용 | 메서드와 프로퍼티만 선언(필드는 제외) |
| 정적 멤버 보유 | 정적 멤버 선언/사용 불가 |
| 생성자 사용 | 생성자 사용 불가 |
| 모든 접근제한자 사용 | 모든 멤버는 암묵적으로 public |
클래스는 하나의 클래스만 상속, 여러 인터페이스 구현
유니티의 MonoBehavior 메서드를 적절히 사용해보자.
Unity 게임 프로그래밍 패턴으로 코딩 스킬 업그레이드
https://unity.com/kr/resources/level-up-your-code-with-game-programming-patterns