[android] 안드로이드 SQLite 데이터베이스와 Dagger2

소개

안드로이드 앱을 개발할 때 데이터를 지속적으로 저장하고 관리해야 할 때가 있습니다. 이때 SQLite 데이터베이스는 경량 및 내장형 데이터베이스 시스템으로 많이 사용됩니다. 이 기술 블로그에서는 안드로이드 앱에서 SQLite 데이터베이스를 사용하는 방법과 Dagger2를 이용한 의존성 주입에 대해 다루겠습니다.

SQLite 데이터베이스 사용하기

데이터베이스 생성하기

SQLiteHelper 클래스를 만들어 데이터베이스를 생성하고 테이블을 정의할 수 있습니다.

public class MySQLiteHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "MyDatabase";
    private static final int DATABASE_VERSION = 1;
    
    // 테이블 생성 SQL문
    private static final String CREATE_TABLE_MYTABLE = "create table mytable " +
            "(id integer primary key autoincrement, name text not null);";

    public MySQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(CREATE_TABLE_MYTABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS mytable");
        onCreate(db);
    }
}

데이터 조작하기

데이터베이스에 접근하여 데이터를 삽입, 조회, 수정, 삭제하는 코드를 작성합니다.

public class MyDAO {

    private SQLiteDatabase database;
    private MySQLiteHelper dbHelper;

    public MyDAO(Context context) {
        dbHelper = new MySQLiteHelper(context);
    }

    public void open() {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    public void insertData(String name) {
        ContentValues values = new ContentValues();
        values.put("name", name);
        database.insert("mytable", null, values);
    }

    // 나머지 메서드들도 구현
}

Dagger2를 이용한 의존성 주입

의존성 주입은 안드로이드 앱에서 객체 간의 의존 관계를 줄이고 모듈화하는 데 도움이 됩니다. Dagger2는 이를 위한 강력한 도구로, 컴파일 시점에서 의존성 그래프를 분석하여 의존성을 주입합니다. 아래는 Dagger2를 사용한 예시입니다.

모듈 정의하기

의존성 주입에 필요한 모듈을 정의합니다.

@Module
public class MyModule {

    @Provides
    public MyDAO provideMyDAO(Context context) {
        return new MyDAO(context);
    }

    // 다른 의존성을 제공할 메서드들도 정의
}

컴포넌트 정의하기

의존성 주입을 수행할 컴포넌트를 정의합니다.

@Component(modules = MyModule.class)
public interface MyComponent {

    void inject(MyActivity activity);
}

주입하기

의존성 주입을 받을 대상에서 컴포넌트를 통해 의존성을 주입합니다.

public class MyActivity extends AppCompatActivity {

    @Inject
    MyDAO myDAO;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyComponent myComponent = DaggerMyComponent.builder()
                          .myModule(new MyModule(this))
                          .build();
        myComponent.inject(this);

        // 주입된 myDAO를 사용
    }
}

의존성 주입을 위해 Dagger2를 사용하면 코드의 가독성과 유지보수성이 향상되고, 유연한 앱 아키텍처를 구축할 수 있습니다.

마무리

이번 글에서는 안드로이드 앱에서 SQLite 데이터베이스를 사용하고, Dagger2를 이용한 의존성 주입에 대해 알아보았습니다. 안드로이드 앱을 개발하면서 데이터 관리와 의존성 주입을 고려할 때, 이러한 기술들을 적절히 활용하여 더 나은 앱을 만들 수 있을 것입니다.

참고문헌:

감사합니다!