최종 팀프로젝트 TIL(13)

jxxn_a·2023년 10월 26일
0

팀프로젝트

목록 보기
18/33

🐱 With All My Animal 🐶

💡 [ 13일차 10/26일 ] 💡

📌 오늘의 기술면접 질문 Q&A

1) 함수형 프로그래밍과 객체지향 프로그래밍의 차이는 무엇일까요?

🐻 함수형 프로그래밍

  • 계산을 수학적 함수의 계산으로 취급하고 상태와 변경 가능한 데이터를 피하는 것을 중시하는 프로그래밍 패러다임이다.

  • 순수 함수를 사용하여 사이드 이펙트(프로그래밍에서 함수가 외부의 상태를 변경하거나 함수 내에서 외부 상태에 의존하는 것)가 없는 코드를 작성하며, 높은 수준의 추상화를 제공한다.

  • 구현이 복잡하고 이해가 어렵다는 단점이 있다.

  • 쉽게 설명하자면, 수학 문제를 풀 때 같은 함수에 같은 값을 넣으면 그 결과는 항상 같아야한다. 이런 방식은 코드가 예측 가능하게 만들어주고 버그를 줄여준다.


🐼 객체지향 프로그래밍

  • 프로그램을 객체들의 집합으로 보고, 각 객체들이 상호작용하면서 작업을 수행하게 되는 패러다임이다.

  • 코드 재사용성과 유지보수가 용이하다.

  • 상태를 변경할 수 있는 능력 때문에 사이드 이펙트를 유발할 수 있다는 단점이 있다.

  • 쉽게 설명하자면, 자동차라는 객체가 있다면, 그 자동차는 색상/ 모델/ 제조사 등의 속성을 가지고 있으며, 달린다/ 멈춘다/ 방향을 전환한다 등의 행동을 할 수 있다.
    이러한 방식은 복잡한 문제를 작은 부분으로 나누어 해결하는데 도움을 준다.


2) 안드로이드 4대 컴포넌트는 무엇인가요?

  • 각 컴포넌트는 서로 다른 역할을 가지며, 서로 독립적으로 존재하거나 서로 상호작용하면서 앱의 전체적인 기능을 구현한다.

🐶 Activity

  • 사용자 인터페이스를 구성하는 컴포넌트이다.

  • 사용자가 앱과 상호작용하는 화면을 나타낸다.

  • 예시) 이메일 앱에서 메일 목록을 보여주는 화면, 메일 작성하는 화면 등


🐱 Service

  • 백그라운드에서 오래 걸리는 작업을 수행하는 컴포넌트이다.

  • 사용자 인터페이스를 제공하지 않으며, 주로 네트워크 트랜잭션 처리, 음악 재생 등의 작업에 사용된다.

  • 예시) 음악 재생 앱에서 음악 재생 서비스는 사용자가 다른 앱을 사용하거나 잠금화면이 나타나도 계속해서 음악을 재생한다.


🐯 Broadcast Receiver

  • 안드로이드 세스템에서 발생하는 다양한 이벤트나 정보를 받아 처리하는 컴포넌트이다.

  • 예시) 배터리 부족, 사진 촬영, 와이파이 연결 등의 이벤트를 감지한다.


🦁 Content Provider

  • 앱 간의 데이터 공유를 관리하는 컴포넌트이다.

  • 예시) 주소록, 사진, 파일 등의 데이터를 다른 앱에서 사용할 수 있도록 공유한다.


📌 Mypage에 유저 정보 불러오기

    private fun loadUserData() {
        val userId = Firebase.auth.currentUser?.uid
        if (userId != null) {
            val userProfileRef =
                FirebaseDatabase.getInstance().getReference("users").child(userId)
                    .child("profile")
            userProfileRef.addListenerForSingleValueEvent(object : ValueEventListener {
                override fun onDataChange(snapshot: DataSnapshot) {
                    val userIdname = snapshot.child("userIdname").getValue(String::class.java)
                    val petName = snapshot.child("petName").getValue(String::class.java)
                    val birth = snapshot.child("birth").getValue(String::class.java)
                    val statsMessage = snapshot.child("statusMessage").getValue(String::class.java)
                    storageRef.child("profileImages").child("$userId.png").downloadUrl.addOnSuccessListener {
                        binding.imgMypageProfile.load(it)
                    }.addOnFailureListener {
                    }

                    binding.tvMypage.text = petName
                    binding.tvMypageNickname.text = userIdname
                    binding.tvMypageBirth.text = birth
                    binding.tvMypageMessage.text = statsMessage
                }

                override fun onCancelled(error: DatabaseError) {
                    Log.e("MypageFragment", "Error loading user data: ${error.message}")
                }
            })
        }
    }

0개의 댓글