글 작성자: Doublsb

이제 더러운 코드를 정리할 때가 왔다.

최근에 마틴 파울러의 리팩터링을 구매했고, 읽기 시작했다. 다는 아니지만.

 

책의 '3장 : 코드에서 나는 악취'파트를 참조해서, 이상한 부분을 찾아 고쳤다.

대상은 DialogBase.cs와 DialogManager.cs이다.

 

오늘은 11시쯤 시작해서, 새벽까지 좀 오랫동안 작업했다.

 


#1 enum State의 기이한 이름

public enum State
{
    Show,
    Texting,
    WaitForInput,
    Wait,
    Hide
}

- WaitForInput과 Wait의 모호함

- Show와 Texting의 모호함

 

>> Show, Wait는 쓰이고 있지 않은 State였다. 해당 enum을 지우고 생각해 보았다.

실제로, State는 실행, 대기, 비활성화의 3개만 있어도 충분했다. 해당 부분을 다음과 같이 변경했다.

 

public enum State
{
    Active,
    Wait,
    Deactivate
}

 


#2 DialogText Class의 기이한 이름

 

- DialogText라는 이름의 모호함

: 이 클래스는 string으로 쓰인 Text를, DialogManager가 받아들일 수 있도록 DialogCommand로 변환하는 역할을 한다.

해당 클래스는 데이터 단위로 넘겨져 출력 메서드에서 사용된다.

 

>> DialogText보다는, DialogData로 명명하는 것이 적절한 듯 하여 변경했다.

 

- _originalText의 의미가 없음 >> 삭제


#3 DialogData Class에 있는 데이터 뭉치

 

1) DialogData Class

- Color, Size, OpenTagger, CloseTagger는 데이터 뭉치

>> 해당 내용은 텍스트의 표시 형식에 관한 내용이다. DialogFormat 클래스로 따로 추출해주었다.

 

하는 김에, DialogManager가 Color와 Size를 매번 검사하지 않아도 되도록 get/set을 사용했다.

 


#4 Show의 긴 매개변수 목록

 

많은 변경이 있었다. 기존에는 string, skipable, callback 등의 많은 데이터를 전달했다.

 

그러나 매개변수 목록이 길어지면 그 자체로 이해하기 어려우므로, DialogData와 Character를 전달하는 것으로 정했다.

또한 이 과정을 거쳐서, 기존에는 List 통째로 skip과 callback을 정했으나 이제는 List의 item 하나하나에서 정할 수 있게 되었다.

 

DialogData의 필드는 이렇게 정리했다.

 

 

생성자 또한 string, skip 여부, callback을 정할 수 있게끔 다듬었다.

 


음... 책을 읽어보니 아직 리팩터링을 할 수 있는 구문은 많은 듯 한데, 일단은 여기까지 하려고 한다.

다 읽고 나서야 완벽하게 수정할 수 있을 것 같다.

 

내일은 Activate할 때, 등장 애니메이션을 한번 작업해보자.

그리고 오브젝트를 프리팹화하여 사용자가 쉽게 에셋을 사용할 수 있도록 하겠다.

 

에셋 가이드라인은 아마 그 다음날 작성하겠지.

 

자, 그럼 오늘은 여기까지.

 

해당 커밋 보러가기

반응형