Android

Android/Study

[Android] ListAdapter에서 DiffCallBack 정리

블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다. 조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자 저번에 RecyclerView에 대해서 포스팅을 하였을 때 https://superohinsung.tistory.com/314 [Bong#] RecyclerView에서 onCreateViewHolder와 onBindViewHolder의 차이 블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다. 조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자. 졸업 프로젝트에서는 다른 여타 프로젝트와 달리 superohinsung.tistory.com 아래와 같은 코드를 본 적이 있을 것이다. companion object { private val diffC..

Android/Study

[Android] 포스팅 업로드 구현 (4) - Repository

전체 코드 data class PostDto( val uuid: String = "", val writerUuid: String = "", val content: String = "", val imageUrl: String = "", val dateTime: Date = Date() ) @RequiresApi(Build.VERSION_CODES.O) suspend fun uploadPost( content: String, imageUri: Uri ): Result { val currentUser = Firebase.auth.currentUser require(currentUser != null) val db = Firebase.firestore val storageRef = Firebase.storage..

Android/Study

[Android] 포스팅 업로드 구현 (3) - 화면 XML

이번에는 화면 구현 XML에 대해서 리뷰해보자. 사실 크게 어려운 부분은 없다. XML을 통해서 화면을 구현할 때마다 느끼는 것이지만 사실 디자인적인 재능도 있어야하나 싶다.. 전체코드 실제 구현 화면

Android/Study

[Android] 포스팅 업로드 구현 (2) - ViewModel

이번에는 PostCreateViewModel에 대해서 리뷰를 해보자. 전체 코드 class PostCreateViewModel : ViewModel() { private val _uiState = MutableStateFlow(PostCreateUiState()) val uiState = _uiState.asStateFlow() fun selectImage(uri: Uri) { _uiState.update { it.copy(selectedImage = uri) } } fun changeToEditMode() { _uiState.update { it.copy(isCreating = false) } } @RequiresApi(Build.VERSION_CODES.O) fun uploadContent(conte..

Android/Study

[Android] 포스팅 업로드 구현 (1) - Activity

이번에는 포스팅을 업로드하는 PostCreate 부분에 대해서 리뷰를 해보자. 이 기능은 EditTextView 뿐만 아니라 이미지 또한 스마트폰 갤러리에서 선택하여 파이어베이스 저장소에 저장해야 전체코드 class PostCreateActivity : AppCompatActivity() { lateinit var binding: ActivityPostCreateBinding private val viewModel: PostCreateViewModel by viewModels() private val fileChooserContract = registerForActivityResult(ActivityResultContracts.GetContent()) { imageUri -> if (imageUri !=..

Android/Study

[Android] 로그인 기능 구현 (4) - Repository

object AuthRepository { suspend fun signIn(email: String, password: String): Result { return try { Firebase.auth.signInWithEmailAndPassword(email, password).await() Result.success(Unit) } catch (e: Exception) { e.printStackTrace() Result.failure(e) } } } 이번에는 AuthRepository 코드에서 설명하고자 한다. Firebase를 기반으로 로그인, 로그아웃, 회원가입 기능을 만들었기에 Firebase 인증(Authentication)과 관련된 기능을 처리하는 AuthRepository라는 싱글톤 객체를 ..

Android/Study

[Android] 로그인 기능 구현 (3) - ViewModel

이번에는 ViewModel에 대해서 어떤식으로 구성을 하였는지에 대해서 보이려고 한다. 코드 import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.sangsangstagram.data.AuthRepository import com.google.firebase.auth.ktx.auth import com.google.firebase.ktx.Firebase import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update impo..

Android/Study

[Android] ktlint, detekt를 적용해보기

오늘은 ktlint, detekt에 대해서 공부를 해보자. Ktlint와 Detekt는 모두 Kotlin 언어로 작성된 코드에서 코드 품질을 유지하고 개선하기 위한 도구들이다. ktlint 목적: Ktlint는 Kotlin 코드의 일관된 스타일을 유지하고 코드 포맷을 검사하는 데 사용된다. 기능: 코드 포맷팅 규칙을 정의하고 이를 기반으로 Kotlin 코드의 스타일을 검사한다. 코드베이스의 일관된 형식을 유지하면서 코드 리뷰 및 유지보수를 용이하게 한다. 사용법: Ktlint는 Gradle, Maven, 등의 빌드 도구에서 통합하여 사용할 수 있다. 터미널에서 직접 사용하거나 CI/CD 파이프라인에 통합하여 자동 검사할 수 있다. detekt 목적: Detekt는 Kotlin 코드에서 일반적인 코드 품질..