본문 바로가기

전체 글

(271)
[안드로이드] 5. ViewModel을 이용하여 UI와 로직을 분리 ViewModel UI와 로직을 분리하기 위한 라이브러리이다. 이렇게 구현하면 앱의 구조가 더욱 향상된다. 또한 안드로이드에서 화면을 회전할 경우 액티비티 모두 초기화되고 파괴된다(데이터가 사라짐). 이러한 것을 방지하기 위해 사용하기도 한다. 이는 ViewModel의 수명은 액티비티가 완전히 파괴되기 전까지 메모리에 남아있기 때문에 가능하다. ViewModel을 위한 구성 추가 build.gradle(:app) android { ... kotlinOptions { jvmTarget ="1.8" } } dependencies{ ... implementation 'androidx.activity:activity-ktx:1.1.0' ... } 그리고 데이터와 관련된 작업을 ViewModel로 이전시킨다. M..
[안드로이드] 4. Room 비동기처리 (feat. Coroutine) 지난번 문서까지의 리뷰 Room을 이용하여 할일 목록을 화면 상에 업데이트 중이었고, LiveData를 통해 테이블을 관찰하여 자동으로 화면이 갱신되었다. 그리고 2. Room에서 메인쓰레드에서 쿼리를 가능하게 했음을 기억할 것이다. 이는 임시방편이었고 사실상 DB 작업은 메인 쓰레드에서 쿼리를 허용하는 것은 앱의 성능을 저하한다. val db = Room.databaseBuilder( applicationContext,AppDatabase::class.java, "database-name" ).allowMainThreadQueries() //문제가 되는 부분 .build() 백그라운드에서 DB 작업을 하기 위한 방식 쓰레드를 사용한다. - Java & Kotlin AsyncTask를 사용한다. - Ja..
[안드로이드] 3. LiveData LiveData 데이터의 변화를 관찰하여 화면을 갱신시키기 위한 라이브러리이다. 이해를 위해 이전 문서의 코드를 보자. result_textView.text = db.todoDao().getAll().toString() add_button.setOnClickListener { db.todoDao().insert(Todo(todo_edit.text.toString())) result_textView.text = db.todoDao().getAll().toString() } 값을 받아 UI에 업데이트하는 똑같은 구문이 두개나 존재한다. 값이 변경될 때 마다 화면 갱신을 위해 저러한 구문을 반복해서 써줘야 되는 것도 문제지만, 만약 한번이라도 까먹고 빠뜨린다면 잘못된 결과를 유저에게 보이게 된다. 위처럼 Li..
[안드로이드] 2. Room 기본 가이드 Room Room은 안드로이드 내부 데이터베이스 라이브러리 중 하나 SQLite를 대체할 라이브러리이다. 이번 문서에서는 코틀린을 이용하여 Room을 활용하는 간단한 예제를 살펴본다. 기본 구성 Room을 사용하기 위해선 몇 가지 그래들 세팅이 필요하다. 먼저, build.gradle(:app)에서 다음과 같이 설정한다. ... apply plugin: 'kotlin-kapt' ... dependencies { ... implementation 'androidx.room:room-runtime:2.1.0' kapt 'androidx.room:room-compiler:2.1.0' //kapt 대신 annotationProcessor를 사용하면 안된다. } 위 사진은 Room 아키텍쳐 구조이다. 기본적인 앱..
[안드로이드] 1. MVVM 개요 MVVM MVVM이란 Model, View, ViewModel로 표현하는 안드로이드 개발의 구현 패턴이다. 기존의 구현 방식의 경우 액티비티에 너무 많은 기능이 집중되어(종속성의 증가) 유지보수 및 테스트가 힘들어진다. 이러한 문제를 해결하기 위해 MVVM패턴을 주로 사용한다. MVC와 MVVM 기존의 MVC(Model-View-Controller)의 경우 액티비티가 컨트롤러의 역할을 맡고, xml 파일인 뷰와 연결되어 사용자와 상호작용을 하고, 그와 동시에 액티비티는 모델과도 연결되어 데이터 처리도 담당했다. 즉, 뷰와 모델 사이에서 이름 그대로 controller의 역할을 수행하였다. MVVM의 경우 뷰에서 뷰모델, 뷰모델에서 모델로 작업을 단방향으로 처리하며, 뷰에서 뷰모델을 관찰하여 데이터의 변경..
[데이터베이스] 8. ESQL(Embedded SQL)와 프로시저(Procedure) ESQL 응용프로그램에 삽입된 SQL문을 의미한다. 응용프로그램에서 작성된 SQL문을 통해 DBMS에 접근하여 조회/갱신 등이 가능하다. 이때, 결과를 받기 위해 '커서'를 활용한다. 커서는 SQL문의 결과를 접근하기 위한 포인터이다. void computeGPA{ EXEC SQL BEGIN DECLARE SECTION; float oldgpa, newgpa; char id[9]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE SECTION; EXEC SQL DECLARE gpaCursor CURSOR FOR SELECT id, gpa FROM student FOR UPDATE; EXEC SQL OPEN gpaCursor; //학생 테이블 접근시작 while(1){ ..
[데이터베이스] 7. SQL의 View View View란 테이블에 대한 가상의 테이블로써 테이블처럼 직접 데이터를 소유하지 않고 검색 시에 이용할 수 있도록 정보를 담고 있는 객체를 의미합니다. 만약 특정 컬럼들을 여러 번 조회해야 한다면 똑같은 SELECT문을 여러 번 반복해야 하는데, 뷰에 해당 쿼리문을 저장함으로써 빠르고 간편하게 조회가 가능합니다. 자주 질의되는 SQL문을 View라는 가상 테이블로 저장. View의 특징 데이터의 논리적 독립성 예를 들어, 기존의 instructor 테이블이 professor(pid, name, dept), lecturer(lid, name, major, address)로 분할되었다. 이때 View의 instructor 컬럼 리스트의 이름과 타입은 기존의 insturctor 테이블과 동일하므로 기존의..
[데이터베이스] 6. 무결성 제약 조건 무결성 제약 조건 데이터베이스 스키마에 대하여 지정되는 조건으로 데이터 베이스에 저장되는 데이터들이 반드시 만족해야할 조건을 의미한다. 부적절한 정보 입력을 방지하기 위함. RDBMS의 무결성 제약 조건1 - 도메인 무결성 제약 조건 CHECK, DEFAULT, NOT NULL 등을 활용하여 각 속성의 도메인을 지정하여 입력 오류를 방지 grade_type이라는 학생의 가능한 학점에 대한 도메인 생성 CREATE DOMAIN grade_type AS CHAR CHECK (VALUE IN('A','B','C','D','F')); CREATE TABLE course_taken( ... student_id CHAR(4) NOT NULL, #NULL 값을 방지 grade grade_type, # 지정한 학점만 ..