안드로이드는 임베디드 데이터베이스로 개발된 SQLite를 가지고 있다. 이는 표준 SQL을 지원하여 기존에 사용하던 SQL을 그대로 사용할 수 있다는 매우 큰 장점을 가지고 있다. 우선 데이터베이스를 구성하려면 Context 객체가 제공하는 public abstract SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) public abstract boolean deleteDatabase(String name) 메서드를 호출하여 생성, 혹은 삭제할 수 있다. 이 때, openOrCreateDatabase의 3번째 파라미터는 null이 아닌 객체를 지정할 경우, 쿼리의 결과 값으로 반환..
웹서버에 요청하고 응답을 받을 때는 직전 포스팅과 같이 HttpURL Connection 객체를 사용할 수 있지만 요청과 응답에 필요한 코드의 양도 많으며 Handler와 Thread 를 사용하기 때문에 이에 대한 개념이 부족하면 다소 어려울 수 있다. 이런 문제를 해결하기 위해 사용하는 여러 라이브러리가 존재하는데, 그 중 가장 많이 사용되는 라이브러리는 Volley이다. Volley는 Request 객체를 만들고 이 Request 객체를 Request Queue에 넣어주기만 하면 알아서 웹서버에 요청을 하고 응답을 받는 과정을 진행한다. 이 모든 과정을 메인 스레드에서 처리하기 때문에 따로 스레드를 생성할 필요도 없고, 메인에 있는 객체를 다루기 위한 핸들러를 구성할 필요도 없다. 바로 한번 확인해보..
HTTP로 웹 서버에 접속하여 특정 요청을 보내거나 응답을 보내는 동작의 경우, 표준 자바의 방식을 그대로 사용할 수 있다. 자바에서 HTTP 클라이언트를 만드는 가장 간단한 방법은 URL 객체를 만들고 이 객체의 openConnection() 메서드를 호출하여 HttpURLConnection객체를 만드는 것이다. 어려운 내용은 없으니 바로 한번 예제를 확인해보자. ◎MainActivity.java package com.example.samplehttp; import android.os.Handler; import android.os.Looper; import android.view.View; import android.widget.Button; import android.widget.EditText; ..
여러 이미지를 연속해서 바꿔가며 애니메이션 효과를 만들고 싶을 때 스레드를 사용하는 경우가 많다. 특히 표준 자바에서 게임 들에 사용하는 대부분의 애니메이션 효과는 스레드를 사용하므로 기존의 앱 소스를 안드로이드용으로 포팅하려고 할 때는 이미 만들어두었던 코드와 같은 방식을 사용하는 것이 가장 쉽기 때문에 많이 사용한다. 바로 예제를 한번 확인해보자. ImageView를 하나 생성하고, 버튼을 눌렀을 때 스레드가 지속적으로 Runnable객체를 사용하여 ImageView의 이미지를 바꿔주는 간단한 예제이다. ◎MainActivity.java package com.example.samplethreadanimation; import android.content.res.Resources; import andr..
직전에 확인했던 메시지 객체를 메인 스레드에서 별도의 스레드로 전송하는 코드를 확인해보면, 생각보다 복잡하다는 느낌이 든다. 핸들러를 사용하지 않고 좀 더 간단하게 동일한 기능을 수행하도록 Thread 코드를 작성할 수도 있는데, AsyncTask 객체를 사용하면 된다. AsyncTask 클래스를 상속하여 새로운 클래스를 만들면 그 안에 스레드를 위한 코드와 UI 접근 코드를 함께 넣을 수 있다. AsyncTaSK 객체를 만들고 excute() 메서드를 실행하면 이 객체는 정의된 백그라운드 작업을 수행하고 필요한 경우에 그 결과를 메이느스레들에서 실행하기 때문에 UI 객체에 접근하는 데 문제가 없다. 다음은 AsyncTask를 이용한 작업 방식을 그림으로 나타낸 것이다. AsyncTask 에 정의된 주요..
새로 생성한 스레드에서 메인 스레드로 데이터를 넘기는 건 Handler 객체의 메시지 큐와 Runnable 객체를 사용하여 실습해봤지만, 그 반대의 경우도 가능하다. 메인 스레드에서 변수를 선언하고 별도의 스레드가 그 값을 읽어가는 방법을 사용할 수 있다. 하지만 별도의 스레드가 관리하는 동일한 객체를 여러 스레드가 접근할 경우 예외가 발생할 수 있기 때문에 별도의 스레드 안에 들어있는 메시지 큐를 이용해 순서대로 접근하도록 만들어야 한다. 핸들러는 메시지 큐를 Looper를 사용하여 처리한다. Looper는 메시지 큐에 들어오는 메시지를 지속적으로 확인하면서 하나씩 처리하게 된다. 바로 한번 확인해보자. ◎MainActivity.java package com.example.samplelooper; im..
Runnable 객체를 이용하여 메인 스레드를 제어할 때, post() 메서드가 아닌 postDelayed() 를 사용하여 딜레이를 설정할 수 있다. 그렇게 어려운 내용은 아니니, 바로 예제로 넘어가자. ◎MainActivity.java package com.example.sampledelayed; import android.content.DialogInterface; import android.os.Handler; import android.os.Looper; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; import..
직전 포스팅에서 스레드와 핸들러를 이용하여 새 스레드에서 메인 스레드를 제어할 수 있는 방법을 확인했는데, 핸들러 객체를 생성하고 스레드에서 이를 활용하기 위해 작성한 코드가 조금 복잡해 보인다는 단점이 있다. 핸들러 클래스는 메시지큐를 이용한 데이터 전송 방법 이외에도 Runnable 객체를 실행할 수 있는 방법을 제공한다. 바로 확인해보자. ◎MainActivity.java package com.example.samplethread; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.View; import android.widge..
Android 에서 하나의 액티비티는 하나의 프로세스에서 처리되기 때문에 메인 액티비티 내에서 어떤 이벤트를 처리하거나 특정 메서드를 정의하여 기능을 구현할 때도 같은 프로세스 안에서 동작을 한다. 그렇기 때문에 대기 시간이 길어지는 동작을 수행할 때는 해당 액티비티가 멈춰버리는 문제가 생길 수 있다. 이런 경우 사용할 수 있는 2개의 시나리오는 다음과 같다. 구분 시나리오 서비스 사용 백그라운드 작업은 서비스로 실행하고 사용자에게는 알림 서비스로 알려준다. 만약 메인 액티비티로 결과 값을 전달하고 이를 이용해서 다른 작업을 수행하고자 한다면, 브드드캐스팅으로 결과 값을 전달해야 한다. 스레드 사용 스레드는 같은 프로세스 안에 있기 때문에 작업 수행의 결과를 바로 처리할 수 있다. 그러나 UI 객체는 직..
스피너는 HTML selector와 비슷한 기능으로 콤보 박스 안에 데이터를 하나 선택할 수 있도록 하는 위젯이다. 레이아웃 파일에 spinner 태그를 추가하여 간단하게 사용할 수 있다. ◎activity_main.xml ◎MainActivity.java package com.example.samplespinner; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import and..
- Promise
- react
- javascript
- await
- Async
- AsyncStorage
- 정보보안기사 #실기 #정리
- 이탈리안 레스토랑
- 파니노구스토
- react-native
- redux
- 인천 구월동 이탈리안 맛집
- redux-thunk
- 맛집
- 인천 구월동 맛집
- Total
- Today
- Yesterday