[Android/Kotlin 02-1] 자기소개앱 만들기(로그인, 회원가입, 자기소개)

이다을·2023년 8월 1일
0

안드로이드 스튜디오를 활용해 간단한 자기소개앱을 만들어 보겠습니다. 😆
또한, 로그인 페이지에서 아이디와 비밀번호를 입력하여 값을 넘겨주고, 자기소개 페이지에서 불러오는 로직도 추가로 구현하는 것을 목표로 합니다.

<구현해야 할 페이지>

  1. 로그인 페이지
  2. 회원 가입 페이지
  3. 자기소개 페이지

1) 로그인 페이지(SignInActivity)

  • 로고 넣기
  • 아이디, 비밀번호를 입력받는 EditText넣기(미리보기 글씨)
  • 비밀번호는 EditText내용 가리기
  • 로그인 버튼을 누르면 HomeActivity 실행(Extra로 아이디 넘겨주기)
  • 아이디/비밀번호가 모두 입력되어야 로그인 실행(“로그인 성공” 토스트 메세지 출력)
  • 아이디/비밀번호 중 하나라도 비어있다면(“아이디/비밀번호를 확인해주세요” 토스트 메세지 출력)
  • 회원가입 버튼을 누르면 SignUpActivity 실행
로그인 이미지 보기
package com.example.signinactivity

import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast

class SignInActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        val login = findViewById<Button>(R.id.btn_login)
        val join = findViewById<Button>(R.id.btn_join)
        val idText = findViewById<EditText>(R.id.idText)
        val pwText = findViewById<EditText>(R.id.pwText)

        val intent = Intent(this,HomeActivity::class.java)
        intent.putExtra("name", "value")
        intent.putExtra("id", "value")
        startActivity(intent)

        // 로그인
        login.setOnClickListener {
            val inputId = idText.text.toString()
            val inputPw = pwText.text.toString()
            checkToast(this, inputId, inputPw)
        }
        // 회원가입
        join.setOnClickListener {
            join()
        }
    }
	// 토스트 메세지
    private fun showToast(context: Context, message: String) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
    }
  	// 아이디 or 비밀번호 중 하나라도 입력받지 못했을 때
    private fun checkToast(context: Context, inputId: String, inputPw: String) {
        val trimmedId = inputId.trim()
        val trimmedPw = inputPw.trim()
        if (trimmedId.isEmpty() || trimmedPw.isEmpty()) {
            showToast(this, "아이디/비밀번호를 확인해주세요.")
        } else {
            showToast(context, "로그인 성공!")
            val intent = Intent(this, HomeActivity::class.java)
            startActivity(intent)
        }
    }
  	// 회원가입으로 넘어가는 버튼
    private fun join() {
        val intent = Intent(this,SignUpActivity::class.java)
        startActivity(intent)
    }
}

😃 Point 1 : 엑티비티 onCreate 역할

'override fun onCreate'함수는 'AppCompatActivity'클래스의 생명을 주는 메서드 중 하나로, 안드로이드 액티비티의 진입점 역할을 합니다! 따라서 'onCreate'함수는 Java의 'main'메서드나 Kotlin의 'fun main()' 함수와 유사한 역할을 수행합니다.

'onCreate' 함수는 액티비티가 생성되면 최초에 실행되는 함수로 액티비티의 초기화 작업이나 레이아웃 설정 등을 수행하고, 가장 처음에 호출되는 함수입니다.
(초기화 작업, 필요한 동작 등의 코드를 작성)

그러나 차이점으로는 'onCreate'함수는 액티비티의 생명주기와 관련하여 특정한 목적으로 사용되는 반면에 'main' 함수는 어플리케이션 전체를 시작하는 역할을 합니다.

😃 Point 2 : 생명주기 관리와 가독성

처음에 Toast 메세지를 띄울 부분의 코드를 작성하는데 계속해서 오류가 났습니다. 이유를 찾아보니 'onCreate'함수는 사용자가 정의하는 함수가 아닌 프레임워크에서 상속한 메서드이므로, 기능을 확장하거나 커스터마이징을 하기 위해서는 외부로 빼주는 것이 좋다고 합니다.

클래스가 커지고 코드가 복잡해질수록 onCreate 함수 내부에 작성된 코드는 쉽게 무시되거나 분석하기 어려울 수 있습니다. 하지만 외부로 빼주면 해당 액티비티의 생성 로직이 명확하게 드러나며, 코드의 유지보수가 쉬워진다고 합니다.


2) 회원가입 페이지(SignUpActivity)

  • 타이틀 이미지 넣기
  • 이름, 아이디, 비밀번호 모두 입력되었을 때만 회원가입 버튼 가능
  • 셋 중 하나라도 비어있다면("입력되지 않은 정보가 있습니다." 토스트 메세지 출력)
  • 비밀번호는 EditText내용 가리기
  • 회원가입 버튼이 눌리면 SignInActivity로 이동(finish 활용)
회원가입 이미지 보기
package com.example.signinactivity

import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast

class SignUpActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign_up)

        val name = findViewById<EditText>(R.id.editName)
        val idText = findViewById<EditText>(R.id.editId)
        val pwText = findViewById<EditText>(R.id.editPw)
        val join = findViewById<Button>(R.id.btn_join)

        // 회원가입
        join.setOnClickListener {
            val inputName = name.text.toString()
            val inputId = idText.text.toString()
            val inputPw = pwText.text.toString()
            checkToast(this, inputName, inputId, inputPw)
        }
    }
	// 토스트 메세지 띄우기
    private fun showToast(context: Context, message: String) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
    }
  	// 이름 or 아이디 or 비밀번호 중 하나라도 입력받지 못했을 때
    private fun checkToast(context: Context, inputName: String, inputId: String, inputPw: String) {
        val trimmedName = inputName.trim()
        val trimmedId = inputId.trim()
        val trimmedPw = inputPw.trim()
        if (trimmedName.isEmpty() || trimmedId.isEmpty() || trimmedPw.isEmpty()) {
            showToast(this, "입력되지 않은 정보가 있습니다.")
        } else {
            val intent = Intent(this,SignInActivity::class.java)
            startActivity(intent)
            finish()
        }
    }
}

3) 자기소개 페이지(HomeActivity)

  • SignInActivity에서 받은 extra data(아이디)를 화면에 표시
  • 종료 버튼을 누르면 SignInActivity로 이동(finish 활용)

✔ 트러블 슈팅

문제점 :
원인 :
해결책 :
느낀점 :

profile
나도 개발 할래

3개의 댓글

comment-user-thumbnail
2023년 8월 1일

어떻게 구현하고 작동하는지 잘 설명해주셔서 이해가 쉽게 되었습니다! 잘보고 갑니다~~~

답글 달기
comment-user-thumbnail
2023년 8월 2일

코드에서 노력하신 흔적이 보이네요! 레이아웃도 깔끔하게 잘 구현된 것 같네요:)

답글 달기
comment-user-thumbnail
2023년 8월 2일

깔끔히 정리되어있네요 잘 배우고 갑니다!

답글 달기