티스토리 뷰

챌린지반 세션 5주차 과제

 

과제 1번

 

과제 내용

안드로이드 숙련주차 개인과제 때 만들었던 프로젝트에

함수형 프로그래밍을 활용한 함수를 2개 이상 만든다. (변경도 가능)

 

 

점검사항

- 해당 함수는 Pure function을 만족하는가
- 해당 함수는 실행순서가 바뀌어도 정상동작하는가
- 해당 함수는 Side Effect가 없는가

한 마디로 만들어둔 함수 2개를 순수함수로 바꾸라는 과제이다.

 

 

데이터 초기화 함수

private fun initData() {
    dataList.add(Item(...))
    ...
}

기존에는 dataList라는 외부 변수에 사이드 이펙트를 발생시켜 데이터를 초기화했다.

 

private fun initData(): MutableList<Item> {
    val dataList = mutableListOf<Item>()
    dataList.add(Item(...))
    dataList.add(Item(...))
    return dataList
}

함수 내에서 dataList를 생성하고 초기화 후 반환하는 형식으로 바꿔서 작성했다.

이 함수는 전역 변수에 의존하지 않으며, 사이드 이펙트 없이 동일한 결과를 반환한다.

 

 

아이템 가격 반환함수

private fun itemPrice(price:Int?): String{
    return DecimalFormat("#,###").format(price) + "원"
}

아이템 가격을 인자로 받아 1000단위로 콤마를 찍은 문자열을 반환하는 함수이다.

이 함수는 입력에만 의존하며, 사이드 이펙트를 발생시키지 않기에 순수함수에 해당한다.

 

 

 

과제 2번

 

과제 내용

안드로이드 숙련주차 개인과제에 확장함수를 활용한 기능 1개이상 만들기

 

 

액티비티 확장 함수 만들기

fun Activity.notification(){
    val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    val builder: NotificationCompat.Builder
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val channelId = "one-channel"
        val channelName = "Alarm"
        val channel = NotificationChannel(
            channelId,
            channelName,
            NotificationManager.IMPORTANCE_DEFAULT
        ).apply {
            description = "Alarm Channel"
            setShowBadge(true)
            val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
            val audioAttributes = AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .setUsage(AudioAttributes.USAGE_ALARM)
                .build()
            setSound(uri, audioAttributes)
            enableVibration(true)
        }
        manager.createNotificationChannel(channel)
        builder = NotificationCompat.Builder(this, channelId)
    } else {
        builder = NotificationCompat.Builder(this)
    }
    builder.run {
        setSmallIcon(R.mipmap.ic_launcher)
        setWhen(System.currentTimeMillis())
        setContentTitle("키워드 알림")
        setContentText("설정한 키워드에 대한 알림이 도착했습니다!!")
    }
    manager.notify(1, builder.build())
}

ActivityExtension.kt라는 코틀린 파일 하나 만들어서

거기다가 알림 수신 함수를 액티비티의 확장 함수로 정의하였다.

 

이렇게 하면 모든 액티비티에서 notification함수를 호출할 수 있다.

 

 

확장함수 호출

binding.ivNotification.setOnClickListener{
    checkNotiPermission()
    notification()
}

notfication 함수는 액티비티 어디에서나 호출이 가능하다.

 

 

tmi

 

안드로이드 스튜디오에서 확장 함수는 함수명이 파란색으로 표시된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함