[내배캠/TIL(5/18)]자바 문법 뽀개기-네트워킹

손홍서·2022년 5월 18일
0

Java

목록 보기
6/11
post-thumbnail

day20(5/18) TIL

day20 느낀점

오늘은 조금 정신이 없는 하루였다. 그러다보니 집중을 제대로 하지 않은 것 같아 아쉬움이있다. 근데 뭐 이런 날도 있는거지... 내일은 2배로 열심히 해야겠다~^*^
오늘은 retrofit 라이브러리를 이용하여 api 통신하는 부분을 정리했다.

네트워킹

두 대 이상의 컴퓨터를 케이블 또는 인터넷으로 연결해 네트워크를 구성하는 것을 말함

Retrofit

Retrofit 라이브러리를 사용하면 API 접근을 보다 쉽게 만들어준다.
각종 에러 처리도 쉽고, 가독성도 좋다.


dependencies {
	...
    // retrofit
    implementation "com.squareup.retrofit2:retrofit:2.9.0"
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'com.google.code.gson:gson:2.9.0'
}

만약 최신 버전이 있다면 버전을 올려야한다.
gson은 retrofit으로 얻은 직렬화된 json 데이터를 자바 객체로 다시 직렬화 혹은 역 직렬화 해주는 자바 라이브러리이다. 이것은 서버에서 데이터를 받아오면서 또 그것을 자바에서 사용할 수 있도록 해주므로 필수이다.

클라이언트

public class RetrofitClient {
    //BASE_URL에는 변하지 않는 URL주소를 입력. 데이터의 위치에 따라 변하지 않는 주소
    private static final String BASE_URL = "https://reqres.in/";

    public static RetrofitService getApi() {
        return getInstance().create(RetrofitService.class);
    }//getInstance 메소드를 통해 인스턴스를 반환하게됩니다.

    private static Retrofit getInstance() {
        Gson gson = new GsonBuilder().setLenient().create(); //통신을 할 때 JSON 사용 및 해당 객체로의 파싱을 위해 생성
        return new Retrofit.Builder().baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();//서버에서는 JSON으로 응답하므로 우리는 build.gradle에 설정한 gson을 이용
    }
}

getInstance 메소드를 통하여 클래스의 instance를 생성한다. getApi에서 생성할 인터페이스인 RetrofitService까지 넣어주며 Retrofit 사용준비를 마친다.

서버로 요청할 인터페이스

public interface RetrofitService {
    @GET("/api/users/") //가져올 특정 api 주소
    Call<Object> getUsers(@Query("page") int page);
}
  • @GET("/api/users/"): 가져올 데이터 주소, 만약 Open API를 사용한다면 지침을 따르면 된다.

  • Call: 반환 받을 타입, 만약 특정 클래스로 정의해야한다면 dto 클래스를 정의해주고 이를 넣어주어야한다.

  • @Query: 쿼리를 이용하면, 특정 데이터만 가져올 수 있다. 쿼리문을 이용하면 ?와 함께 조건문이 생기면서 요청이 users?page=2 이런 형식으로 바뀜

  • +참고사항

    • @Path: 매개변수를 이용해 url 동적으로 업데이트 가능
    @GET("group/{id}/users")
    Call<List<User>> groupList(@Path("id") int groupId);
    • dto(Data Transfer Object): 계층 간 데이터 교환하기 위해 사용하는 객체
    • http://pojo.sodhanalibrary.com/ 를 이용하면 쉽게 dto클래스 정의 가능

  • 참고한 좋은 블로그들
    https://velog.io/@seokzoo/Retrofit-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0
    https://daldalhanstory.tistory.com/275

profile
Hello World!!

0개의 댓글