티스토리 뷰

일반적으로 통신을 하게 되면

서버에 무언가를 요청하거나 혹은 서버에서 값을 받아오게 되는데

 

이때 이를 도와주는 도구중 하나인 ObjectMapper 를 이야기해볼까합니다. 

(저의 경우 Alamofire 와 같이 사용합니다. Alamofire 는 다음에 포스트 할께요.)

 

사용하실 분들은 아래 부분을 Podfile에 추가해주세요.

pod 'ObjectMapper'

간략히 이야기하면 통신을 하기 전 혹은 통신을 한 후 데이터를 

쉽게 json형태로 표현하는 걸 도와준다고 생각하시면 됩니다. 

 

더 간단히 비유하면

서버에 보내는 택배상자를 포장하는 걸 도와주거나

서버에서 온 데이터를 보기좋게 만들어주는 역할을 한다고 생각하시면됩니다.

(필수는 아니에요)

 

예제를 보면 좀 더 간단히 알수있습니다.

(약간 변수 선언한다고 생각하시고 간단히 생각하면 쉬워요.)

 

* 시작 전에 아래 부분 추가해주세요.

import ObjectMapper

 

그럼 간단한 예를 만들어봅시다. 

예를 들어 서버에 로그인 정보를 보내야한다면 아래처럼 만들 수 있습니다. 

class ResquestLogin : Mappable{
    var userId : String? // 아이디
    var password : String? // 비밀번호
    var appVersion : String? // 앱 버전 정보
    
    required init?(map: Map) {
    }
    
    func mapping(map: Map) {
        self.userId <- map["userId"]
        self.password <- map["password"]
        self.appVersion <- map["appVersion"]
    }
}

이걸 어떻게 사용하냐고요? 

쉽게 말하면 

[String:Any] -> ObjectMapperType

let userInfo = ResquestLogin(JSON: ["userId":"ididid","password":"pwpwpw","appVersion":"1.0.0"])

복잡해 보일 수 있지만 후에 복잡한 형식의 데이터를 주고 받을때는 유용합니다. 

 

아마 다음포스트에 이야기가 나올 것 같은데

 

Alamofire 로 통신을 만들면 파라미터(Parameters)를 주어진 형식 ([String: Any]) 타입으로 만들어 보내야 하는데

이 과정을 편하게 하기 위해 위 형식을 사용한다고 생각하시면 됩니다. 

 

무슨 소리냐고요?

Alamofire 파라미터 부분에 아래처럼 넣고 보내면 서버에 잘 전달된다는 겁니다. 

userInfo.toJSON() // 이런 식으로 전환이 가능하다는 의미입니다.

실제 통신 부분에 아래처럼 사용할 수 있다는 말입니다. 

(아래처럼 코드를 작성하면 해당 파라미터를 서버에 보내겠다는 의미입니다.)

// 해당 코드는 Alamofire 연관 코드입니다. 
//import Alamofire 가 필요로 합니다 (pod 설치 포함)
AF.request(.....,parameters: userInfo!.toJSON(),.....)
//앞 뒤로 들어가야하는 부분이 있지만 간략히 작성하면

 

그럼 받는 부분에서는 어떻게 쓴다는 걸까요?

 

간단히 생각하면 [String:Any]로 가져온 값을 

저희가 미리 만든 부분에 넣어 사용한다고 생각하시면 됩니다. 

 

예를 들면 아래처럼 말이죠 

(response 는 [String:Any] 타입입니다.)

 ObjectMapperType -> [String:Any] 

guard let responseData = Mapper<ResquestLogin>().map(JSON: response) else { return }

 위처럼 선언하시면 아래처럼 원하는 값만 쉽게 가져 올 수 있습니다.

responseData.password

아무래도 처음 보시는 분들이 보기에는 생소하기도 하고

왜 사용을 하는지 감이 잘 안 오실 수 있습니다.

 

실제로는 다른 부분들이랑 같이 사용하는 경우가 많은데 

ObjectMapper 만 따로 분류해서 봐서 더 그런 것 같네요.

 

그래서 다음에 올릴 Alamofire 편에서 한번 같이 사용되는 부분을 정리해 볼 생각입니다.

(해당 편은 내용을 길게 할지 짧게 할지 정하느라 시간이 좀 걸릴 것 같아요.)

 

그럼 오늘도 파이팅입니다.

댓글