레트로핏 사용.(java)


안드로이드 프로젝트 생성.


gradle dependencies setting.


app gradle.


dependencies {


    // 인터넷 연결 http 프로토콜

    // https://square.github.io/retrofit/

    // okhttp 를 포함하고 있다.

    implementation 'com.squareup.retrofit2:retrofit:2.5.0'


    // https://github.com/square/retrofit/tree/master/retrofit-converters/gson

    // gson 라이브러리를 포함하고 있다.

    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'


    // http 통신시 로그 보기위한 것.

    // https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

    // okhttp 를 포함하고 있다.

    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'



}

레트로핏을 사용할 기본 조건은 되었고.

레트로핏으로 통신을 할수있는 인터페이스 연결할 클래스 생성.

레트로핏은 http api를 인터페이스 형태로 사용한다.



public class GithubUser {



    private String login;

    private String url;

    private String name;

    private String location;

    private String repos_url;


    public String getLogin() {

        return login;

    }


    public void setLogin(String login) {

        this.login = login;

    }


    public String getUrl() {

        return url;

    }


    public void setUrl(String url) {

        this.url = url;

    }


    public String getName() {

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }


    public String getLocation() {

        return location;

    }


    public void setLocation(String location) {

        this.location = location;

    }


    public String getRepos_url() {

        return repos_url;

    }


    public void setRepos_url(String repos_url) {

        this.repos_url = repos_url;

    }


    @Override

    public String toString() {

        return "login :" + login + ", url :" + url + ", name :" + name + ", location : " + location + ", repos_url :" + repos_url;

    }

}




public class GithubUserRepository {


    private String name;

    private String html_url;

    private String language;


    public String getName() {

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }


    public String getHtml_url() {

        return html_url;

    }


    public void setHtml_url(String html_url) {

        this.html_url = html_url;

    }


    public String getLanguage() {

        return language;

    }


    public void setLanguage(String language) {

        this.language = language;

    }



    @Override

    public String toString() {

        return "name : " + name + ", html_url : " + html_url + ", language : " + language;

    }

}





public interface GithubService {


    @GET("users/{user}")

    Call<GithubUser> getGithubUser(@Path("user") String userName);


    @GET("users/{user}/repos")

    Call<List<GithubUserRepository>> getGithubUserRepository(@Path("user") String userName);

}




ApiConnection 클래스 생성.

실제 통신을 담당할 retrofit 객체를 생성한다.


public class ApiConnection {


    private Retrofit retrofit;


    private final String baseUrl = "https://api.github.com";


    /**

     * 생성자.

     */

    private ApiConnection() {


        OkHttpClient httpClient = new OkHttpClient.Builder()

                .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))

                .build();


        this.retrofit = new Retrofit.Builder()

                .baseUrl(baseUrl)

                // 내려받는 데이터를 gson 형식으로 데이터 변환

                .addConverterFactory(GsonConverterFactory.create())

                .client(httpClient)

                .build();

    }

        /**

     * 2. 싱글턴 패턴 구현.

     */

    private static final ApiConnection INSTANCE = new ApiConnection();


    public static ApiConnection getInstance() {

        return INSTANCE;

    }


    /**

     * interface  리턴.

     */

    public GithubService getRetrofitService() {

        return retrofit.create(GithubService.class);

    }

}





    MainActivity 에서


    void connection_01() {


        Call<GithubUser> result = ApiConnection.getInstance().getRetrofitService().getGithubUser("bearkinf");


        result.enqueue(new Callback<GithubUser>() {

            @Override

            public void onResponse(Call<GithubUser> call, Response<GithubUser> response) {


                Log.w("LOG","GithubUser : " + response.body());

            }


            @Override

            public void onFailure(Call<GithubUser> call, Throwable t) {


            }

        });

    }



oncreate()에서 함수를 호출하면 깃허브에서 내용을 가져온다.






레트로핏을 이용한 통신 프로젝트에 RxJava 넣기..



라이브러리 추가.



dependencies {

    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation 'com.android.support:appcompat-v7:28.0.0'

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

    implementation 'com.android.support:support-v4:28.0.0'

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'


    //로그켓 .

    implementation 'com.github.bearkinf:AndroidLogPrintUtil_Java:1.1.1'


    // 인터페이스를 통해 인터넷 연결을 가지고 있다.

    // https://square.github.io/retrofit/

    implementation 'com.squareup.retrofit2:retrofit:2.5.0'

    // https://github.com/square/retrofit/tree/master/retrofit-converters/gson

    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

    // http 통신시 로그 보기위한 것.

    // https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'


    // Rxjava 타입을 지원한다.

    // https://github.com/square/retrofit/tree/master/retrofit-adapters/rxjava2

    // 자체적으로 RxJava 라이브러리를 가지고 있다.(최신 버전은 아님.)

    // adapter-rxjava2 내부적으로 rxjava를 참조하나, 버그가 수정된 최신버전의 rxjava를 명확히 정의하여 해당 library를 사용하게 하도록한다.

    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'


    // https://github.com/ReactiveX/RxJava

    // 각각의 라이브러리가 RxJava를 참조하나 최신 라이브러리를 지정한다.

    // rxandroid 내부적으로 rxjava를 참조하나, 버그가 수정된 최신버전의 rxjava를 명확히 정의하여 해당 library를 사용하게 하도록한다.

    implementation "io.reactivex.rxjava2:rxjava:2.2.6"

    // https://github.com/ReactiveX/RxAndroid 스케줄러 관리 (쓰레드 관리

    // 자체적으로 RxJava 라이브러리를 가지고 있다.(최신 버전은 아님.)

    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'


}




레트로핏 인터페이스에 RxJava 추가.

public interface GithubService {


    @GET("users/{user}")

    Call<GithubUser> getGithubUser(@Path("user") String userName);



    @GET("users/{user}/repos")

    Call<List<GithubUserRepository>> getGithubUserRepository(@Path("user") String userName);



    //RxJava 용 .Observable

    @GET("users/{user}")

    Observable<GithubUser> getGithubUser2(@Path("user") String userName);



    @GET("users/{user}/repos")

    Flowable<List<GithubUserRepository>> getGithubUserRepository2(@Path("user") String userName);


}



레트로핏 객체에 RxJava 를 사용하기 위해 아답터 추가.


public class ApiConnection {


    private Retrofit retrofit;


    private final String baseUrl = "https://api.github.com";


    /**

     * 생성자.

     */

    private ApiConnection() {


        OkHttpClient httpClient = new OkHttpClient.Builder()

                .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))

                .build();


        this.retrofit = new Retrofit.Builder()

                .baseUrl(baseUrl)

                // 내려받는 데이터를 gson 형식으로 데이터 변환

                .addConverterFactory(GsonConverterFactory.create())

                // RxJava 를 사용하게되면 해당 아답터팩토리를 등록해야 한다.

                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())


                .client(httpClient)

                .build();

    }

        /**

     * 2. 싱글턴 패턴 구현.

     */

    private static final ApiConnection INSTANCE = new ApiConnection();


    public static ApiConnection getInstance() {

        return INSTANCE;

    }


    /**

     * interface  리턴.

     */

    public GithubService getRetrofitService() {

        return retrofit.create(GithubService.class);

    }

}


MainActivity에서 RxJava를 이용한 레트로핏 통신 코드 넣기.



    void connection_03() {


        /**

         * 람다식으로 사용을하려면 .

         *   compileOptions {

         *         sourceCompatibility JavaVersion.VERSION_1_8

         *         targetCompatibility JavaVersion.VERSION_1_8

         *   }

         *   넣어 주어야 한다.

         */

        LogPrintUtil.w("connection_03 start");

        ApiConnection.getInstance().getRetrofitService()

                .getGithubUser2("bearkinf")

                .subscribeOn(Schedulers.io())

                .observeOn(AndroidSchedulers.mainThread())

                .subscribe(githubUser -> {

                            LogPrintUtil.w("Observable    Data :" + githubUser);

                        }, throwable -> {


                        }

                );

    }


oncreate()에서 함수를 호출하면 깃허브에서 내용을 가져온다.




코틀린 버전은 코틀린 탭에서. 다시 작성.





코틀린 프로잭트 생성.


레트로핏 인터페이스 생성.

interface GithubService {



    @GET("users/{user}")

    fun getGithubUser(@Path("user") userName: String): Call<GithubUser>



    @GET("users/{user}/repos")

    fun getgithubUserRepository(@Path("user") userName: String): Observable<List<GithubUserRepository>>


}


레트로핏 객체 클래스 생성.

/**스테틱 클래스 생성.*/

object ApiConnection {


    private val BASE_URL = "https://api.gitHub.com"


    private val retrofit by lazy {

        val httpClient = OkHttpClient.Builder()

            .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))

            .build()


        Retrofit.Builder()

            .baseUrl(BASE_URL)

            .addConverterFactory(GsonConverterFactory.create())

            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())

            .client(httpClient)

            .build()

    }

    val getRetrofitService = retrofit.create(GithubService::class.java)

}


MainActivity 에서 oncreate 에 함수 적용.

    private fun retrofitConnection_01() {


        val getGithubUser = ApiConnection.getRetrofitService.getGithubUser("bearkinf")


        getGithubUser.enqueue(object : Callback<GithubUser> {


            override fun onFailure(call: Call<GithubUser>, t: Throwable) {

            }


            override fun onResponse(call: Call<GithubUser>, response: Response<GithubUser>) {


                LogPrintUtil.w("response : ${response.body()}")


            }

        })

    }


    private fun retrofitConnection_02() {



        ApiConnection.getRetrofitService

            .getgithubUserRepository("bearkinf")

            .subscribeOn(Schedulers.io())

            .observeOn(AndroidSchedulers.mainThread())


            .subscribe({


                LogPrintUtil.w("RxJava : $it")


            }, {


            })



    }





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

자바 제네릭  (0) 2018.09.18
자바 분기문(break, continue)  (0) 2018.08.14
자바 반복문  (0) 2018.08.09
자바 제어문  (0) 2018.08.03
자바 자료형 종류  (0) 2018.07.26

자바 제네릭 타입


단일 :

제네릭 타입은 타입을 파라미터(매개변수? 인자?)로 가지는 클래스와 인터페이스를 말한다. 


public class Box<T>{

private T t;

private T get(){return t}

private void set(T t){this.t = t}


}



복수 :

두개 이상의 멀티 타입 파라미터를 사용할 수 있는데, 각 타입 파마미터를 콤마로 구분한다.


public class Product<T, M>{


private T kind;

private M model;

public T getkind(){return this.kind;}

public M getModel(){return this.model;}


public void setKind(T kind ){ this.kind = kind;}

public void setModel(M model){this.model = model;}

}




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

Retrofit, RxJava, Android Project  (0) 2019.01.30
자바 분기문(break, continue)  (0) 2018.08.14
자바 반복문  (0) 2018.08.09
자바 제어문  (0) 2018.08.03
자바 자료형 종류  (0) 2018.07.26

자바 분기문



break 문


반복문이 종료되기전 break문을 만나면 반복문을 종료 시킨다


for (int i = 0; i < 10; i++) {

//0부터 9까지 출력을한다.

    System.out.println(i);

    

    //i가 5라면.

    if (i == 5) {

    // 반복문은 종료되고 

        break;

    }

    //0부터 5까지만 출력한다.

}


중첩된 반복문을 사용할 경우에는 마지막에 사용된 반복문을 종료 시킨다.


// 0부터 9까지 반복을 한다.

for (int i = 0; i < 10; i++) {


    //0부터 9까지 반복을 한다.

    for (int j = 0; j < 10; j++) {

    // i 변수를 출력한다.

        System.out.print(i);

        // i 와 j 가 같다면 

        if(i==j){

        // j 변수로 시작되는 두번째 반복문은 종료된다.

            break;

        }

    }

    // 줄바꿈

    System.out.println("");

}



반복문에 라벨을 지정하고

break 뒤에 라벨을 붙여주면 좀더 명확하게 종료시점을 확인할 수 있다.


first:

for (int i = 0; i < 10; i++) {

    second:

    for (int j = 0; j < 10; j++) {

        System.out.print(i);

        if (i == j) {

        // second 라벨을 가진 반복문을 종료한다.

            break second;

       }

    }

    System.out.println("");

}


continue 문


반복문이 continue를 만나면 다음 반복으로 넘어간다.



for (int i = 0; i < 10; i++) {

// i를 2로 나누어 0이 된다면.

    if (i % 2 == 0) {

    // 아래 구문을 실행하지 않고 다음 반복으로 넘어간다. 

    // 2,4,6,8 은 건너띔

       continue;

    }

    System.out.println(i);

}


해당 조건식을 만나는 경우 다음 반복으로 건너뛴다.



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

Retrofit, RxJava, Android Project  (0) 2019.01.30
자바 제네릭  (0) 2018.09.18
자바 반복문  (0) 2018.08.09
자바 제어문  (0) 2018.08.03
자바 자료형 종류  (0) 2018.07.26

자바 반복문




for 반복문


for(초기화; 조건식; 증감식){

반복할 코드.

}


for(int i = 0 ; i < 10 ; i++){

int total = temp + i;


System.out.println("합계는 " + total +" 입니다.");

}


합계는 (0부터 9까지 더한 수) 입니다.


초기화로 변수 i 값을 초기화 하고 증감식에 i 값을 증가시켜 조건식까지 값을 증가시켜 반복한다.

조건식에 변수 i값이 true 면 반복, false면 for문은 종료된다.




int 구구단수 = 2;

System.out.println(구구단수 + " 구구단");


for(int i = 1 ; i< 10 ; i++){


System.out.println(구구단수 +" x " + i  + " = " +(구구단수*i) );

}


간단한 구구단 출력 이다. 

i 값은 1부터 시작하여 10보다 작은 9까지 반복하고 종료되는데 

구구단수에 입력된 값과 i값을 곱하여 1부터 9까지의 값을 곱한것을 출력한 후 구구단을 종료한다.

조건식에서 i < 10 대신 i <= 10 으로 변경하면 i는 10까지 반복이 가능하다.




while 반복문


while(조건식){

반복할 코드

}


조건식에 true 일 경우 반복한다. 조건식에 false가 되면 반복은 종료된다.



int count = 0;


while(count < 10){

System.out.println("count는 " + count + " 입니다.");

// 만약 count를 증가시키는 코드가 없다면.

// count는 0이므로 무한 반복을 한다.

count++

}

반복의 상황을 직접 제어 해야 한다.



boolean end = true;

int i = 0 ;

while(end){


i++;


System.out.println(i +"는 증가했습니다.")

if(i == 100){

end = false;

System.out.println("반복문이 종료 되었습니다.")

}

}


조건식에 boolean 변수를 사용할수도 있다.




do{

최초 1회 실행되고 다음 조건식을 체크한다.

반복할 코드.


}while(조건식)



do{} 를 최초 실행한 다음 조건식을 확인하여 코드를 반복한다.



int i = 1;


do{


System.out.println()

// 변수를 조건식에 맞게 제어를 하지 않으면 무한 반복한다.

// i가 10이상일 경우  1회만 실행되고 종료되지만 10이하 일경우

// 조건에 맞게 제어를 해야 반복문을 끝낼수 있다.

i++;

}while(i < 10)




boolean end = true;

        

int i = 0;

do {

    System.out.println(i);

    

    if (i == 10) {

        end = false;

    }

    i++;

} while (end);


boolean 변수를 사용하여 종료될 시점을 정한다음 boolean 변수의 값을 변경하여 반복문을 종료한다.

반복문을 사용하기 적당한 예제는 숫자 맞추기 게임 이다.

입력되는 코드를 입력하여 do{} 위에 만들어진 난수와 비교하여 숫자 맞추기를 시도하고 몇번을 맞추었는지

체크 할수도 있다.




향상된 for문 (for each 문)

java 1.5 부터 지원 되며

배열 또는 컬렉션 사용.


for(대입받을 변수 정의 : 배열 또는 컬랙션){

코드

}



String[] arr = ["x", "y", "z", "1", "2", "3"]


for (String str : arr) {

System.out.println(" " + str);

}

배열 또는 컬렉션의 사이즈 만큼 반복하며 대입받을 변수는 반복될때마다 초기화 되고 해당 배열 또는 컬렉션 인텍스를 가진다.



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

Retrofit, RxJava, Android Project  (0) 2019.01.30
자바 제네릭  (0) 2018.09.18
자바 분기문(break, continue)  (0) 2018.08.14
자바 제어문  (0) 2018.08.03
자바 자료형 종류  (0) 2018.07.26

자바 제어문


제어문

if(조건식 == true 또는 false){ 코드 실행.}

: ()어떠한 조건식이 true 또는 false 일때  {  } 안에 코드를 수행한다.

예제

int count = 10;

// 만약 count 라는 변수가 10이 맞다면.

if(count == 10){

// 화면에 맞다는 문구를 출력한다.

System.out.println(count + "는 10이 맞습니다.");

}else{

// 화면에 맞지 않다는 문구를 출력한다.

System.out.println(count + "는 10이 아닙니다..");

}


if 문안에 또 if문을 사용할 수 있다. 중첩된 if문을 사용하여 조건을 더 확인할 수 있다.

int count = 10;

if(count >= 10){

//10보다 크거나 같다.

if(count ==10){

System.out.println(count +"는 10 입니다.");

}else{

System.out.println(count +"는 10보다 큰 수입니다.");

}

}else{

System.out.println(count +"는 10보다 작습니다.");

}



if문에 else if() 로 또다른 조건을 걸수가 있다. 

int count =10;

//인트 타입의 변수 count를 숫자 10과 비교하여 true이면  

if(count == 10){

// 화면에 문구를 출력합니다.

System.out.println(count +"는 10입니다.");

}

// 위 조건문에서 false로 내려오는경우 다시한번 조건문을 비교합니다.

// count가 10보다 큰 11이라면 위 if문에서 false가되고 

// 아래 else if 문에서 true이다.

else if( count > 10){

// count 가 10보다 크므로 해당 문구를 출력합니다.

System.out.println(count +"는 10보다 큰 수 입니다.");

}

// 마지막 else 문은 count 모든 조건에 맞지 않을때 이다.

// count가 10 이하의 수 라면 위 2개의 조건을 거치고 난 다음

// 마지막 else 문으로 해당 소스를 실행한다.

else{

// count 변수가 10보다 작은수 이면 화면에 문구를 출력합니다.

System.out.println(count +"는 10보다 작은 수 입니다.");

}

count가 10보다 작을때 마지막 else 문을 삭제하면 화면에 아무것도 출력하지 않는다.

if (count == 10) {

            System.out.println(count + "는 10입니다.");

        } else if (count > 10) {

            System.out.println(count + "는 10보다 큰 수 입니다.");

        }

//else {

// 실행되지 않는다. 이유는 모든 조건이 맞지 않을때 마지막 else문을 실행 하기 때문이다.

// 따라서 if 문 맨 아래 else가 있다면 그것이 실행되지만 

// else가 없다면 모든 조건이 맞지 않을때 어떠한 것도 실행되지 않는다.

    //}

switch() { case ..  }

switch(변수) {

case 변수:  

break;

default :

break;

}

입력 받은 변수를 확인하여 case 로 지정되어 있다면 지정된 case 문을 실행하고 없다면 default 문을 실행한다. 

case없고 default도 없다면 아무것도 실행되지 않는다.

switch 변수 값에는 정수형 또는 char 값 그리고 java 7에서는 String 타입의 변수도 넣을 수 있다.

다만 변수의 참조 타입이 모두 같아야 한다.

int month = 1;

switch(month){

case 1:

System.out.println("1월 입니다.")

break;

case 2:

System.out.println("2월 입니다.")

break;

case 3:

System.out.println("3월 입니다.")

break;

default:

System.out.println("1~12월 까지 인데 잘못 입력하셨습니다.")

break;

}

위 스위치 문은 if문으로 대체가 가능하다.

if(month==1){

System.out.println("1월 입니다.")

}else if(month==2){

System.out.println("2월 입니다.")

}else if(month==3){

System.out.println("3월 입니다.")

}else {

System.out.println("1~12월 까지 인데 잘못 입력하셨습니다.")

}

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

Retrofit, RxJava, Android Project  (0) 2019.01.30
자바 제네릭  (0) 2018.09.18
자바 분기문(break, continue)  (0) 2018.08.14
자바 반복문  (0) 2018.08.09
자바 자료형 종류  (0) 2018.07.26


자바 변수


자료형.

기본 자료형


논리형 : true와 false 중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다.

boolean = 1byte


문자형 : 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

char = 2byte


정수형 : 정수 값을 저장하는 데 사용된다.주로 사용되는 것은 int와 long이며, byte는 이진데이터를 다루는데

주로 사용되며, short는 c언어와의 호환을 위해서 추가하였다.

byte = 1byte

short = 2byte

int = 4byte

long = 8byte


실수형 :  실수 값을 저장하는데 사용된다. float와 double밖에 없다.

float = 4byte

double = 8byte


참조 자료형

new 를 사용하여 새로운 객체를 생성하는 클래스.(String은 기본자료형처럼 바로 대입하여 사용할 수 있다.)


String

class

interface 


변수의 초기화.


변수에는 항상 어떤 기본값이 들어간다.

변수에 직접 어떤값을 대입하거나 세터 메소드를 호출하지 않는 경우에도 기본값이 들어있다.


정수 = 0  (byte,short,int,long)

부동소스점 수 =  0.0  (float, double)

부울 = false (boolean)

레퍼런스 = null (String, 레퍼런스(참조형))



변수명(이름짓기)

개발자가 기본, 참조자료형을 사용하기 위한 이름을 지을 수 있다.


// 숫자.

int count;

// 이름.

String name; 

// 파일 사이즈.

int fileSize;

// 파일 이름.

String fileName;


변수명, 클래스명을 지을 때 규칙이 있다.

: 변수명은 숫자로 시작할 수 없다.

: 변수명에는 _와 $ 문자 외에 다른 특수문자를 사용할 수 없다.

: 자바의 키워드는 변수명으로 사용할 수 없다.

: 변수명을 정할때는 카멜표기법을 사용한다.(함수명을 정할때도 같다.)

  단어와 단어 사이를 대문자로 구분하는 방법으로 각 단어의 첫문자는 소문자로하고 다음문자는 대문자로 표기한다.

  <대표적인 사용처 : Method 이름:void speedUp(), 변수명 :speed>

: 변수를 상수로 지정할때는 변수명을 전체 대문자로 표기하며 단어가 연결될때는 _를 사용하여 표기한다.

  <대표적인 사용처 : 상수 : RESULT_OK>

: 클래스 명을 정할때는 파스칼표기법으로 하며, 클래스명은 모든 단어의 첫 문자를 대문자로 표기한다.

  <대표적인 사용처 : 클래스 : ClassName, SearchAdapter>

: 패키지, 이름, 예약어, 키워드 는 모든단어를 소문자로 표기한다.


: 그외 헝가리안 표기법이 있다. 타입+변수명으로 표기한다. 어떤 동작을 하는지 확인할 수 있다.

<대표적인 사용처 GUI(awt,swing) : txtName,iNumber,btnSend> 











참고] 자바 키워드

abstract  continue  for         new        switch

assert    default   goto        package    synchronized

boolean   do        if          private    this

break     double    implements  protected  throw

byte      else      import      public     throws

case      enum      instanceof  return     transient

catch     extends   int         short      try

char      final     interface   static     void

class     finally   long        strictfp   volatile

const     float     native      super      while


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

Retrofit, RxJava, Android Project  (0) 2019.01.30
자바 제네릭  (0) 2018.09.18
자바 분기문(break, continue)  (0) 2018.08.14
자바 반복문  (0) 2018.08.09
자바 제어문  (0) 2018.08.03

+ Recent posts