ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TECHIT 앱 스쿨 2기: Android 25일차 (23.05.31)
    [THEC!T] 앱 스쿨2기 : Android 2023. 5. 31. 23:19
    728x90

    자료 출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 내용

     

    벌써 5월 마지막날입니다.
     
    지금 생각해보면 시간이 정말 빠르게 간 것 같습니다.
     
    퇴사를 작년 8월 말일날 했는데 벌써 곧 퇴사한지 1년이 되어간다는게.....ㅡㅜ
     
     
    오늘은 강사님께 질문을 드리면서 시작을 하였습니다.
     
    강사님이 보여주신 코드가 작동하는 영상을 보며 제가 작성한 코드와 차이점을 확인하여 질문을 드렸습니다.
     
    첫 번째로는 데이터가 입력한 순서대로 저장되고 불러온다는 점에서 차이가 있었습니다.
    제가 작성하였었던 코드는 입력한 순서대로 나오지 않고 저장한 이름으로 정렬이 되어 나온다는 차이가 있었기에 해당 방식이 문제가 없는지에 대하여 질문을 하였습니다.
     
    두 번째로는 첫 번째 질문에 대한 답변을 듣고 생각하였을 때 저장방식에 대한 차이라는 생각이 확 들어 현업쪽에서는 파일로 저장 하지 않고 DB로 저장하겠지만 일반적으로 자료를 저장할 때 한 개의 파일에 저장하는지 아니면 한개의 파일에 저장하는지 질문을 드렸고, 강사님께서는 기획에 따라 다르다는 말씀과 함께 어느 방법이 답이다 이런 것은 없다고 말씀해주셨습니다.
     
    세 번째로는 파일을 여러 개 저장한 경우와 파일 한 개로 저장할 때 있어서 데이터가 매우 많이 있다는 가정하에 어느 방식이 좀 더 속도가 빠른지에 대해 질문을 드렸습니다. 강사님께서는 수십GB 가 되지 않는 이상 큰 차이는 없다고 말씀해주셨고 추가로 불필요하게 메모리를 많이 차지할 가능성이 크다고 말씀해주시며, 우문현답을 해주셨습니다.
     
     
    강사님께 질문을 드린 후 현재 작성한 코드에서 저장방식에 대하여 수정을 해야겠다는 생각이 들어 바로 수정작업을 진행하였습니다.
    강사님의 답변과 프로그램 작동 영상을 보며 생각을 해보니 해당 방식으로 작성하려면 저장할 때 자료구조가 일반 배열이나 리스트가 아닌 이차원 배열 혹은 이차원 리스트로 객체를 생성하여 저장해야 한다는 생각을 하게 되었습니다.
     
    코드를 수정하기 전에 저장방식에 대하여 헷갈리지 않도록 간단하게 그림으로 그려보았습니다.
    그림을 그리고 난 후 머리속으로 가볍게 정리하면서 든 생각이 이런 구조면 차라리 자료구조 map 중 HashMap을 사용하여 작성하는 것이 더욱 작성하면서 편할 거 같다는 생각이 들어 바로 HashMap을 이용하여 데이터 저장 및 파일을 저장하는 로직을 구성하였습니다.
    기존에 작성했었던 코드는 완벽하게라고는 말할 수 없지만 제 실력이 허락하는 한도 내에서 담당 기능별로 구분을 해놓았었기에 기존 저장로직에서 HashMap을 이용하여 저장하는 로직으로 변경하는 것은 아주 어렵지 않았었습니다.
     
    하지만 HashMap은 입력순서를 보장하지 않았기에 map자료구조 중 입력순서를 보장하는 자료구조가 있는지 검색을 해보니 LinkedHashMap이 있어 LinkedHashMap을 사용하는 로직으로 변경하였습니다.
     
    LinkedHashMap
     LinkedHashMap을 사용할 경우, 항목의 삽입 순서를 유지하면서도 O(1) 시간에 요소를 찾을 수 있습니다. 이는 해시맵(HashMap)과 동일한 성능을 가집니다. 다만, LinkedHashMap은 추가적으로 연결 리스트를 유지하기 때문에 공간 복잡도가 더 크다는 점을 고려해야 합니다.
     
    일단 처음에는 디버깅에서 걸리는 부분들을 찾아 수정하였고 이후에는 프로그램을 실행시킨 뒤 파일 조회, 저장, 변경, 삭제 등의 기능들을 테스트하면서 수정하면서 잘못 수정을 하였다거나 줄 바꿈 등을 잘못 설정하지는 않았는지 확인을 하면서 기존코드를 고쳐나갔습니다. 
     
    그리고 강사님께서 조별로 현재 진행 상황이 어떻게 되어가고 있는지 확인 차 저와 조원들이 사용하고 있는 디스코드 채널로 들어오셨습니다. 강사님께서는 코드 작성에 있어 조원들과는 의견을 어떻게 나누었는지 어떤 것을 정하였는지 물어보셨고, 코드 로직 중 일부 부분을 물어보시면서 어떻게 구현할지 고민을 하였는지 물어보셨었습니다.
     
    일단 저와 조원들은 Main Class 내 관련해서만 의견을 나누었지 깊숙하게는 의견을 나누지 않았었기에 저는 강사님의 질문을 듣고 조금 뼈를 맞은 것 같다는 느낌을 받았으며, 코드를 작성할 시간은 넉넉하였는데 너무 코드 작성에만 몰두하여서 하지 않았나? 라는 생각이 들면서 조원분들과 의견을 나누면서 좀 더 의견을 정하자고 하면 좋지 않았을까? 라는 반성을 하게 되었습니다.
     
    마지막으로는 조원들과 현재 코드 작성에 있어 진행 상황을 공유하는 시간을 가졌습니다.
    저 포함 모든 조원이 코드를 현재 완성한 상태가 아니었기에 가볍게 현재 진행 상황을 공유하였습니다.
    진행 상황을 공유하면서 느낀 것은 사람마다 성격과 개성이 다르듯 조원들의 코드 작성 스타일이 모두 달랐던 점에서 흥미롭다는 느낌을 받았습니다. 저를 포함한 모든 조원이 코드를 모두 작성하고 나서 서로의 코드를 리뷰할 때 이런 방법으로도 할 수 있구나, 이렇게 구현하는 방법도 있는지를 알 수 있기 때문입니다.
     
    내일 중으로 작성 완료한 코드를 리뷰하기로 하였는데 저는 중점적으로는 파일에 데이터를 저장하는 부분, 만들어진 클래스의 개수, 프로그램 상태에 다른 분기 별 코드 작성 위치 등을 중점적으로 제가 작성한 코드와 비교하면서 볼 것 같습니다.
     
    그리고 뭔가 서로의 코드를 리뷰한다라는 사실 자체가 뭔가 기대가 됩니다. 난 이렇게 작성하였다고 알려주는 재미와 다른 사람이 작성한 코드를 보면서 저렇게 작성하는 방법도 있구나라는 사실을 배울 수 있고 또한 다른 사람이 작성한 내용을 보거나 혹은 다른 사람이 제가 작성한 코드를 보면서 특정 부분에서 제대로 작성하지 못한 부분도 발견이 될 수 있으므로 기대가 됩니다. 마지막으로는 리뷰하기에 앞서 너무 창피한 코드를 보여주기 싫으므로 좀 더 자의 반(?) 타의 반(?)으로 코드 수정 및 정리 등을 하면서 빼먹은 부분 등을 한 번 더 확인할 수 있어서 좋은 것 같습니다.
     
     
    마무리
     
    뭐랄까 지금은 뭔가 폭풍 전 고요인듯한 느낌이 드는 시기입니다. 왜냐하면, 금요일부터는 이제 본격 안드로이드 프로그래밍 수업이 시작되기 때문입니다. 어떻게 보면 저 혼자 유난을 떠는 것일 수도 있겠으나, 개인적으로 조금 무서운 이유가
    인프런에서 강의와 시중에서 구매한 책으로 이미 혼자 공부하면서 클론코딩이였지만 코드 하나하나를 이해하기가 어려웠었기 때문입니다. 혼자 공부를 했었기에 궁금증에 대하여 찾기도 어려웠기에 현재 저의 기억속에 어렵다라는 기억이 남아 있는 것일 수 도 있습니다. 이번에는 혼자 공부하는 것이 아닌 잘 알려주시는 강사님과 학습의지가 뛰어난 동기(?)교육생 분들이 계셔서 알려주시는 안드로이드 프로그래밍에 관련하여 저에게 떠오른 궁금증과 저에게 떠오르지 못한 궁금증들을 해결해 갈 수 있도록 하겠습니다.
     
     
    오늘의 마음가짐
     
    폭풍에 대비하여 폭풍을 잘 넘기거나 혹은 폭풍을 이용하는 사람이 되자
     

Designed by Tistory.