Retrofit의 사용 방법은 GET, POST, PUT, DELETE 상관없이 큰 틀은 동일하다.
우선 POST를 기준으로 사용 방법에 대해 설명하고, 나머지를 설명하겠다.
Retrofit retrofit = NetworkClient.getRetrofitClient(UserRegisterActivity.this);우선 사용할 API에 관련해서 인터페이스를 만든다.
기준은 User를 기준으로 API를 사용할 것이니 User로 만들자.

만들어진 API 인터페이스에 코드 작성
// 유저 관련 API
public interface UserApi {
// 회원 가입 API
@POST("/user/create") // 1. 경로 설정
//리턴타입 함수이름(파라미터)
// 저장할 공간의 JSON 클래스가 필요하다. 따로 클래스를 만들자.
Call<UserRes> register(@Body User user);
//서버로 응답받는 데이터를 리턴타입으로 설정한다. Class를 만들자.
// POST / GET 등 경로 확인 후
// 1. 함수이름 설정
// 2. 필요한 클래스를 새로 만들던가 (User 처럼) 이미 있는 클래스에서 재활용가능하면 재활용 하자.
// 파라미터에 값 추가
// 3. 받아주는 리턴 (클래스 작성)
}
// API 패키지의 인터페이스 생성
// => api 폴더에서 인터페이스 작성
// 인터페이스 작성 후 API를 만들자.
UserApi api = retrofit.create(UserApi.class);Adapter를 이용해서 하나의 클래스를 만드는 것처럼 데이터를 주고 받을 Class를 만들어 준다.
JSON의 형태를 Class로 만들어서 사용한다고 생각하면 편하다.
JSON의 형태를 Class로 자동으로 변환해서 데이터를 주고 받는 형태이기 때문에 JSON의 형태안의 이름과 동일하게 설정해줘야한다.

public class User {
// API의 보내는 값들의 이름과 똑같이 설정하자.
private String email;
private String password;
private String nickname;
//네트워크 용 생성자도 만들어준다.
public User() {
}
// 회원가입용 생성자
public User(String email, String password, String nickname) {
this.email = email;
this.password = password;
this.nickname = nickname;
}
}
//api 요청 시작하면서 메모리 저장
Call<UserRes> call = api.register(user);
call.enqueue(new Callback<UserRes>() { //실제 요청하는 로직
@Override
public void onResponse(Call<UserRes> call, Response<UserRes> response) {
// 네트워크 응답에 성공했을때
// 에러를 응답받아도 API간의 통신은 성공적이긴 하다.
// 200 ok 확인
if(response.isSuccessful()){ //200이면 true로 적용된다.
}else if(response.code() == 400){ // 특정 통신 코드에 관련해서 처리하고 싶다면
// 400코드에 관련해서 처리를 하고 싶다.
}else{
// 200 ok가 아닐경우 실행
Log.i("MEMO APP", response.toString());
}
}
@Override
public void onFailure(Call<UserRes> call, Throwable t) {
// 네트워크 응답에 실패 했을때
// 요청 자체가 실패할때
}
});
@GET("/memo")
// 헤더에 값 추가하는 방법
Call<MemoList> getMemoList(@Header("Authorization") String token);
// key : value// 메모 삭제
@DELETE("/memo/{memoId}")
Call<ResultRes> delMemo(@Path("memoId") int memoId);
@GET("/board/follow")
Call<PostRes> getAllPost(@Header("Authorization") String token, @Query("offset") int offset, @Query("limit") int limit);
// "/board/follow?offset=offset&limit=limit"
// 메모 수정
@PUT("/memo/{memoId}") // 경로 설정에서 memoId의 id를 path로 추가할 수 잇음
Call<ResultRes> editMemo(@Header("Authorization") String token, @Body Memo memo, @Path("memoId") int memoId);