개발

04/05 앱개발 입문주차 팀프로젝트(Project VInstagram)

sos000303 2024. 4. 5. 19:34
728x90

깃허브 레포지토리

이번 주는 앱개발 입문주차에서 배웠던 내용을 바탕으로 SNS앱의 레이아웃과 이동기능을 구현하는 팀프로젝트를 진행했다.

우리 6조에서는 최근에 가장 인기있는 SNS인 인스타그램을 카피하는 것으로 내용이 정해졌다. 
팀원들과 필수 구현기능을 배분했고 나는 MainActivity와 다국어 지원기능을 선택했다.

아래는 내가 구현한 기능과 그 이유, 구현 중 발생했던 문제에 대해 트러블슈팅한 내용이다.

  • 구현 기능
    • 레이아웃 작성
      • CardView를 이용한 원형 ImageView
        • 원형 이미지뷰를 사용하기 위해 android:clipToOutLine을 사용하려 했으나 API 버전이 낮아 deprecated되어 적용이 안됐다. 따라서 CardView의 radius를 늘려 원형으로 바꿔서 사용했다.
      • Post의 CustomLayout
      • 유저 목록의 CustomLayout
        • 위 두가지 커스텀 레이아웃 모두 처음에는 RecyclerView를 위해 만들었으나 팀원 중 리사이클러 뷰를 사용하시지 못하는 분이 계셔서 사용을 하지 않고 include를 이용해 커스텀 레이아웃을 5개씩 추가해주었다.
    • 기능 구현
      • 로그인 유무에 따라 MyPage/SignIn Activity로 다르게 넘어가는 코드 구현
        • isLogin 이라는 플래그값을 만들어 조건문을 이용해 true면 MyPage, false면 SignIn으로 넘어가게 작성했다.
      • Dialog를 이용한 공지사항 출력
        • Toast, Dialog, SnackBar 중 어느 기능을 이용해 공지사항을 띄울 지 고민했으나 공지사항인 만큼 유저가 직접 확인하고 닫기를 눌러야 다음으로 넘어갈 수 있도록 Dialog를 이용했다.
      • 반복문과 랜덤 값을 이용한 커스텀 레이아웃의 데이터 변경
        • 커스텀 레이아웃을 작성해서 include를 이용해 추가했기 때문에 내부 데이터를 바꿔줄 필요가 있었다. 레이아웃에서 일일히 바꿔주는 것도 좋겠지만 앱을 켤 때마다 나오는 포스트가 바뀌게 만들고 싶어서 소스코드에서 반복문과 random을 이용해 랜덤포스트를 넣게 작성했다.
      • string(en)과 string(kr)을 이용한 다국어 지원기능
        • 사용하는 환경의 언어에 맞춰서 자동으로 바뀔 수 있게 공지사항, 버튼의 문구, 회원가입 창의 힌트나 안내 메시지등을 모두 value/string에서 받아와 사용하게 바꾸었다.
      • SpannableString을 이용한 글씨 꾸미기
        • 인스타그램을 보면 게시글의 내용 가장 앞에 유저의 id가 볼드체로 들어가있다. 그런 텍스트뷰를 구현하기 위해 SpannableString을 이용했다.
  • 트러블 슈팅
    • 목적
      • Activity Class 단위에서 getString()을 이용해 value/string.xml에서 스트링을 가져오고자 했다.
    • 문제발생
      • context가 없다는 오류메세지와 함께 앱이 실행되지 않았다.
    • 원인분석
      • 예상원인: 처음 onCreate 내부에서 getString을 사용할 때는 문제가 없었던 것으로 보아 class 단위에서 getString을 사용하면 레드라인은 나오지 않지만 res에 접근할 수 없어서 이러한 예외가 발생하는 것으로 예상된다.
    • 해결방안
      • by lazy를 이용해 지연 초기화 해주었다.
    • 적용 결과
      • 정상적으로 작동했다.
    • 인사이트
      • getString은 context의 메서드인데 클래스 단위에서 작성을 하면 activity class의 context를 받아와 레드라인은 나오지 않지만 res에 접근할 수 없어 이러한 예외가 발생한다. 따라서 클래스 단위에서 선언하려면 by lazy를 이용해 지연초기화로 선언해야한다.

readme, pull request, conflict error 해결 등 처음 경험하는 것들이 많았지만 그만큼 배운 것도 많은 프로젝트였다.

728x90