ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [21.01.14] JAVA 안드로이드 스튜디오로 앱 만들기 넷째 날
    APP/study log 2021. 8. 30. 00:10
    728x90

    먼저 각자 역할 분담을 했다. 다른 친구들은 그동안 안드로이드 스튜디오가 제대로 작동하지 않아(경로에 한글이 섞여있으면 에러가 난다고 했던 거 같다. 나의 경우엔 다행스럽게 사용자 이름이 영어였다!) 며칠을 보내고 앱 제출까지 2주 남짓 남아서 좀 불안했다. 나는 그래도 내가 좀 해봤으니 핵심 기능인 채팅을 맡겠다고 했다. 조금씩 꾸준히 하는 건 자신이 있으니까! 그래서 채팅 프래그먼트 내에서 어떻게 세부적으로 나눌지 고민을 했다. 다음과 같다.

    1. 멘토리스트
    2. 내가 찜한 멘토
    3. 현재 채팅 내역

    먼저 멘토들이 등록된 리스트가 있어야 할 것이고, 멘토를 등록하는 글 쓰는 기능이 있어야 할 것이다. 그리고 그 리스트을 보고 찜하거나 채팅을 해야 하지만 그 방식은 나중에 고민.
    그리고 내가 앞에서 찜했던 멘토들을 리스트로 볼 수 있어야 한다. 또한 찜을 해제하거나 채팅으로 넘어가는 기능도 있었으면 좋겠다.
    마지막으로 앞에서 채팅으로 넘어온 채팅 내역들을 띄워줘야 하며, 그 채팅방으로 넘어가야 한다. 채팅이 끝나고 별점을 매기고 정산 시스템을 구현해야 한다.

    먼저 이 기능들을 세세하게 어떻게 할 건지 정하는 것보다 한 걸음 먼저 나아가는 게 우선이라 생각해서 큰 세 파트를 어떻게 움직일지 생각했다. 네비게이션뷰도 좋지만 다른 방법은 없을까 생각했다. 열심히 찾아보다가 뷰페이저와 탭 레이아웃을 사용하기로 했다. 참고 1: Fragment 와 ViewPager 함께 쓰기 참고 2: 홍드로이드 뷰페이저 MainActivity 의 View 인 activity_main 에서 TabLayout과 ViewPager 를 갖는다. ViewPager 에는 각각의 fragment 가 그려지고, TabLayout 을 사용해서 다른 fragment 로 옮겨갈 수 있으며 TabLayout 의 tabItem 들은, Fragment 와 같은 Adapter 를 적용해서 코드에서 동적으로 생성을 해준다. 그럼 난 하위에 있는 fragment들에 각각 저 세 기능을 만들면 될 것이다. 이건 그래도 쉬워서 금방 했다. 별다른 복잡한 로직이 필요하진 않지만 넘어가는 것만 봐도 뿌듯 으쓱했다. 빨리 다음으로 넘어가고 싶다는 생각이 들 정도로!

    [오늘의 지식]
    그런데 만드는 과정 중에 또 궁금한 게 생겼다. Activity와 Fragment의 차이는 뭘까? 이 둘이 뭐가 다르고 언제 써야 옳은 건지가 궁금했다. 찾아보니 프래그먼트 는 하나의 액티비티가 여러 개의 화면을 가지도록 만들기 위해 생긴 개념이란다. 프래그먼트의 주요 기능은 다음과 같다.

    1. 액티비티를 분할하여 화면의 한 부분을 정의한다.
    2. 액티비티와 같이 레이아웃, 동작 처리, 생명주기를 가지는 독립적인 모듈이다.
    3. 다른 액티비티에서도 사용 할 수 있어 재사용성이 뛰어나다.
    4. 액티비티 내에서 실행 중에 추가, 제거가 가능하다.

    참고: 프래그먼트에 대해 기본적인 내용을 잘 다룬 블로그 fragment는 activity와 달리 쓰이는 문법도 다른 부분이 있었다. 단적인 예로는 context를 구할 때, activity의 this 와 fragment의 getActivity() 같은 게 있었다. (사실 내가 inflater와 함께 거의 유일하게 아는 차이긴 하다ㅎㅎ) 이걸 몰라서 왜 자꾸 빨간 줄이 가지? 싶었는데, 이제는 당연한 사실이다! 확실히 프로젝트를 하면서 성장하는 것이 느껴졌다. 또한 fragment에서 쓰는 메소드들의 용도? 기능?이 궁금해졌는데 이 또한 위 블로그가 잘 설명해주어서 요약만 해놓을 것이다.
    • void onAttach(Activity activity) : 프래그먼트가 처음으로 액티비티에 부착 될 때 호출됨.
    • void onCreate(Bundle savedInstanceState) : 이 콜백함수를 통해 프래그먼트에 꼭 필요한 요소들을 먼저 초기화 하고 시작 할 수 있다. 매개변수로 전달받는 savedInstanceState의 경우 프래그먼트가 재생성되기 이전의 상태를 저장하고 있는 변수로써, 이 값을 참조해 이전 내용을 복구하게 됨.
    • View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) : 프래그먼트에 쓰일 view들을 정의하고 초기화하는 함수.
      1. 프래그먼트는 자신의 레이아웃을 루트 뷰로 설정하고 이를 inflate 함
      2. container 를 통해 프래그먼트가 액티비티의 어느 위치에 자리 잡아야 될지를 전달.
      3. 마지막으로 프래그먼트상에 생성된 뷰들을 종속 된 액티비티의 뷰(container) 에 리턴해 줌으로써 화면에 표시

    역시 모든 것에는 기초 개념이 탄탄한 것이 중요하다는 것을 다시 한 번 깨닫게 되는 순간이었다. 그냥 수동적으로 영상만 보고 따라할 때보다, 내 스스로 궁금한 내용들을 찾아보면서 하니 다음 코드를 짤 때나 오류가 발생할 때 능동적으로 반응할 수 있었다. 무릎을 탁 치고 다시 한 번 뿌듯함에 잠을 잘 수 있었다.

    728x90
Designed by Tistory.