[2주차/필수과제] Single Activity Architecture를 적용하며 느낀점을 나눠주세요. #5
Replies: 28 comments
-
여러 개의 Activity를 사용한 경우, 화면마다 책임분리가 명확해진다고 생각합니다. 이러한 문제를 해결하기 위해 Single Activity Architecture가 등장하였습니다. 하지만 SAA에선 navigation을 통해 화면 간 전환을 구현해야 하기 때문에 난이도가 기존 방법보다 높다는 단점이 존재합니다. 저는 하나의 액티비티 위에 Jetpack Navigation를 사용하여 화면 전환 및 데이터 전달을 구현해봤는데, 구현하면서 어려웠던 것은 바로 “스택관리”입니다. 예를 들어 로그아웃을 거쳐 로그인 화면으로 이동한 경우, 뒤로 가기를 누르면 앱이 바로 꺼져야 합니다. 이 문제는 NavOptions의 popUpTo 함수와 inclusive 속성을 통해 해결했습니다. navOptions {
popUpTo(0) { inclusive = true }
} 또 다른 예로, 바텀바를 사용한 화면 전환의 경우, 어느 화면 버튼을 누르든 백버튼을 클릭하면 홈화면으로 돌아오고 홈화면에서 다시 백버튼을 누르면 앱이 종료되도록 하고 싶었습니다. 이러한 기능을 구현하기 위해 NavOptions의 popUpTo(Home)과 launchSingleTop 속성을 사용하였습니다. navOptions {
popUpTo(Home)
launchSingleTop = true
} |
Beta Was this translation helpful? Give feedback.
-
여러 개의 Activity를 이용하여 앱 구현 Single Activity Architecture 적용 나의 경험
|
Beta Was this translation helpful? Give feedback.
-
여러 개의 Activity를 사용할 경우, 각 화면의 역할 분리가 용이해지고 앱 구조가 간단해집니다. 새 화면이 추가될 경우 기존의 화면은 크게 신경쓰지 않고 새 액티비티에 대해서만 작성하면 되므로, 확장이 쉬워진다는 장점이 있습니다.
제가 SAA를 적용해보면서 어려웠던 점은 외부에서 앱의 특정 화면을 실행시키는 경우였는데, 만약 Multi Activity였다면 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
여러 개의 Activity를 이용해서 구현하는 경우 단순하고 구조가 명확해 이해가 쉬웠습니다. 각 Activity가 필요할 때만 로드되도록 스택 관리만 해주면 되기 때문에 메모리 관리도 비교적 쉬웠습니다. 이번 과제를 수행하면서 NavGraph, NavController나 NavHost 등 개념적으로는 공부했지만 구현하려고 하니 쉽지 않았습니다. 얼른 익숙해져서 SAA의 신이 되어보겠습니다,,🥹 |
Beta Was this translation helpful? Give feedback.
-
여러 Activity를 이용하는 방식:
Single Activity Architecture 방식:
|
Beta Was this translation helpful? Give feedback.
-
여러 Activity사용 시에는 각 액티비티가 독립적이므로, 화면 전환과 관리가 상대적으로 단순하고, 독립된 생명주기를 가지므로, 각 화면별로 구체적인 라이프사이클을 쉽게 관리할 수 있습니다. Single Activity Architecture(SAA)사용 시 모든 화면을 하나의 Activity 안에서 관리하므로 코드 구조가 단순해지고, Fragment나 Compose의 재사용성이 높아져 유지보수가 쉬워집니다. Fragment나 Compose 전환은 Activity 전환보다 가볍기때문에 성능이 개선됩니다. 어려웠던 점, 트러블 슈팅: |
Beta Was this translation helpful? Give feedback.
-
- 장점 - 단점 - 어려운점 - 해결한 점 |
Beta Was this translation helpful? Give feedback.
-
Activity
사실 저는 activity만으로 앱을 구현하던 시절에는 SAA 자체를 모르고 있었고,, 규모가 큰 앱을 구현해보지 않았어서 어려운 일도 크게 없었습니다ㅎㅎ SAA with Fragment
SAA를 알게 된 후로 Fragment를 활용해서 앱을 구현해봤었는데 화면 전환 등에 어려움은 크게 없었습니다! 다만 activity에서 구현하는 것이 익숙했던 저는 fragment에서 기능 구현할 때 어려움을 느낄 때가 종종 있었어요! 지금은 정확한 상황이 기억이 안나는데(ㅠㅠ) activity와 fragment의 코드가 완전히 동일하지는 않아서 적응이 필요했습니다 그리고 손 가는대로 graph를 짰다가 엉망진창이 되어 다시 만들었던 기억도 나네요ㅎㅎ SAA with Jetpack Navigation
개인적으로 화면 전환과 데이터 전달은 Jetpack Navigation을 사용하는 것이 activity와는 비교가 안될 정도로 너무 편해서 좋아합니다ㅎㅎ 근데 처음 세팅할 때가 너무 어렵죠.. 진입장벽이 높은 것이 가장 큰 단점이라고 생각합니다. 그리고 저는 스택관리가 가장 어려웠던 것 같아요!! 열심히 공부하겠습니다ㅎㅎ
로그인 루트를 이렇게 설정해뒀는데 처음 앱이 켜질 때는 email, password가 전달되지 않아서 생기는 문제였어요.... startDestination을 정의할 때 email, password에 빈 문자열을 전달해서 해결했습니다 얼른 sharedPreference 추가해서 거기에 저장하고 싶다는 생각을 했습니다ㅎㅎㅎㅎ |
Beta Was this translation helpful? Give feedback.
-
SAA 및 jetpack navigation 을 사용하면서 화면 간 데이터 전달이 간소화되었다고 느꼈습니다. 기존에는 intent를 통해서 관리를 해주었다면 이번 과제에서는 단순 parameter로 넘겨주는 방법을 사용하며 이전 화면의 데이터를 전달할 수 있었습니다. 단점으로는 처음 적용해보는 사람한테는 이해하는 데 시간이 걸리는 것 같습니다. 저와 같은 경우에는 기존 파일들이 각 기능에 맞게 분리되어있었는데 이 패키지 구조를 유지하면서 navigation을 사용하려니 더욱 헷갈렸던 것 같습니다. + 단순 navigation까지는 괜찮았는데 이제 이걸 bottom bar와 연결하면서 조금씩 이해했던 내용이 꼬이는 듯한 느낌을 받았습니다... 아직 이유를 찾지 못하였으니 기존 @serializable 어노테이션을 붙여 data class/data object 직렬화했는데 컴파일 과정에서 적용되지 않는 오류가 있었습니다. 그래서 처음에는 composable("route_name")을 통해 route이름을 문자열로 사용했습니다. 이후 모든 작업을 끝낸 후 다시 시도해보니 다행히도 그때는 직렬화 과정에서 오류가 안나 다시 composable<route_name> 으로 코드를 변경했습니다. 비록 처음에는 이해하는데 시간이 걸리겠지만 navigation이 주는 백스택 관리,상태 저장 등 옵셔널한 기능들이 다양하고 간편하기 때문에 이를 잘알고 적용한다면 코드가 더욱 간소화되고 가독성있게 작성될 수 있을 것 이라는 생각이 들었습니다 :) |
Beta Was this translation helpful? Give feedback.
-
SAA with jetpack Navigation
이런 장점만 있는 줄 알고 써왔는데 단점도 있더라구요
느낀점: 네비게이션으로 화면전환하는게 익숙해서 그런지 Intent로 관리하는것 보다 편리했지만 단점도 추가적으로 알게되었습니다~ |
Beta Was this translation helpful? Give feedback.
-
여러개의 Activity
SAA
경험
|
Beta Was this translation helpful? Give feedback.
-
Jetpack Compose에서 Single Activity Architecture를 사용하면 NavHost와 NavController를 통해 화면 전환을 선언적으로 관리할 수 있어 UI 구성과 네비게이션 로직의 분리가 쉽습니다. 그러나 Composable 간의 상태 전달과 BackStack 관리가 복잡해질 수 있습니다. 여러 개의 Activity를 사용하는 구조는 각 화면이 독립적이고 직관적으로 관리되지만, Intent를 통한 데이터 전달이 번거롭고 화면 수가 많아질수록 코드 중복과 유지보수가 어렵습니다. Jetpack Compose로 SAA를 구현하면서 처음이었기 때문에 많은 코드를 참고했고, 이러한 구조가 익숙치 않아서 이해하는데 시간이 걸렸던거 같습니다. 좋은 구조와 좋은 방식을 많이 참고해서 해봐야겠습니다. 그 Topbar랑 bottomNavigation을 구현하는데 시간이 좀 걸렸습니다. 잘만들어진 코드를 참고해서 구현했습니다. 두 방식 모두 장단점이 있지만, Jetpack Compose와 SAA의 조합은 UI와 간결한 네비게이션 구조를 제공해, 특히 복잡한 앱을 개발할 때 더 유리하다고 느꼈습니다. |
Beta Was this translation helpful? Give feedback.
-
여러 개의 Activity화면 당 하나의 Activity를 사용하므로 직관적이며 단일 책임 원칙을 지키기 좋은 구조입니다. SAA네비게이션을 통해 일관되게 화면을 관리할 수 있었지만 러닝커브가 좀 높은 것 같습니다.. bottom navigation과 연결하는 과정에서 많은 시행착오를 겪었습니다. 비록 러닝커브는 높지만 SAA로 구현한다면 효율적이며 간결한 코드를 작성할 수 있을 것 같습니다. |
Beta Was this translation helpful? Give feedback.
-
여러 개의 Acitivity의 장단점각 view가 독립적인 생명 주기를 가지는 점이 깊게 드가면 편리할 수 있을 것이라 생각하지만 메모리를 많이 차지하는 것이 큰 단점인 것 같습니다. 저번 주에 사용했던 registerForActivityResult도 메모리 사용이 많을 경우 열려있던 Activity가 죽어 callBack을 받지 못하는 것을 방지 하기 위해 나왔다고 알게 되었는데 이렇게 여러 activity가 죽을 것을 방지하며 새로운 방식들이 나올거면 activity를 적게 쓰는 방법으로 가는 것이 낫다고 생각합니다. Single Activity 구조어렵다는 것이 단점이라고 많이 나오는데 저는 여러 activity를 써본적이 거의 없어 그냥 화면이동이란 여려운것이 구나 하고 살고 있습니다. 장점으로는 여러 activity의 단점을 해결하기 위해 나왔으므로 메모리를 적게 사용하는 장점이 있습니다. 내 경험이번에 SAA를 구현해보면서 graph를 만들어놓고 화면이동을 하니 되게 직관적이고 쉬울 줄 알았는데 하나의 navigation에서 전체를 관리하려다 보니 되게 오래걸리고 힘들었습니다. 그리고 후에 뷰를 짤때도 이제는 navigation자체도 복잡하다 보니 UI에 대한 코드가 문제인지 navigation코드가 문제인지도 헷갈리는 상황이 생겼습니다. 그냥 무작정 다 고쳐보면서 해결을 했었는데 조금 더 깊게 공부하여 이해하고 쓰도록 노력하려합니다. 쓰다가 생각난건데 이번 과제 스택관리도 안했네요. |
Beta Was this translation helpful? Give feedback.
-
대부분 비슷한 경험 및 학습을 진행하신거 같고 저 같은 경우도 역시 동일합니다. 시간이 부족하여 적용을 해내지는 못했지만 완료하게 된다면 따로 글을 작성하여 공유해볼 수 있도록 노력하겠습니다. [1] 유튜브 : Philipp Lackner |
Beta Was this translation helpful? Give feedback.
-
여러개 Activity
SSA
이번 과제를 해보면서 익숙하지 않았어서 적용하는데 많은 시간이 걸렸던 거 같습니다.😅 구현을 하고 나니 NavGraph로 화면 이동에 대한 부분을 한 곳에서 관리할 수 있어서 좋았던 거 같습니다. SSA를 조금 더 잘 알고 적용한다면 더 효율적으로 화면이동을 구현할 수 있을 것 같습니다. |
Beta Was this translation helpful? Give feedback.
-
여러 개의 Acitivity를 이용하여 앱을 구현했을 때
SAA를 사용하여 앱을 구현했을 때
평소 SAA를 통해서 화면 전환을 하는 편이었어서 SAA가 모든 부분에서 여러 개의 Activity를 사용하는 것보다는 더 좋구나 라고 생각하고 있었는데 그게 아니라 각각의 장단점이 있다는 것을 알게되었습니다. 그리고 제가 평소에 구현하던 SAA와 세미나 때 구현하던 방식이 달라서 또 놀랐습니다. 방식이 하나만 있는 줄 알았는데, 여러 방법을 공부해봐야겠다는 생각을 했습니다. |
Beta Was this translation helpful? Give feedback.
-
여러 개의 Activity 구현 장점
단점
SAA 구현
|
Beta Was this translation helpful? Give feedback.
-
여러개의 activity를 사용하면 activity별로 백스택을 관리하기 때문에 사용자가 이전 화면으로 돌아갈때 메모리가 자동으로 해제되어 메모리 관리가 조금 더 용이하다는 장점이 있다고 생각합니다. 그렇지만 이와 동시에 activity 전환을 할때마다 화면이 재구성되는 문제가 발생하기 때문에 딜레이가 생길 수 있습니다. 저또한 1주차 과제를 구현했을 때 화면을 이동할때마다 딜레이가 실제로도 꽤나 길게 느껴져서 UX적으로 좋지 않다고 생각했습니다. 이와 달리 SAA를 사용하게 되면 화면 전환이 가볍고 복잡한 네비게이션 구조에서 효율적이라고 생각했습니다. 이후 앱이 커지고, 복잡해지고, 전달해야하는 데이터들도 많아진다면 분명 여러 Activity를 쓰는 것보다 성능면에서 큰 이점을 보이는 것은 당연해보입니다. |
Beta Was this translation helpful? Give feedback.
-
여러 Activity 방식 : 가장 장점이라고 할 수 있는 부분은 직관적이라는 것 같습니다. 각 activity에서 모든 생명주기가 관리되고 각 Activity별로 담당하고 있는 역할이 있기 때문에 직관적이고 개발하기 편한 것 같습니다. 단점은 Activity 전환하는 경우에 추가 메모리가 필요해서 퍼포먼스에 영향을 줄 수 있다고 해요! SAA 방식 : Screen와 ViewModel을 사용해서 데이터를 관리해요. 이때 제가 느끼기에 가장 중요한 장점은 Activity에 공통 ViewModel을 하나 두고 Screen별로 ViewModel을 둬서 공통 데이터와 개별 데이터를 자유자재로 사용할 수 있다는 것이었어요! (근데 이렇게 해도 되는건가요?? 공통 ViewModel을 하나 두고 개별 ViewModel까지 2개의 ViewModel을 Screen을 써도 되나..?) 단점은 화면이 많아지게 되면 그 Depth도 복잡해져 관리가 어려워진다는겁니다! NavHost와 NavGraph를 관리하기 힘들었던 경험이 있습니다! |
Beta Was this translation helpful? Give feedback.
-
여러 Activity를 사용하면 메모리 관리가 편하고, 데이터 전달이나 화면 이동등의 행동이 SAA 아키텍쳐 패턴보다 상대적으로 편하다고 느꼈습니다. 하지만 많은 activity가 존재할 수록 앱은 무거워질 수 밖에 없다는 단점이 있습니다. 이와 반대로 SAA 패턴은 상대적으로 가벼우며 코드를 재사용 함으로써 중복을 줄일수 있다는 장점이 있습니다. 하지만 NavGation 등 아키텍쳐가 복잡해질 수도 있다는 단점이 있습니다. 이번에 처음으로 compose를 공부하면서, navigation의 코드가 살짝 복잡하다고 느꼈지만, 아키텍쳐의 설계가 확립되고 나면 진행속도가 빨라진다는 것을 체감할 수 있었습니다! |
Beta Was this translation helpful? Give feedback.
-
여러 개의 Activity를 사용하여 구현하면 각 화면이 Activity로 분리되어 있기 때문에 각각의 생명주기와 UI를 독립적으로 관리할 수 있다는 장점이 있다고 생각합니다. 그러나 Activity의 개수가 많아질수록 앱은 무거워지며, 메모리나 속도 측면에서 단점을 지닙니다. 반면 Single Activity Architecture를 적용하게 되면, Jetpack Navigation을 활용하여 백 스택 관리나 복잡한 내비게이션을 보다 더 간단하고 일관되게 구현할 수 있으며, Fragment 간의 데이터 전달이 뷰모델이나 LiveData를 통해 이루어지는 등 데이터 전달에 있어서도 장점을 지닙니다. 그러나 의존성이 증가하는 문제가 발생할 수 있고, Fragment 간 전환 시의 생명주기 관리가 필수적입니다. 이번 과제를 하면서 처음에 구조를 짜는 과정이 다소 복잡했어서, NavHostController 초기화 시점에 ViewModelStore가 설정되지 않았어서 오류가 발생하는 등 이를 해결하는 데 시간이 좀 걸렸던 것 같습니다. |
Beta Was this translation helpful? Give feedback.
-
여러 개 Acitivity
SAA
처음 SAA를 통해서 화면 전환을 해봐서 러닝커브가 높았습니다... 그럼에도 훨씬 효율적인 방식이라고 느껴서 더 공부해서 제대로 사용해야겠다는 생각이 들었습니다! |
Beta Was this translation helpful? Give feedback.
-
[10 best practices for moving to a single activity](https://www.youtube.com/watch?v=9O1D_Ytk0xg)
|
Beta Was this translation helpful? Give feedback.
-
여러 개 Acitivity 장점 SAA 장점 처음 SAA를 적용하면서 진입 장벽이 너무 높고 어려웠던 것 같습니다. 하지만 구조를 잘 짠다면 편할 것 같아요. 앞으로 더 잘 사용해보고 싶습니다. |
Beta Was this translation helpful? Give feedback.
-
저는 아직 Single Activity Architecture (SAA)를 직접 적용해 보지는 않았지만, 여러 개의 Activity를 사용하면서 앱이 무겁고 전환 시 메모리 사용량이 증가하는 느낌을 많이 받았습니다. 특히 여러 Activity 간 화면 전환이 빈번할 때 꽤 많은 메모리 소비가 느껴졌습니다. 하나의 Activity에서 모든 화면을 관리하게 되면 메모리 사용이 줄어들고, 앱의 전반적인 퍼포먼스가 개선될 수 있을 것 같습니다. 또한, Jetpack Navigation과 ViewModel을 이용해 화면 전환과 데이터 공유를 중앙에서 관리할 수 있다는 점이 매우 매력적으로 다가옵니다. 이러한 방식은 Activity마다 별도로 데이터를 전달하거나 상태를 관리해야 하는 번거로움을 줄여줄 것으로 기대하고 있습니다. 러닝커브가 있어서 아직 공부하는 중이지만... |
Beta Was this translation helpful? Give feedback.
-
이번 과제를 하면서 Single Activity 구조에 대해 처음 알게 됐습니다! Single Activity Architecture 사용 하는 경우, |
Beta Was this translation helpful? Give feedback.
-
🎤 토론 과제 - Single Activity Architecture를 적용하며 느낀점을 나눠주세요.
여러 개의 Activity를 이용하여 앱을 구현했을 때와 Single Activity Architecture를 적용하며 앱을 구현했을 때의 장단점이 무엇이라고 생각하는지 말씀해주세요. 또, 각 방법을 통해 앱을 구현하며 어떤 것들이 어려웠고 어떻게 해결했는지 여러분들의 경험을 들려주세요!
Beta Was this translation helpful? Give feedback.
All reactions