본문 바로가기
자유게시판

안드로이드 APP 을 ChatGPT와 함께 만들어 보기 (3부)

by 고리스s 2024. 6. 23.
반응형

안녕하세요! 지난 2부에서는 ChatGPT를 활용하여 안드로이드 앱의 기능을 확장하는 방법과 개발 중 경험을 공유했습니다. 이번 3부에서는 더욱 고급 기능을 구현해 보겠습니다. 데이터베이스를 이용한 메모 저장과 검색 기능을 추가하여 앱의 실용성을 높여보겠습니다.

부제목: 데이터베이스를 활용한 메모 저장 및 검색 기능 구현


1. 데이터베이스 활용하기

메모를 영구적으로 저장하고, 앱을 다시 실행할 때도 메모가 유지되도록 하기 위해 SQLite 데이터베이스를 사용할 것입니다.

1.1 ChatGPT에게 데이터베이스 코드 요청하기

먼저, ChatGPT에게 SQLite 데이터베이스를 활용한 메모 저장 기능을 구현하는 코드를 요청합니다. 다음과 같이 질문할 수 있습니다:

"안드로이드 앱에서 SQLite 데이터베이스를 이용해 메모를 저장하고 불러오는 기능을 구현하는 코드를 작성해 주세요."

ChatGPT는 일반적으로 아래와 같은 코드를 생성할 것입니다:

// DBHelper.java
package com.example.memoapp;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "memo.db";
    private static final int DATABASE_VERSION = 1;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE memos (id INTEGER PRIMARY KEY AUTOINCREMENT, memo TEXT);");
    }

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

// Memo.java
package com.example.memoapp;

public class Memo {
    private int id;
    private String memo;

    public Memo(int id, String memo) {
        this.id = id;
        this.memo = memo;
    }

    public int getId() {
        return id;
    }

    public String getMemo() {
        return memo;
    }
}

// MemoAdapter.java
package com.example.memoapp;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;

public class MemoAdapter {
    private DBHelper dbHelper;

    public MemoAdapter(Context context) {
        dbHelper = new DBHelper(context);
    }

    public void addMemo(String memo) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("memo", memo);
        db.insert("memos", null, values);
    }

    public ArrayList<Memo> getAllMemos() {
        ArrayList<Memo> memoList = new ArrayList<>();
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM memos", null);
        if (cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(0);
                String memo = cursor.getString(1);
                memoList.add(new Memo(id, memo));
            } while (cursor.moveToNext());
        }
        cursor.close();
        return memoList;
    }

    public void deleteMemo(int id) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        db.delete("memos", "id=?", new String[]{String.valueOf(id)});
    }
}

// MainActivity.java
package com.example.memoapp;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private MemoAdapter memoAdapter;
    private ArrayList<String> memoList;
    private ArrayAdapter<String> adapter;

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

        memoAdapter = new MemoAdapter(this);
        memoList = new ArrayList<>();

        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, memoList);

        ListView listView = findViewById(R.id.listView);
        listView.setAdapter(adapter);

        loadMemos();

        EditText editText = findViewById(R.id.editText);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String memo = editText.getText().toString();
                if (!memo.isEmpty()) {
                    memoAdapter.addMemo(memo);
                    loadMemos();
                    editText.setText("");
                }
            }
        });
    }

    private void loadMemos() {
        memoList.clear();
        ArrayList<Memo> memos = memoAdapter.getAllMemos();
        for (Memo memo : memos) {
            memoList.add(memo.getMemo());
        }
        adapter.notifyDataSetChanged();
    }
}

1.2 안드로이드 스튜디오에 코드 적용하기

  1. 데이터베이스 헬퍼 클래스 생성: DBHelper.java 파일을 생성하고 ChatGPT가 제공한 코드를 붙여넣습니다.
  2. 메모 모델 클래스 생성: Memo.java 파일을 생성하고 ChatGPT가 제공한 코드를 붙여넣습니다.
  3. 메모 어댑터 클래스 생성: MemoAdapter.java 파일을 생성하고 ChatGPT가 제공한 코드를 붙여넣습니다.
  4. 메인 액티비티 수정: MainActivity.java 파일을 열고 기존 코드를 ChatGPT가 제공한 코드로 대체합니다.

2. 검색 기능 구현

이제 메모를 검색할 수 있는 기능을 추가해 보겠습니다. ChatGPT에게 검색 기능을 구현하는 코드를 요청합니다.

"안드로이드 앱에서 SQLite 데이터베이스를 이용해 메모를 검색하는 기능을 추가하는 코드를 작성해 주세요."

ChatGPT는 일반적으로 아래와 같은 코드를 생성할 것입니다:

// MemoAdapter.java (searchMemo 메서드 추가)
package com.example.memoapp;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;

public class MemoAdapter {
    private DBHelper dbHelper;

    public MemoAdapter(Context context) {
        dbHelper = new DBHelper(context);
    }

    // ... (기존 코드)

    public ArrayList<Memo> searchMemo(String keyword) {
        ArrayList<Memo> memoList = new ArrayList<>();
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM memos WHERE memo LIKE ?", new String[]{"%" + keyword + "%"});
        if (cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(0);
                String memo = cursor.getString(1);
                memoList.add(new Memo(id, memo));
            } while (cursor.moveToNext());
        }
        cursor.close();
        return memoList;
    }
}

// MainActivity.java (검색 기능 추가)
package com.example.memoapp;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private MemoAdapter memoAdapter;
    private ArrayList<String> memoList;
    private ArrayAdapter<String> adapter;

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

        memoAdapter = new MemoAdapter(this);
        memoList = new ArrayList<>();

        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, memoList);

        ListView listView = findViewById(R.id.listView);
        listView.setAdapter(adapter);

        loadMemos();

        EditText editText = findViewById(R.id.editText);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                searchMemos(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) { }
        });
    }

    private void loadMemos() {
        memoList.clear();
        ArrayList<Memo> memos = memoAdapter.getAllMemos();
        for (Memo memo : memos) {
            memoList.add(memo.getMemo());
        }
        adapter.notifyDataSetChanged();
    }

    private void searchMemos(String keyword) {
        memoList.clear();
        ArrayList<Memo> memos = memoAdapter.searchMemo(keyword);
        for (Memo memo : memos) {
            memoList.add(memo.getMemo());
        }
        adapter.notifyDataSetChanged();
    }
}

3. 마무리

이번 3부에서는 ChatGPT를 활용하여 SQLite 데이터베이스를 이용한 메모 저장 및 검색 기능을 구현해 보았습니다. 데이터베이스를 사용함으로써 앱의 데이터가 영구적으로 저장되며, 검색 기능을 통해 사용자가 원하는 메모를 쉽게 찾을 수 있게 되었습니다. 다음 4부에서는 사용자 인터페이스를 개선하고, 앱의 전체적인 완성도를 높이는 방법을 다루겠습니다. 많은 기대 부탁드립니다!


다음 글에서는 앱의 UI 개선 및 추가 기능 구현에 대해 다룰 예정입니다. 계속 지켜봐 주세요!

728x90
반응형