본문 바로가기

앱 개발/Chapter_Curriculum

Chapter3-2 (앱 개발 기초 프로젝트)

< 데이터 클래스 UserInfo 및 싱글톤 객체 UserManager 활용 >

 

1) 각 액티비티에 공통으로 적용되는 데이터를 관리하며 데이터를 주고 받는 로직이 매우 흥미로웠음.

 

2) 앱 개발의 핵심은 화면들 사이의 또는 앱과 서버와의 데이터 연동이라고 생각함.

 

data class UserInfo(
    val id: String, // email 형식으로 입력받도록 regex로 사전에 확인 필요
    val pw: String, // 비밀번호
    val nickName: String, // 프로필 이미지 아래에 표시할 닉네임
    val thumbnail: Uri?, // 프로필에 표시할 이미지, null일 경우 기본 썸네일 표시
    val introduction: String, // 프로필에 표시할 소개 문구
)

 

 

object UserManager {

    private val users: HashMap<String, UserInfo> = hashMapOf() // Key: UserId , value: UserInfo

    var isLogin: Boolean = false
    var loggedId: String = ""

    fun getUser(userId: String): UserInfo? {
        return users[userId]
    }

    fun register(userInfo: UserInfo): Boolean {
        if (userInfo.id in users) {
            return false
        }
        users[userInfo.id] = userInfo
        return true
    }

 

 

val userInfo = UserInfo(id, pw, name, null, "")
val registerSuccess = UserManager.register(userInfo)

if (registerSuccess) {
    Toast.makeText(this, "회원가입이 완료되었습니다", Toast.LENGTH_SHORT).show()
    overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
    finish()

} else {
    Toast.makeText(this, "이미 존재하는 사용자입니다", Toast.LENGTH_SHORT).show()



< isEnglish 변수 >

1) 최종 버전에는 빠졌지만 한영 전환 버튼을 구현하면서 isEnglish 변수를 사용하고 false 선언을 하여 초기 세팅을 영어가 아닌 것으로 하게 하는 것인데 처음에 람다 블록 내부에 선언했음. 그래서 isEnglish는 항상 true가 되는 문제가 있었음.

 

class LogInActivity : AppCompatActivity() {

    private lateinit var binding: ActivityLogInBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLogInBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnEng.setOnClickListener {

            var isEnglish = false
            isEnglish = !isEnglish

            val toastMessage = if (isEnglish) "Switched to English" else "한국어로 변경되었습니다"
            Toast.makeText(this, toastMessage, Toast.LENGTH_SHORT).show()

 

2) 그러나 pull request 과정에서 동료 팀원의 코드 리뷰를 통해 block scope of a variable에 대하여 알게 되었고 관련 학습을 함. 변수 선언에 대하여 더 공부할 필요를 느꼈고 다음과 같이 작성함으로써 문제 해결함.

class LogInActivity : AppCompatActivity() {

    private lateinit var binding: ActivityLogInBinding
    private var isEnglish = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLogInBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnEng.setOnClickListener {

            isEnglish = !isEnglish

            val toastMessage = if (isEnglish) "Switched to English" else "한국어로 변경되었습니다"
            Toast.makeText(this, toastMessage, Toast.LENGTH_SHORT).show()

 


< string 파일 관리 >

1) 한국어->영어 string.xml과 영어->한국어 string.xml을 각각 만들고 다음과 같이 불러옴.

val putEmail = if (isEnglish) R.string.put_email else R.string.put_email1
val putPassword = if (isEnglish) R.string.put_password else R.string.put_password1

2) Translations editor를 사용하면서 하나의 key에 default value와 변환할 언어 value를 입력함으로써 더 효율적으로 관리할 수 있었음. 

val putEmail = if (isEnglish) R.string.put_email
val putPassword = if (isEnglish) R.string.put_password

728x90

'앱 개발 > Chapter_Curriculum' 카테고리의 다른 글

Chapter 3-3 (앱 개발 숙련)  (0) 2024.04.09
[기초 프로젝트] 회고  (0) 2024.04.08
[과제] 피드백 (Android 입문)  (0) 2024.03.29
[과제] Activity 정리  (0) 2024.03.28
[과제] Fragment 정리  (0) 2024.03.27