녕로그
Home
  • 분류 전체보기 (79)
    • 강화학습 (0)
    • NLP (7)
    • 읽어본 논문들 (1)
    • 개발 (67)
      • 개인 프로젝트 (5)
      • 오류조치 및 팁 (10)
      • Flutter (2)
      • 2022-하계모각코 (12)
      • 2022-동계모각코 (12)
      • 2023-동계모각코 (25)
    • 잡담, 생각 (4)
Home
  • 분류 전체보기 (79)
    • 강화학습 (0)
    • NLP (7)
    • 읽어본 논문들 (1)
    • 개발 (67)
      • 개인 프로젝트 (5)
      • 오류조치 및 팁 (10)
      • Flutter (2)
      • 2022-하계모각코 (12)
      • 2022-동계모각코 (12)
      • 2023-동계모각코 (25)
    • 잡담, 생각 (4)
블로그 내 검색

녕로그

App 개발, 머신러닝을 공부하는 블로그입니다.

  • 개발/오류조치 및 팁

    간단한 객체 직렬화 Serialization 방법 (인터페이스 구현 X)

    2022. 2. 18.

    by. 안녕진

    개인 공부 목적으로 올바르지 않은 정보가 있을 수 있습니다. 댓글로 지적해주시면 감사드리겠습니다.

    직렬화?

    앱이나 프로그램을 개발할 때, 객체(Object)들을 그대로 파일로 옮기려면 "직렬화"를 해야한다.

    User라는 클래스를 예시로 들어보면

    User {
        String name;
        int age;
        String id;
        String pw;
    
        User({required this.name, required this.age, required this.id, required this.pw});
    }
    
    User person1 = User(name: "안형진", age: 23, id: "myId", pw: "myPw");

    이 상황에서 person1을 파일에 저장하려면 외부 파일에 저장될 수 있도록 User라는 객체의 형태가 아닌, byte형태로 데이터를 전송해야 한다.
    byte형태의 변환을 직렬화라고 하는데, byte형태로 직렬화 한 데이터를 다시 읽어서 객체의 형태로 변환하는 것을 역직렬화라고 한다.

    1학년 때 배웠던 Java에서는 Serialiable interface를 구현해서 직렬화를 했는데,
    dart에서 Serializable같은 게 있는지 찾아봤더니, 무슨 라이브러리를 설치하라고 해서 그냥 간단하게 구현해봤다.
    비슷한 방식으로 다른 언어에서도 구현할 수 있을 것이다.

    Json형태의 String으로 반환하도록 했다.

    직렬화 메소드

    String toJson() {
        return jsonEncode({ // Map(파이썬의 dict)자료형을 String 자료형으로 변환해주는 메소드
            'name': this.name,
            'age': this.age,
            'id': this.id,
            'pw': this.pw,
        });
    }

    역직렬화 메소드

    // 어느 한 유저객체의 메소드가 아니고,
    // User라는 클래스에서 사용하여 User를 반환할 메소드이므로 static 키워드를 사용했다.
    static User fromJson(String jsonData) {
        Map userData = jsonDecode(jsonData); // json String을 Map자료형으로 변환
        return User(
            'name': userData['name'],
            'age': userData['age'],
            'id': userData['id'],
            'pw': userData['pw'],
        );
    }

    한계

    예시에서는 String, int 정도만 쓰여서, 간단했다.
    하지만 User가 만약 Account라는 또 다른 클래스의 객체를 필드로 가져야 한다면,
    혹은 List 형태의 어떤 필드를 가진다면,
    그 필드에 대한 직렬화도 또 진행해줘야 하기 때문에 이 방식은 정말 간단한 프로젝트에서만 사용하는 게 좋은 것 같다.

    저작자표시 (새창열림)

    '개발 > 오류조치 및 팁' 카테고리의 다른 글

    [C언어] main 함수는 도대체 return을 왜 하는 걸까?  (0) 2022.03.31
    Android Studio virtual device (AVD)가 먹통인 경우  (0) 2022.02.27
    Enumerable class (List 등) 원하는 값 필터링 방법  (0) 2022.02.16
    JSON.parse() 메소드에서 발생하는 Unexpected token 오류  (0) 2022.02.07
    AndroidStudio 에뮬레이터에서 앱 실행시 [INSTALL_FAILED_INSUFFICIENT_STORAGE] 오류  (0) 2022.02.03

    댓글

    관련글

    • [C언어] main 함수는 도대체 return을 왜 하는 걸까? 2022.03.31
    • Android Studio virtual device (AVD)가 먹통인 경우 2022.02.27
    • Enumerable class (List 등) 원하는 값 필터링 방법 2022.02.16
    • JSON.parse() 메소드에서 발생하는 Unexpected token 오류 2022.02.07
    맨 위로
전체 글 보기
  • Github
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
안녕진

티스토리툴바