728x90

Android 앱 개발을 하면서 서버와 통신을 위해 네트워크 기능을 쓸 경우가 대다수이다.


기존 네트워크 기능을 위해 HttpURLConnection HttpClient (OS 6.0 부터 삭제) 등이 쓰여왔고, OS 3.0 (API 11) 이후에 NetworkOnMainThreadException 를 피하고자 Thread, AsyncTask 등을 사용하기도 했다.

그 후 여러 편의성을 제공하는 통신 라이브러리 들이 등장하였다. OkHttp, Volley (설명), Retrofit ... (라이브러리 비교) 


출처: http://nobase-dev.tistory.com/6



주요 역사


출처: http://pluu.github.io/blog/android/2016/12/25/android-network/





동기 vs 비동기

 http://jajubogi.tistory.com/14



HttpUrlConnection, Retrofit, OKHttp...?

이런 통신기능을 더쉽게 사용하기위해 여러 종류의 라이브러리들이 존재한다.

대표적으로 Android SDK에서 공식으로 지원했던 HttpUrlConnection (현재는 Deprecated된..) , 구글의 Volley , Square의 OKHttp , Retrofit 등이 있다. 


현재 HttpUrlConnection는 Deprecated되었고, 

그에따라서 HttpUrlConnection를 사용하던 Volley도 내부적으로는 OKHttp를 많이 사용한다.

Retrofit은 Okhttp를 더 쉽게 사용할수있게하는 라이브러리다 .

( OKHTTP의 래퍼클래스라고 생각하면된다. 내부적으로는 OKHTTP를 사용한다. ) 


출처: http://namjackson.tistory.com/26 




HttpUrlConnection

1. 안드로이드 AsyncTask를 이용한 HttpUrlConnection

출처: https://kutar37.tistory.com/101 [저장소]



2. 안드로이드 HTTPURLCONNECTION 한글 전송

출처: https://kutar37.tistory.com/81 [저장소]



OkHttp

될 때까지 안드로이드 #19 [22장 네트워크 통신-1 OkHttp] 

https://www.youtube.com/watch?v=oQKYII__vxc


https://goo.gl/eIXu9l

위의 Json형태의 데이터를 OkHttp를 이용해서 처리하는 방법



될 때까지 안드로이드 #20 [22장 네트워크 통신-2 Gson]

https://www.youtube.com/watch?v=wo2HWBHwMj0



HttpUrlConnection 은 Java 에 포함된 라이브러리이고 OkHttp 는 Square 사에서 만든 Http Client 입니다.
오픈소스이니 OkHttp github(https://github.com/square/okhttp) 에 가시면 소스를 보실 수 있습니다.
내부적으로 HttpUrlConnection 하고 소켓 통신을 사용하는 것 같은데 자세히 안 봐서 잘 모르겠네요.

Retrofit 은 Http 통신을 조금 더 편하게 구현하기 위해 만들어진 라이브러리 입니다.

v1 에서는 안드로이드 버전에 따라 Apache HttpClient 와 HttpUrlConnection 선택해서 사용하거나 별도의 Http Client 를 지정할 수 있었는데 v2 에서는 OkHttp 를 사용하는 것으로 알고 있습니다.


 

출처: https://okky.kr/article/386639









Reference

http://nobase-dev.tistory.com/6

http://pluu.github.io/blog/android/2016/12/25/android-network/

http://jajubogi.tistory.com/14

https://www.youtube.com/watch?v=oQKYII__vxc




728x90
728x90

1. Singleton Pattern이란?

 

- 싱글톤 패턴은 하나의 프로그램 내에서 하나의 객체만을 사용해야하는 상황에 주로 사용된다.

  (즉, 어플리케이션 전체 영역에서 하나의 클래스의 단 하나의 인스턴스를 생성하는 것)

   환경설정 관리 클래스나 커넥션 풀과 같이 pool 형태로 관리되는 클래스로 주로 공통클래스에 사용되는 것이 일반적이다.

 

 ex. 로그인 시 로그인한 사용자 정보를 처음에만 셋팅하는 UserData가 있다고 가정하자. 로그인 후, 로그아웃될 때까지 단 1번만 셋팅하면 되는 데이터인데, 이를 매번 사용할 때마다 새로운 UserData 객체로 생성하게 된다면, 자원 낭비 또는 참조하는 객체의 위치가 꼬이는 일이 발생할 수 있다.

 

2. Singleton 구현에서 주의 할 점

- 생성자를 private로 생성하여, 다른 외부 클래스에서 싱글톤 클래스를 new로 구성하지 못하게 하는 부분이다.

  싱글톤 클래스의 인스턴스를 타 클래스에서 사용하기 위해서는 getInstance()를 호출해야만 한다. 

 

- Java에서 singleton 멤버변수는 static 이어야한다는 것과 Singleton 클래스의 생성자는 private / protected 이어야한다는 것을 꼭 유념해야한다. private 일 경우는 결코 new 를 이용하여 인스턴스의 중복 생성을 방지하는 셈이기도 하나 상속이 되지 않는다는 단점이 있어 protected로 대게 선언한다.

 

 

 

Reference

http://mkil.tistory.com/199

http://tokisum.tistory.com/8

http://jeong-pro.tistory.com/86

728x90

'Dev > Java' 카테고리의 다른 글

RxJava 이해  (0) 2020.02.03
[Java] Java SE, EE, ME, FX의 차이  (0) 2019.10.16
[Java] Calendar 객체 사용시 'set' not working  (0) 2019.09.19
728x90


REST API란?


https://www.youtube.com/watch?v=80PbMwOquJs


https://meetup.toast.com/posts/92


http://bcho.tistory.com/953




728x90
728x90


RxAndroid



https://brunch.co.kr/@yudong/34


위의 링크를 따라하면서 모르는 것 찾아본 결과



1. JackOption?



https://developer.android.com/guide/platform/j8-jack?hl=ko


 Android는 Java 7 언어 기능 일체를 모두 지원하고, Java 8 언어 기능의 경우 버전에 따라 각각 다르게 부분적으로 지원함. 이 페이지에서는 사용할 수 있는 새로운 언어 기능, 이러한 기능을 사용할 프로젝트를 올바르게 구성하는 방법 및 발생할 수 있는 알려진 문제에 대해 설명합니다.

참고: Android용 앱을 개발할 때에는 Java 8 언어 기능을 사용하는 것이 가장 좋습니다. 프로젝트의 소스 및 대상 호환성 값을 Java 7로 유지할 수는 있지만, JDK 8을 사용하여 컴파일해야 합니다.

Java 8 언어 기능에 대한 지원 기능을 사용하려면 Jack이라는 새 컴파일러가 필요합니다. Jack은 Android Studio 2.1 이상 버전에서만 지원됩니다. 따라서 Java 8 언어 기능을 사용하려면 Android Studio 2.1을 사용하여 앱을 빌드해야 합니다.



그런데 따라서 해보니까 "Could not find method jackOptions() for arguments" 컴파일 에러가 났다.


https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html




Jack 툴체인은 지원 중단됩니다. 해당 프로젝트에서 Jack을 사용하는 경우 Android Studio의 기본 툴체인에 내장된 Java 8 지원을 사용하도록 마이그레이션해야 합니다. 

(...)

Jack을 비활성화하고 기본 툴체인으로 전환하려면 모듈의 build.gradle 파일에서 jackOptions 블록을 제거하기만 하면 됩니다.

android {
   
...
    defaultConfig
{
       
...
       
// Remove this block.
        jackOptions
{
            enabled
true
           
...
       
}
   
}

   
// Keep the following configuration in order to target Java 8.
    compileOptions
{
        sourceCompatibility
JavaVersion.VERSION_1_8
        targetCompatibility
JavaVersion.VERSION_1_8
   
}

} 



jackOptions 부분만 제거하니 에러가 사라짐



-------------------------------------------------------------------------------------------------------------------


https://brunch.co.kr/@yudong/35



* for문 없이 반복적인 동작 수행 가능 (이에 대한 방법은 다양)


- range(X,N)  (X부터 N까지)

- map()은 여러개 추가 가능

- subscribe()는 마지막 결과를 출력하기 위함


*람다표현식의 인자 생략 가능

원래: subscribe(text -> guguResult.append(text)) 

생략: subscribe(guguResult::append)



* Java는 객체지향 언어이지, 함수형 언어가 아님.

 Java8에서 람다표현식 같은 함수형 프로그래밍 도구가 추가 되었음




-------------------------------------------------------------------------------------------------------------------

https://brunch.co.kr/@yudong/36





728x90

'Dev > Android' 카테고리의 다른 글

[Andorid] Resource(R.id / R.drawable) 를 문자열로 가져오기  (0) 2019.04.26
[Android] Network 기능 구현 관련  (0) 2018.10.02
[Android] RxAndroid & RxJava  (0) 2018.10.01
Fabric - Crashlytics  (0) 2018.08.10
Listview  (0) 2018.07.03

+ Recent posts