광어네 맛집

[Objective C] Static Method & Overloading 본문

Objective-C [레거시 뿌수기!]/Objective-C

[Objective C] Static Method & Overloading

Lautner Jacob 2022. 9. 30. 10:27
728x90
반응형

지금 잘못되어 있는 로직 변경이랑 회사 이슈 때문에

요즘 글 쓸 시간도 없는 ㅠㅠ

 

무튼 이번 포스팅은 Objective C 레거씨 코드 뿌시기!

상황 : BaseViewController를 모든 ViewController 가 상속받고

BaseViewController 안에는 화면 이동 메서드를 넣어두고 이동할 때마다 사용함

->

리펙토링 : Transfer + Utils 를 추가하여 Class method로 리펙토링

 


 

BaseViewController 를 상속받아 사용하는 게 나쁜게 아니지만 

해당 프로젝트에서는 중복코드도 많고, 쓰지 않는  BaseViewController 메서드를 굳이 받아야하나?

라고 항상 의문이 생겼었다!

 

대충 이전 개발자 분의 의도는 알겠으나 Static Method 로 만들면 훨씬 좋을 것 같아 리펙토링을 시작했다

리펙토링을 하면서 두가지 문제점이 있었는데

문제 1. 불필요한 메서드 상속

문제 2. 데이터를 전역에서 사용하기 위해 UserDefault 에 저장 ( + 홈 화면에서 같은 API를 7번 호출.. )

위에 문제점들 중 하나하나 어떻게 뜯었는지 회고하고자...

 


 

문제 1. 불필요한 메서드 상속

우선 NSObject 로 Transfer + Utils 파일을 하나 만들고 BaseViewController 에 있는 메서드를 Static 으로 변경했다

Swift 에서는 static func methodName ~ 이런식으로 작성한다면 Objective C도 간단하다

( 메서드명이나 파일 이름은 간단히 쓴거니 넘어가유ㅎ )

// 헤더 파일
#import <Foundation/Foundation.h>

@interface Transfer : NSObject
+ (BOOL)isTrue;
+ (void)moveToViewController:(Service)name;
@end
// 메인 파일
#import "Transfer.h"

@implementation Transfer
+ (BOOL)isTrue {
   ...
}

+ (void)moveToViewController:(Service)name {
   ...
}
@end

 

이렇게 사용하면 #import 만 해주면 Static Method로 사용하실 수 있습니다!

[Transfer isTrue];

간단하게 해결!

 


 

문제 2. 데이터를 전역에서 사용하기 위해 UserDefault 에 저장

이거는 어떤 프로젝트인지 따라서 다를 수도 있지만 일단 지금 프로젝트에서는

서비스 별 실시간 갱신이 가능해야해서 어차피 통신할 네트워크면 그냥 method 파라미터를 하나 더 받기로 했다

네트워크가 오면 그 데이터는 가공하지 않고 그대로 가지고 있으며

가공은 Method 안에서만 실행한다 라는 생각을 중점으로 리펙토링을 진행했다

 

그래서 단순히 아래처럼 하는 게 아니라

+ (void)moveToViewController:(Service)name {
   ...
}

+ (void)moveToViewController:(Service)name networkData:(NSDicationary)data {
   ...
}

 

이렇게 변경해주었다!

그리고 7번 쏘는 통신은 4개로 줄였지만... 남겨진 주석을 참고하면 어떤게 안되어 이렇게 했다라는데

믿을 수 없는 주석이라 나중에 테스트해보고 추가 수정할 계획이다

 

이렇게 리펙토링을 하면서 사이드 이펙트를 고려 안할 수가 없는데

UserDefault 에 저장해두고 전역에서 쓰다보니

어디서 버그가 발생할지 몰라서 어쩔 수 없이 UserDefault 값을 계속 저장해두었다..

이건 서비스별 테스트와 Swift 컨버팅 작업을 하면서 조금씩 뜯어내야겠다!

 

이 글이 Objective C 레거시를 없애는데 도움이 되면 좋겠어요!

그럼 이만!

728x90
반응형