본문 바로가기
C#

[코드 최적화] 스파게티화 된 코드를 푸는 방법 1장 - 조건의 역으로 코드 Depth를 줄여보자.

by LemonCandy 2021. 8. 11.

이번 내용에서 가장 중요한 것은 "화면을 벗어나지 않는" 함수를 만드는데 노력하는 것입니다.
먼저 소개 드릴 테크닉은 Depth 줄이기 입니다.

[Depth 줄이기]
여기서 말하는 Depth란 무엇을 말하는걸까요? 바로 "Tab을 사용한 횟수"입니다.
이해를 돕기 위해 아주 심플한 코드를 준비했습니다. 이런 코드가 있다고 가정해봅시다.

 

public class NewBehaviourScript : MonoBehaviour
{
    private float _timer = 0f;
    private bool _isInitData = true;

    // Start is called before the first frame update
    void Start()
    {
        if (_timer >= 0f)
        {
            // 내용
            // 내용
            // 내용
            // 내용
            // 내용

            if (_isInitData == true)
            {
                DoPlay();
            }
        }
    }


    private void DoPlay()
    {
        // 뭔가 실행
    }
}

 

void Start()의 함수의 최대 깊이는 몇일까요? 정답은 3입니다. 왜냐하면, Start함수에서 가장 탭을 많이 사용한 함수가 DoPlay()이기 떄문입니다. 아래 스크린샷을 참고해주세요.

Start()함수를 기준으로 가장 깊은 Depth는 3입니다.

탭을 많이 사용하면 사용할수록 자연스럽게 우리의 코드는 "화면 밖"을 향해 나아갑니다.

우리의 목표는 "화면 내에 코드를 한눈에 볼 수 있도록 노력하는 것"이기 때문에 탭의 횟수가 너무 과도하거나 깊이가 너무 깊어지는 경우 잘못된 코딩 방법이 되는 것입니다.

그러면 어떻게 이 깊이를 줄여볼 수 있을까요?
바로 조건의 역을 이용하는 방법입니다. 바로 적용한 코드를 보시죠.

public class NewBehaviourScript : MonoBehaviour
{
    private float _timer = 0f;
    private bool _isInitData = true;

    // Start is called before the first frame update
    void Start()
    {
        if (_timer < 0f) /*_timer >= 0f*/
            return;

        // 내용
        // 내용
        // 내용
        // 내용
        // 내용

        if (_isInitData == false) /*_isInitData == true*/
            return;

        DoPlay();
    }


    private void DoPlay()
    {
        // 뭔가 실행
    }
}

 

무슨일이 일어났는지 아시겠나요? 위의 최대 코드 깊이는 1입니다. 코드 깊이가 2나 줄어들었죠.

 

코드 깊이가 1로 들어들었다.

조건문을 역으로 하고 즉시 실행을 중지함으로써 코드 깊이가 줄어드는 효과가 일어난 것입니다.
깊이가 줄어든만큼 코드를 화면 안으로 끌어들일 수 있을 것이며, 한눈에 볼 수 있는 코드로 정리 할 수 있게 됩니다.

"이미 화면 내에 잘 보이도록 정리되어 있는 코드"의 경우에는 이 방법을 사용할 필요가 없습니다.
과도한 Depth로 인한 화면 이탈이 발생한 코드의 경우에만 위와 같은 방법을 사용해보시기 바랍니다.