1. 팀 프로젝트 개발 3일차
팀 프로젝트도 어느덧 중반부를 향해 달려가고 있다.
이제 슬슬 각각의 작업물들이 얼추 완성되었고, 그에 따라서 각 작업물들을 하나의 완성품으로 합칠 때 생기는 문제들도 하나하나씩 터져나오기 시작하고 있다.
과연 오늘은 얼마나 진행되었는지, 또 어떤 문제가 생겼는지 하나하나 살펴보자.
UI 변경 & 기능 추가
처음에 만든 UI에서 어떤 것들을 추가했는지 알아보자.
우선 마이페이지 화면.
가장 눈에 띄는 차이점은 자신이 작성한 글이 나타난다는 것.
이건 필수 구현 목록을 면밀히 살펴보다보니 '마이페이지' 항목에 '자신이 작성한 게시글도 표현하기' 항목이 있길래 추가한 것이다.
참고로 기본적인 UI는 일관성을 위해서 팀원이 만든 UI를 참고했다.
물론 작성글, 작성댓글, 댓글단 글, 좋아요한 글 구분은 아직 구현하지 않았고, UI만 구현시켜놨다.
그리고 이 기능이 추가되면서 자연스럽게 프로필 사진과 트랙/아이디의 위치를 변경시켰다.
이렇게 보니 뭔가 완성되는 느낌이 슬슬 풍기기 시작한다.
그 다음 언어 설정 화면.
이건 겉보기에는 딱 하나만 추가되었다. 바로 확인 버튼.
하지만, 여기에는 보이지 않는 것이 하나 더 추가되었는데 그건 바로 RadioGroup.
이 레이아웃의 xml을 뜯어보면 RadioButton을 감싸는 RadioGroup이 하나 추가되었는데 RadioButton을 제대로 작동시키기 위해서는 RadioGroup을 만들어줘야 하기 때문이다.
이번에는 추가된 기능들을 한 번 살펴보자.
우선은 마이페이지 화면부터 보도록 하자.
val tv_trackName = findViewById<TextView>(R.id.txt_apptrack)
tv_trackName.text = intent.getStringExtra("track")
위의 마이페이지 화면에서 자신이 쓴 글 부분에 있는 Android 부분을 말한다.
val tv_writting = findViewById<TextView>(R.id.txt_writing)
tv_writting.text = when(intent.getStringExtra("track")) {
android -> "스파르타 친구들 새해 잘 보내!"
ios -> "코딩 너무 어려워.."
else -> "UNITY 팁 몇가지 알려줄게!"
}
역시나 마이페이지 화면에서 자신이 쓴 글 부분에 각 트랙마다 게시글의 제목이 다르게 보이도록 하는 코드이다.
그 다음은 언어 설정 화면인데 여기는 당연히 '언어 설정'을 가능하게 만들어야 하는 코드를 짜야 한다.
이 코드는 내가 직접 짜기에는 한계가 있었기 때문에 팀원들의 도움과 구글링을 참고하여 만들었다.
class LanguageSettingActivity : AppCompatActivity() {
private lateinit var korean: RadioButton
private lateinit var english: RadioButton
private lateinit var language_code: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_language_setting)
korean = findViewById(R.id.rbtn_korean)
english = findViewById(R.id.rbtn_english)
val sharedPreferences = getSharedPreferences("Settings", Activity.MODE_PRIVATE)
val language = sharedPreferences.getString("My_Lang", "")
if (language != null) {
Log.d("log", "language :"+language)
language_code = language
}
if(language_code.equals("en") || language_code.equals("")){
english.setChecked(true);
}else{
korean.setChecked(true);
}
korean.setOnClickListener {
setLocate("ko")
recreate()
}
english.setOnClickListener {
setLocate("en")
recreate()
}
}
private fun setLocate(Lang: String) {
Log.d("log", "setLocate")
val locale = Locale(Lang)
Locale.setDefault(locale)
val config = Configuration()
config.setLocale(locale)
baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics)
val editor = getSharedPreferences("Settings", Context.MODE_PRIVATE).edit()
editor.putString("My_Lang", Lang)
editor.apply()
}
}
트러블 슈팅
이렇게 개발에 박차를 가하고 있는 가운데, 문제가 발생하지 않는다면 개발 과정이 아니지.
역시나 오늘도 여러 문제점들이 튀어 나왔다.
그 중에서 몇 가지만 간단하게 추려봤다.
1. 코딩 컨벤션
팀 프로젝트를 시작할 때 이거에 대해서 깊은 논의가 이루어지지 않아서 혹시라도 코드 네임 때문에 헷갈리는 일이 생기지 않을까 싶었는데 역시 문제가 생겼다.
코드 네임이 제각각이다 보니 합치는 도중에 충돌이 일어나서 지우려고 보니 어떤 걸 지워야 하고, 어떤 걸 남겨야 하는지 엄청 헷갈리더라.
덕분에 왜 처음에 코딩 컨벤션을 진행하는지 깨달았다.
2. 충돌(Conflict)
위의 코딩 컨벤션에서 이어지는 내용인데 이렇게 코드 네임이 통일되지 않아서인지 pull request를 하는 과정에서 여러가지 충돌이 일어났다.
충돌이 일어나는 이유도 가지각기다.
같은 기능인데 이름만 달라서 중복됐다던가, 혹은 동시에 작업해서 동시에 pull request를 하다보니 생기기도 했다.
이 충돌은 예기치 않게 터지기도 해서 완벽하게 막기는 불가능하고, 충돌이 생겼을 때 최대한 잘 수습하는 것이 중요했다.
3. 실행 오류
내가 직접 실시간으로 코드를 다 짜는 것이 아니라 팀원이 짜둔 코드를 합치다보니 예기치 않은 오류들이 종종 발생했다.
그 원인 중에 하나로는 위에서 말한 코드 최적화가 안 되서도 있고, 하나의 레이아웃에 일반 버전과 API 31 이상 버전 두 가지가 동시에 있다보니 버튼을 누르는 순간 앱이 강제 종료되는 오류도 있었다.
그래도 Android Studio는 이런 점에서는 굉장히 친절해서, 뭐 때문에 오류가 생기는지, 그리고 해결하는 방법을 잘 알려주고 더러는 문구만 누르면 알아서 해결시켜주는 경우도 있다. (물론 친절하게 알려주는 것과는 별개로 영어로 쏼라쏼라하는 점과 그 문구가 더럽게 전문성이 가미된지라 이해하는 건 또 별개의 문제다. 그래서 구글링이 존재한다)
그 와중에 나는 에뮬레이터 자체 오류가 생겨서 실행조차 안 되는 어이없는 일까지 터지는 중이다….
4. 기능 구현 차이
각 팀원마다 기능을 구현한 정도가 달라서 상호작용을 해보고 싶어도 할 수 없는 경우가 생기기도 했다. 나도 몇 개는 어떻게 구현해야할지 몰라서 못 한 부분도 있었고. (대표적인 것이 바로 언어 설정.)
하지만 이건 개인 플레이가 아니라 팀 플레이이기 때문에 이런 부족한 부분은 바로바로 팀원들과 이야기하면서 진전시켜 나가고 개선시키는 것으로 차츰 해결했다.
어느덧 팀 프로젝트도 중반을 넘어서 후반을 바라보는 중인데 과연 내일은 이 프로젝트를 완성시킬 수 있을까?
(부디 연장근무만은 제발)
'[TIL][내일배움캠프]' 카테고리의 다른 글
[내일배움캠프][TIL] 24.01.02 (화) - 체육복, 팀 프로젝트 결산 (1) | 2024.01.02 |
---|---|
[내일배움캠프][TIL] 23.12.29 (금) - 팀 프로젝트 4일차 : 팀 프로젝트 앱 완성시키기 (1) | 2023.12.29 |
[내일배움캠프][TIL] 23.12.27 (수) - 팀 프로젝트 개발 2일차 : 개발 초기 (1) | 2023.12.27 |
[내일배움캠프][TIL] 23.12.26 (화) - 문자열 나누기, 팀 프로젝트 개발 논의 (0) | 2023.12.26 |
[내일배움캠프][TIL] 23.12.22 (금) - 카드 뭉치 (1) | 2023.12.22 |