본문 바로가기

프로젝트/활동

Food Guide 안드로이드 앱 - 공개SW 개발자대회 1차 출품작 접수, 개발 후기, 나만의 음식 다이어리

728x90
반응형

 

약 한 달 동안 대학교 친구 한 명 이랑 해서 총 두 명에서 안드로이드 앱을 만들게 되었다.

공개SW 개발자대회에 참여를 목적으로 두고 진행을 했는데 만들다 보니 생각보다 앱을 만드는 것이 재밌어졌다!

9월 14일 까지 만든 앱을 공개SW 개발자대회 출품작 접수를 완료 했고

첫 협동 프로젝트라서 많이 부족하지만 무엇을 만들었는지 남기고 싶어서 글을 쓰게 되었다.

 

첫 프로젝트 작업이라 그런지 작업하는 방법을 몰라서 처음에는 힘들었지만 하다보니 git 사용법도 어느정도 알게되었고 협업 느낌을 알 수 있게 되었다. 역시 백문이 불여일견 직접 해보는 것이 도움이 되는것 같았다. 

 

1. 나만의 음식 다이어리 Food Guide 소개

 

Food Guide는 나만의 음식 다이어리인데 인스타그램이 음식 이외에 여러 사진을 올린다면 이것은 음식 한정으로 느낌이나 맛 같은 후기를 남길 수 있는 앱이다.

 

 

 

하단 바에 메인, 테이블, 커뮤니티 ,설정 버튼을 두어서 각 화면으로 넘어가며 메인 탭에서 음식을 검색하고 다이어리를 저장할 수 있다. 최근에 저장한 다이어리는 메인 화면에 기록이 남아 검색하지 않아도 바로가기 버튼으로 검색할 수 있다.

 

 

public void onBindViewHolder(@NonNull FoodCommentAdapter.ViewHolder holder, int position) {
    FoodComment foodComment = foodCommentList.get(position);
    holder.tv_nickname.setText(foodComment.getName());
    holder.tv_content.setText(foodComment.getContent());
    holder.tv_date.setText(foodComment.getDate());

    if(foodComment.getUid().equals(userAccount.getIdToken())) {
        holder.tv_delete.setVisibility(View.VISIBLE);
        holder.tv_delete.setOnClickListener(view -> {
            DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("FoodGuide");

            databaseReference.child("Food").child(foodName).child("comment").get().addOnCompleteListener(task -> {
                List<FoodComment> list = new Gson().fromJson(task.getResult().getValue().toString(), new TypeToken<List<FoodComment>>(){}.getType());
                list.remove(position);

                String json = new Gson().toJson(list);

                databaseReference.child("Food").child(foodName).child("comment").setValue(json).addOnCompleteListener(task1 -> {
                    Toast.makeText(context, "한 마디를 삭제 했습니다.", Toast.LENGTH_SHORT).show();
                    notifyItemChanged(position);
                });
            });
        });
    }

}

<한마디 일부 코드>

 

음식을 검색하면 음식의 기본 정보가 나오고 다이어리로 넘어가서 자신만의 다이어리를 작성 할 수 있다. 한마디탭으로 넘어가면 이용자들이 전부 볼 수 있는 한마디 즉 댓글을 적을 수 있다.

 

 

메인 다음 탭은 테이블 탭인데 이부분은 완전히 구현되지 않았다. 구상은 사용자가 선택한 음식을 테이블에 자유롭게 배치하여 자신만의 코스요리를 만들 수 있게 업데이트 할 것이다.

 

private void loadDatabase() {
    databaseReference.child("Community").get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            communityDAOList.clear();
            for(DataSnapshot dataSnapshot : task.getResult().getChildren()) {
                CommunityDAO communityDAO = dataSnapshot.getValue(CommunityDAO.class);
                communityDAOList.add(0, communityDAO);
            }
            CommunityAdapter communityAdapter = new CommunityAdapter(communityDAOList, getContext());

            rv_list.setHasFixedSize(true);
            rv_list.addItemDecoration(new DividerItemDecoration(requireContext(), 1));
            rv_list.setAdapter(communityAdapter);
        }
    });
}

<커뮤니티 일부 코드>

 

음식 사진을 비롯한 다양한 사진이나 글을 공유할 수 있는 커뮤니티 기능도 넣어봤다. 지금은 단순 자유 게시판 밖에 없지만 기회가 되면 카테고리별로 나눠서 만들어보고 싶다.

 

 

요리별로 사용자가 좋아요를 체크할 수 있는데 그 수만큼 랭킹으로 보여주는 기능도 만들었다. 랭킹의 음식을 누르면 바로 그 음식 정보로 넘어가서 다이어리를 작성할 수 있다

 

 

설정 탭에서는 프로필 수정이나 비밀번호 변경 및 탈퇴와 같은 기능을 제공한다. 자체 회원가입만 가능하며 유저의 데이터베이스 및 각종 데이터 베이스는 파이어베이스 데이터베이스와 스토리지에서 관리한다.

 

 

2. 개발 후기 

친구는 메인과 다이어리, 테이블, 로딩 부분을 맡았고 나는 다이어리의 한마디, 로그인과 커뮤니티, 설정 부분을 맡았다. 로그인같은 경우 어떻게 해야 싶었는데 파이어베이스와 연동하여 많은 도움을 받았다. 커뮤니티도 파이어베이스 서버와 직접 연결하여 동작하도록 만들었다. 파이어베이스의 비동기 방식 때문에 처음에는 오류가 많이 생겼지만 이해하고 보니 할만하게 느껴졌다.

 

음식은 파이어베이스 서버에 직접 추가하면 자동으로 앱에서 불러오도록 만들었다. 이부분이 음식을 추가하기 쉬울 것 같아서 그랬는데 사용자가 직접 음식을 추가하면 어떨까 생각해본다.

 

협업은 이번이 처음이라 초반에는 어려웠지만 개발 막바지에는 어려운것도 못느끼고 계속 작업했던 것 같다. 하면서 모바일 프로젝트가 재밌게 느껴졌고 더 많은 프로젝트를 해보면 좋겠다.

 

https://github.com/dofury/FoodGuide

 

GitHub - dofury/FoodGuide

Contribute to dofury/FoodGuide development by creating an account on GitHub.

github.com

 

 

728x90
반응형