본문 바로가기

Development/Javascript

[Typescript] 간단하게 리팩토링 한 내용

처음엔 단순하게 string을 enum으로 변경하는 함수로 개발했었다.

private convertTriggerFromDb( webhookInfo: WebhookEntity ) {
	if( !_.isEmpty( webhookInfo.triggerStr ) ) {
		return trigger = webhookInfo.triggerStr.split( ',' ).map( v => IncomingTriggerType[ v ] );
	}
	return undefined;
}

그러다 타입이 늘어나 이렇게 되어버렸다.

private convertTriggerFromDb( webhookInfo: WebhookEntity ) {
	if( !_.isEmpty( webhookInfo.triggerStr ) ) {
		if( webhookInfo.type === WebHookType.INCOMING ) {
			return webhookInfo.triggerStr.split( ',' ).map( v => IncomingTriggerType[ v ] );
		} else {
			return webhookInfo.triggerStr.split( ',' ).map( v => OutgoingTriggerTypeValues[ v ] );
		}
	}
	return undefined;
}

마음에 안 드는 중복코드가 생겨서 이렇게 바꿨다.

private convertTriggerFromDb( webhookInfo: WebhookEntity ) {
	if( !_.isEmpty( webhookInfo.triggerStr ) ) {
		let trigger = webhookInfo.triggerStr.split( ',' );
		if( webhookInfo.type === WebHookType.INCOMING ) {
			trigger = trigger.map( v => IncomingTriggerType[ v ] );
		} else {
			trigger = trigger.map( v => OutgoingTriggerTypeValues[ v ] );
		}
		return trigger;
	}
	return undefined;
}

그런데 이것도 마음에 안 들었다. 그래서 이렇게 바꿨다.

private convertTriggerFromDb( webhookInfo: WebhookEntity ) {
	if( !_.isEmpty( webhookInfo.triggerStr ) ) {
		let triggerType: typeof IncomingTriggerType | typeof OutgoingTriggerTypeValues = IncomingTriggerType;
		if( webhookInfo.type !== WebHookType.INCOMING ) {
			triggerType = OutgoingTriggerTypeValues;
		}
		return webhookInfo.triggerStr.split( ',' ).map( v => triggerType[ v ] );
	}
	return undefined;
}

근데 이것도 맘에 안 든다ㅜㅜ 그래서 파라미터도 바꿨다.

private convertTriggerFromDb( type: WebHookType, triggerStr: string ) {
	if( !_.isEmpty( triggerStr ) ) {
		let triggerType: typeof IncomingTriggerType | typeof OutgoingTriggerTypeValues = IncomingTriggerType;
		if( type !== WebHookType.INCOMING ) {
			triggerType = OutgoingTriggerTypeValues;
		}
		return triggerStr.split( ',' ).map( v => triggerType[ v ] );
	}
	return undefined;
}

그래도 맘에 안 듬.. 그리고 최종..

private convertTriggerFromDb( type: WebHookType, triggerStr: string ) {
	if( _.isEmpty( triggerStr ) ) {
		return undefined;
	}
    
	let triggerType: typeof IncomingTriggerType | typeof OutgoingTriggerTypeValues = IncomingTriggerType;
	if( type !== WebHookType.INCOMING ) {
		triggerType = OutgoingTriggerTypeValues;
	}
	return triggerStr.split( ',' ).map( v => triggerType[ v ] );
}

개인적으로 삼항 연산자를 별로 안 좋아해서 변수 선언과 if 문을 한 줄로 줄일 수 있긴 한데 그렇게 하지 않았다. 그럼 아마 이게 최종이지 않을까 싶다. 더 고치면 더 달아야지 ㅎ