[안드로이드] 네트워크/JSON

dada·2021년 9월 28일
0

Android

목록 보기
10/24

✅네트워크

  • Server-Client(안드로이드 앱)에서 Server와 통신하는 네트워크 개념 살펴볼 것
  • 지금까지 sharedPreference를 통해 Local DB를 사용했지만 한계 존재
    • 동기화가 어려움
    • 사용자간 데이터 상호작용 불가

✅서버와 통신하는 방법

  • 해당 url로 연결함: url을 통해 요청을 보냄
  • 요청을 보낼 때 추가정보를 넣는 경우(intent의 putintextra처럼)가 있는데, 이때도 url형식에 추가정보를 넣어서 보냄
    • client를 구분하기 위한 인증정보를 보내는 경우
    • client의 데이터를 보내는 경우=>JSON형식을 사용해서 데이터를 보냄
      서버로부터 이미지 등의 데이터를 받을 수도 있지만 JSON형식의 데이터를 받을 수 있고 웹은 HTML형식으로 받을 수 있지만 앱은 안돼서 JSON형식으로 받아야됨(보통 서버랑 통신시 JSON으로 통신 많이함)

✅JSON 기본 개념

~JSON Response~
{ "Movies" : [
    {
        "title" : "미션임파서블",
        "grade" : "15세 관람가",
        "category" : "액션"
    },
    {
        "title" : "어벤져스",
        "grade" : "12세 관람가",
        "category" : "액션"
    },
    {
        "title" : "범죄도시",
        "grade" : "19세 관람가",
        "category" : "범죄/스릴러"
    },
    {
        "title" : "아저씨"
        "grade" : "19세 관람가"
        "category" : "범죄/스릴러"
    }
]
} 

  • []는 list고 {}은 객체고 코드블럭 안은 객체 표현식임

  • JSON은 ""면 문자열이고 ""없으면 문자임 프론트엔드 개발자는 해당 숫자의 타입을 알 수 없고 서버개발자의 API문서를 통해 알 수 있음(필드의 의미 등..)

  • json은 JavaScript Object Notation의 약자로 데이터를 구조적으로 표현하기 위한 일종의 포맷(Format)으로 네트워크를 통해 데이터를 주고받을 때 사용되는 경량의 데이터 형식을 의미.

  • Json은 name-value 형태의 쌍으로 이루어져 있으며 name과 value는 :으로 연결. name은 String이기 때문에 반드시 큰따옴표("")로 묶어줘야 하며 value는 String형 데이터일 때 큰 따옴표("")로 묶어줌. 각 데이터 쌍들의 구분은 쉼표(,)를 사용하여 구분.

{
"students" : ["김철수", {"전공" : ["프로그래밍", "영어"]}]
}

  • Json에서 객체(Object)의 시작은 {} 중괄호를 사용하고 배열은 [] 대괄호를 사용. 위 Json 형태를 살펴보면 {} 안에 name:value 쌍으로 이루어진 데이터가 들어감. (객체 {} 안에는 반드시 name:value 쌍이 들어감. ) students와 쌍을 이루는 value는 대괄호를 사용하여 배열이 들어감. 배열의 각 요소는 쉼표(,)를 통해 구분되며 각 요소는 마찬가지로 객체가 오거나 배열 또는 일반적인 String과 같은 타입이 들어갈 수 있음.

  • 가장 먼저 { 를 시작으로 하여 객체가 시작된다는 것을 알려주고 Movies와 쌍으로 value 타입은 배열이 들어감. Movies의 value에 해당하는 배열은 총 4개의 요소를 가지며 각 요소는 {}로 이루어진 객체 타입의 데이터를 가지고 있음. 각 배열의 요소 {} 안에는 한 개의 영화 정보를 담기 위한 name:value 쌍으로 이루어진 객체로 이루어져 있음.

✅JSON Parsing

  • Parsing 은 구문분석이란 뜻.
  • JSON Parsing이란, JSON 객체를 가져다가 우리 화면에 그려줘야 하는데 JSON을 코틀린이나 자바가 이해할 수 있게 변형하는 과정을 의미
  • Serializable(직렬화)
    • 자바 시스템 내부에서 사용되는 object를 외부에서 사용할 수 있도록 byte형태로 데이터를 바꾸는 것
    • 꼬치에 id,name..데이터를 꼬치에 꽂아서 가져온 다음에 코틀린이나 자바가 이해할 수 있는 틀(class)에다가 하나씩 빼서 넣어주기
    • 하단 코드처럼 class를 만들어주고 JSON의 key들을 파라미터의 변수명으로 지정해주면 변수명과 일치하는 key의 value값들이 각 변수명에 맞게 들어감. 즉 class의 생성자에 값이 다 세팅됨! 결국 우린 JSON객체들을 받을 수 있는 틀(class)을 만들어주면 됨
  class Person(
  var id:Int?=null
  var name:String?=null
  var age:Int?=null
  var intro:String?=null)
  

참고: https://lktprogrammer.tistory.com/175

profile
'왜?'라는 물음을 해결하며 마지막 개념까지 공부합니다✍

0개의 댓글

관련 채용 정보