티스토리 뷰
지난 스터디에 각자 공부한 내용을 바탕으로 만들어온 문제를 정리한다!
Q1.
jin, won, chan, sion 을 항목으로 가진 리스트를 만들고, map 함수를 이용하여 다음과 같이 출력하세요.
친구의 이름 -> JIN
친구의 이름 -> WON
친구의 이름 -> CHAN
친구의 이름 -> SION
A1.
val friends = listOf("jin", "won", "chan", "sion")
friends.map{ friend -> "친구의 이름 -> " + friend.toUpperCase() }.forEach{ println(it) }
Q2.
getNum(a = true,
success = { //a가 true일 때 실행
print(it)
},
fail = { //a가 false일 때 실행
print(it)
})
위 코드는 getNum함수를 실행하는 코드이다. a가 true이면 success를 실행하고 false이면 fail을 실행하며 두 함수의 반환값은 없다.
success 실행 시 1을 출력하고, fail 실행 시 "실패입니다"를 출력하는 getNum함수를 구현하시오.
A2.
fun getNum(a: Boolean, success: (Int) -> Unit, fail: (String) -> Unit){ //매개변수로 함수를 받음
if(a){
success(1) //출력할 값을 매개변수로 보내 it으로 접근이 가능하도록 함
}else{
fail("실패입니다") //출력할 값을 매개변수로 보내 it으로 접근이 가능하도록 함
}
}
Q3.
Developer 클래스의 객체를 만드려고 한다. Developer는 language 와 team이라는 프로퍼티를 가지고 있으며,
"나는 [language]을 사용하는 [team]의 클라이언트 개발자입니다."라는 결과를 출력하는 함수를 가지고 있다.
(1) clientDeveloper라는 Developer 클래스 타입의 객체를 생성하자마자 language는 Kotlin, team은 EarlyBuddy로 설정한 후 출력 함수를 실행하시오.
(2) 위에서 만든 clientDeveloper 인스턴스로 "나는 swift를 사용하는 sopt의 클라이언트 개발자입니다"를 출력하시오.
A3.
class Developer{
var language: String = ""
var team: String = ""
fun printInfo(){
println("나는 [$language]을 사용하는 [$team]의 클라이언트 개발자입니다")
}
}
val clientDeveloper = Developer().apply { //값 생성과 초기화를 동시에 할 때는 apply를 쓰는 것이 좋음
language = "kotlin"
team = "EarlyBuddy"
printInfo()
}
clientDeveloper.run { // 값만 변경할 때는 run을 쓰는 것이 좋음
language = "Swift"
team = "SOPT"
printInfo()
}
Q4.
val list = listOf(1, 2, 3, 4)
listInt.toStringList {
true
}
//1 2 3 4 출력
val listString = listOf("AA", "BB", "CC", "DD")
listString.toStringList {
true
}
//AA BB CC DD 출력
toStringList는 확장함수이며 호출시 타입이 정해진다. 함수 선언부를 작성해라
A4.
fun <T> List<T>.toStringList(inThisArray: (T) -> Boolean){
...
}
Q5.
AutoCompleteTextView(자동완성 텍스트뷰)에 onChange라는 확장함수를 달려고 한다. onChange 확장함수가 하는 일은 해당 자동완성 텍스트뷰의 내용이 바뀔 때 마다 서버에 그 내용을 보내서 값을 불러오는 통신을 하는 것이다.
확장 함수를 작성하는 순서는 다음과 같다.
- AutoCompleteTextView에 addChangedListener 메소드로 리스너를 단다.
- 이 리스너는 TextWatcher 인터페이스의 인스턴스이다.
- TextWatcher 인터페이스는 반드시 구현해야 하는 함수 3개를 가진다.
- 통신 함수의 이름은 search()이며 이 함수의 파라미터에 검색할 내용을 넣으면 된다.
A5.
fun AutoCompleteTextView.onChange(){ //확장함수
this.addTextChangedListener(object : TextWatcher{
override fun onTextChanged(s: CharSequence?, p1: Int, p2: Int, p3: Int) {
search(s) //text가 바뀔 때마다 검색하는 함수 호출
}
override fun beforeTextChanged(s: CharSequence?, p1: Int, p2: Int, p3: Int) {
...
}
override fun afterTextChanged(s: Editable?){
...
}
})
}
'Android' 카테고리의 다른 글
[디자인패턴] MVVM 패턴 (BaseActivity, BaseViewModel 사용하기) (0) | 2020.05.03 |
---|---|
[디자인패턴] MVVM패턴 (DataBinding) (0) | 2020.03.30 |
[디자인패턴] MVVM 패턴 (MVVM의 구조와 동작, Repository pattern) (0) | 2020.03.22 |
[kotlin] 코틀린을 코틀린답게 (라이브러리 - 스트림 함수,범위 지정 함수) (0) | 2020.03.08 |
[kotlin] 코틀린을 코틀린답게 (라이브러리 - 조건 확인 함수,컬렉션 생성 함수) (0) | 2020.03.08 |