본문 바로가기

안드로이드/부스트 코스 에이스

[부스트코스ACE 2기] 5주차 프로젝트 후기

5주차!

이제 1주 밖에 남지 않았네요... 😭

이번주 프로젝트는 SQLite를 이용하여 내부DB를 구현하는 것이었어요!

이번에는 처음 해 보는 내용이 많이 있어서, 강의를 듣고 프로젝트를 진행하면서 배우고 공부 한 내용을 정리 하는 방식으로 후기를 남겨보려고 해요!


내부 DB


자동로그인 또는 토큰 저장 등을 할 때, 우리는 보통 sharedPreference 라는 저장소를 이용했습니다!

그러나 sharedPreference 는 key - value 한 쌍으로만 관리하기 때문에, 데이터가 커지면서 데이터베이스가 필요하게 되었습니다.


파일에 저장하는 방식도 많이 사용합니다. 

but! 인덱싱이라는 것을 이용하여, 모든 데이터를 로딩 할 필요가 없이 필요한 데이터만 가져와서 쓰는 데이터베이스 를 사용하게 됩니다.


데이터베이스를 사용하기 위해서는 4개의 단계가 필요합니다!

1. 데이터베이스 오픈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void oepnDatabase(){
 
    //데이터베이스 저장소 만들기
    //데이터베이스 이름, 모드
    database = openOrCreateDatabase("songDB", MODE_PRIVATE, null);
    if(database != null){
        Log.e("데이터베이스 오픈""데이터베이스 오픈");
    }
 
    //데이터베이스를 열어주고! 테이블을 열어야함.
    // SQL를 실행 할 때는 이전에 먼저 데이터베이스를 열어 주어야 함.
    // 앱을 실행 할 때 마다, openDatabase 해 주기!
 
    createTable();
}
 




cs


2. 테이블 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void createTable(){
 
    String tableName = "test03Table";
    //데이터베이스가 존재하는지 확인
    if(database != null){
 
        //[IF NOT EXISTS] : 중복된 테이블 생성 에러 방지
        String sql = "create table if not exists "+ tableName + "(_id integer PRIMARY KEY autoincrement, name text, age integer, mobile text)";
 
        //결과 값이 필요하지 않은 sql문의경우 execSQL
        database.execSQL(sql);
        Log.e("createTable","데이터베이스 테이블 생성 완료");
 
        insertData();
 
    }else
        Log.e("createTable","데이터베이스 오픈");
 
}
cs


3. 데이터 삽입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public void insertData(){
 
    String name = "승희";
    String mobile = "010-8615-9140";
    String ageStr = "20";
    int age = -1;
    try{
        age = Integer.parseInt(ageStr);
    }catch (Exception e){
        //ageStr 이 숫자가 아닌데 형번환을 시킬 경우 exception이 발생
    }
 
    Log.e("insertData""insertData호출");
 
    if (database != null){
        String sql = "insert into test03Table(name, age, mobile) values(?,?,?)";
        Object[] params = {name, age, mobile};
 
        database.execSQL(sql,params);
 
        Log.e("insertData""데이터 삽입 완료!");
 
        selectData();
    }
}
 
cs


4. 데이터 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void selectData(){
 
    if (database != null){
 
        String sql = "select name, age, mobile from "+ "test03Table";
 
        //sql에 ?를 넣고 null 대신 ?를 대체 할 파라미터를 넣는 방법도 가능!
        Cursor cursor = database.rawQuery(sql, null);
        Log.e("조회된 데이터 개수 : " , String.valueOf(cursor.getCount()));
 
        for(int i = 0; i<cursor.getCount();i++){
            cursor.moveToNext();
            String name = cursor.getString(0);
            int age = cursor.getInt(1);
            String mobile = cursor.getString(2);
 
            Log.e("selectData", name + age + mobile);
 
        }
    }
 
}
 
cs



Helper Class (헬퍼 클래스)


헬퍼 클래스

- 기능 수정을 해야 할 경우, (가령 칼럼추가!) 테이블을 삭제 해 버리면 이전 데이터가 사라져 버리는 문제가 발생 하게 됩니다.

- 업그레이드 또는 새로 만들어야 하는 경우, OpenHelper를 사용하면 기존 데이터는 유지한 채, 업데이트가 가능 합니다.


후기


확실히 부스트코스를 진행하면서, 코드 하나를 짜더라도 조금 더 깔끔하고 효율성 있는 코드를 만들기 위해 많은 고민을 했던 것 같아요!.. 네트워크 부분부터 코드가 매우.. 많이.. ㅜㅜ...! 정돈이 안된 느낌이 들어서.. 얼른 프로젝트를 마무리하고, 부족한 부분을 다시 채워가면서 코드 리펙토링을 진행하고싶어요...ㅎ... 열심히 한다고 했는데, 아직은 너무나도 부족하고 빈틈이 많은 것 같아요..ㅠㅠ

마지막 프로젝트까지 잘 마무리 할 수 있었으면 좋겠습니다👍!