티스토리 뷰
챌린지반 3주차 세션 과제
과제 1
과제 내용
요구사항에 맞춰 디자인 패턴 2개를 구현한다.
Singleton 패턴
object Logger{
fun log(message: String){
println("log: $message")
}
}
fun main() {
Logger.log("Hello, World")
}
Object로 Logger 클래스를 선언하여 싱글톤 패턴을 구현한다.
해당 클래스는 시스템 전체에서 단 하나의 인스턴스만 존재하게 된다.
클래스.메소드 형식으로 오브젝트의 메소드를 호출할 수 있다.
Stragety 패턴
interface TextAlignmentStrategy {
fun textAlign(text: String) : String
}
class LeftAlignment : TextAlignmentStrategy{
override fun textAlign(text: String) : String{
return text
}
}
class RightAlignment : TextAlignmentStrategy{
override fun textAlign(text: String):String{
return text.padStart(30)
}
}
class CenterAlignment : TextAlignmentStrategy{
override fun textAlign(text: String):String{
val padding = (30 - text.length) / 2
return text.padStart(padding + text.length).padEnd(30)
}
}
TextAlignmentSrategy라는 인터페이스를 정의하고
각 정렬 클래스는 해당 인터페이스를 상속하여 구현한다.
각 클래스에 정렬 동작을 구현하여 캡슐화를 진행하였다.
class TextEditor(var alignmentStrategy: TextAlignmentStrategy) {
fun alignText(text: String): String {
return alignmentStrategy.textAlign(text)
}
fun setAlignmentStrategy(strategy: TextAlignmentStrategy) {
alignmentStrategy = strategy
}
}
TextEditor 클래스는 정렬 전략 클래스를 생성자로 받아서
텍스트를 해당하는 정렬방식에 따라 정렬하며,
필요할 때 정렬 방식을 바꿀 수 있는 기능을 제공한다.
fun main(){
val text = "Kotlin"
val textEditor = TextEditor(LeftAlignment())
println(textEditor.alignText(text))
textEditor.setAlignmentStrategy(RightAlignment())
println(textEditor.alignText(text))
textEditor.setAlignmentStrategy(CenterAlignment())
println(textEditor.alignText(text))
}
정렬 전략 클래스를 사용하여 텍스트를 각 방향으로 정렬한다.
과제 2
과제 내용
회원가입 페이지를 MVVM 패턴으로 변경한다.
구현 사항
회원정보(이름, 아이디, 비밀번호)를 입력 후 “회원가입” 버튼을
클릭하면 Toast에 회원정보 노출시킨다.
폴더 구조
프로젝트 폴더내에 model, viewModel 폴더를 추가한다.
유저 모델
data class User(
val name: String,
val id: String,
val pw: String
)
모델은 데이터 클래스에 해당한다.
유저 클래스의 프로퍼티는 입력할 회원정보로 구성된다.
회원가입 뷰모델
class SignUpViewModel : ViewModel() {
// MutableLiveData는 데이터의 변경을 관찰할 수 있도록 함
private val _user = MutableLiveData<User>()
// 외부에서 _user에 접근할 수 있도록 하는 public 변수 선언
val user: LiveData<User> get() = _user
// 유저정보를 받아서 _user의 값을 변경한다.
fun changeUser(name: String, id: String, pw: String) {
_user.value = User(name, id, pw)
}
}
사용자 정보(User)를 관리하기 위한 뷰모델을 작성해준다.
해당 뷰모델은 User 객체를 LiveData로 관리하며,
LiveData를 사용하여 데이터의 변화를 관찰하고 UI를 업데이트할 수 있다.
회원가입 액티비티
class SignUpActivity : AppCompatActivity() {
private lateinit var viewModel: SignUpViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_sign_up)
val etName = findViewById<EditText>(R.id.et_name)
val etId = findViewById<EditText>(R.id.et_id)
val etPw = findViewById<EditText>(R.id.et_pw)
val btnSignUp = findViewById<Button>(R.id.btn_signUp)
// 뷰모델 초기화
viewModel = ViewModelProvider(this).get(SignUpViewModel::class.java)
// 뷰모델의 옵저버 설정
viewModel.user.observe(this) {
Toast.makeText(this, viewModel.user.value.toString(), Toast.LENGTH_SHORT).show()
}
btnSignUp.setOnClickListener {
val name = etName.text.toString()
val id = etId.text.toString()
val pw = etPw.text.toString()
if(name.isBlank() || id.isBlank() || pw.isBlank()){
Toast.makeText(this, "모든 정보를 입력해야 합니다.", Toast.LENGTH_SHORT).show()
} else {
viewModel.changeUser(name, id, pw)
}
}
}
}
뷰모델의 옵저버를 통해 user값의 변경을 감지하면 토스트메시지를 띄운다.
모든 정보를 입력한 뒤 회원가입 버튼을 눌렀을 때 뷰모델의
changeUser 메소드를 호출해 user값을 변경시킨다.
'내일배움캠프 > Android 국비지원' 카테고리의 다른 글
TIL 44일차 (앱개발 숙련 1주차 정리 - 2) (1) | 2024.07.22 |
---|---|
TIL 43일차 (앱개발 숙련 1주차 정리 - 1) (0) | 2024.07.13 |
TIL 41일차 (소수 찾기 - Kotiln | 코드카타 잠시 쉽니다) (0) | 2024.07.10 |
TIL 40일차 (가장 큰 수 - Kotlin | 챌린지반 3주차 세션 정리) (0) | 2024.07.09 |
TIL 39일차 (다리를 지나는 트럭 - Kotlin) (0) | 2024.07.08 |