티스토리 뷰
안드(로이드 얼리)버디가 벌써 두번째 스터디를 마쳤다
각자 블로그에 글을 쓰면서 공부를 해오고 만나서는 서로 퀴즈를 내고 맞추면서 복습하는데
난 대충 넘어갔던 부분들까지 퀴즈를 맞추면서 다시 공부할 수 있어서 정말 좋은 것 같다>.<
퀴즈 내용을 정리를 안하고 가면 다 까먹을 것 같아서 스터디에서 나왔던 퀴즈들도 다 정리해놓으려고 한다
나도 다음주 스터디부터는 퀴즈 많이 준비해가야지 다음 스터디도 아주 기대가 된다 예에
Q1.
생성자의 인자를 통해 바로 클래스 내부의 프로퍼티에 값을 할당하는 코드를 작성하시오.
class의 이름은 Foo이며 두개의 프로퍼티를 갖는다. 첫번째 프로퍼티의 타입은 Int, 이름은 a 이고 한번 할당되면 값을 바꿀 수 없다.
두번째 프로퍼티의 타입은 String, 이름은 b 이고 할당 된 후에도 값 수정이 가능하다.
A1.
class Foo(val a: Int, var b: String){...}
//a는 한번 할당된 후 값을 바꿀 수 없기 때문에 val, b는 값 수정이 가능하기 때문에 var로 선언
//생성자 영역에서 인자를 변수로 선언하면 초기화없이 프로퍼피에 바로 값을 할당할 수 있어 편리
Q2.
여기서 에러가 나는 코드는 ?
val aList : List<String> = listOf("aa", "bb", "cc");
aList.add("dd");
val bList : MutableList<String> = arrayListOf("aa", "vv", "cc");
bList.add("dd");
A2.
val aList : List<String> = listOf("aa", "bb", "cc");
aList.add("dd"); //기본 List는 수정이 불가능하므로 에러 발생🚨
val bList : MutableList<String> = arrayListOf("aa", "vv", "cc");
bList.add("dd");
Q3.
한 개의 프로퍼티와 두개의 함수를 가지고 있는 Shape 인터페이스를 작성해라.
프로퍼티의 타입은 Int이고 이름은 width 이고, 수정이 가능한 값이다.
첫번째 함수의 타입은 Double 이고 이름은 getWidth 이다. 이 함수에는 구현부를 만들지마라.
두번째 함수의 타입은 Unit 이고 이름은 islarge 이다. 이 함수에는 구현부를 만드는데 아무것도 넣지마라.
A3.
interface Shape{
var width: Int
fun getWidth(): Double //구현부 없는 함수, 인터페이스 구현시 반드시 구현해줘야함
fun isLarge(): Unit {} //구현부가 비어있어도 함수가 구현된 것이므로 필요시 재정의하면 됨
}
Q4.
해당 추상 클래스와 인터페이스의 인스턴스를 생성하시오. 단, 인스턴스의 이름은 각각 foo와 bar 이며 한번 할당 되면 수정이 불가능하다.
추상 클래스와 인터페이스는 다음과 같이 선언되어 있다.
//추상클래스
abstract class Foo {
abstract fun bar()
}
//인터페이스
interface Bar {
fun baz()
}
A4.
//추상클래스의 인스턴스 생성 시 생성자 호출
val foo = object: Foo(){
override fun bar() //override 키워드 필수
}
//인터페이스에는 생성자가 없으므로 인터페이스 이름만 호출
val bar = object: Bar {
override fun baz() //override 키워드 필수
}
Q5.
첫번째 프로퍼티의 이름은 dest이고 타입 변경이 가능한 리스트이다. write만 가능하다.
두번째 프로퍼티의 이름은 src이고 타입 변경이 불가능한 리스트이다. read만 가능하다.
src로 받은 목록을 dest에 추가하는 append 제네릭 함수를 작성하여라.
open class Car {...} //open 키워드를 사용해 상속 가능한 클래스
class Sedan: Car() {...}
class Truck: Car() {...}
//append 함수
val sedans: List<Sedan> = ...
val truck: List<Truck> = ...
val cars: MutableList<Car> = ...
append(cars, sedans)
append(cars, trucks)
A5. (사실 이건 아직 답을 잘 이해를 못하겠다ㅜㅜ)
in T : Java의 ? super T와 같음, input의 약자이며 write만 가능
out T : Java의 ? extends T와 같음, output의 약자이며 read만 가능
fun <T> append(dest: MutableList<in T>, src:List<out T>){ //함수 호출 시 프로퍼티 타입이 정해짐
dest.addAll(src)
}
Q6.
Employee 라는 클래스에는 프로퍼티가 두개가 있는데,
하나는 String 타입이고 이름은 name 나머지 하나는 널값이 될 수 있는 Employee 타입이고 이름은 manager 이다.
managerName 의 함수를 만드는데 이 함수는 Employee를 파라미터 값으로 갖고 반환값은 해당 Employee의 manager의 name 이다.
A6.
class Employee(val name: String, val manager: Employee?) //manager는 null 값 가능
fun managerName(employee: Employee): String? = employee.manager?.name //return 값이 null이 될 수 있음
Q7.
조건에 맞는 클래스를 사용자 지정 getter와 setter를 사용하여 간결한 코드로 작성하시오.
클래스의 이름 : Family
프로퍼티 : familyNum(가족인원수), address(사는 곳), familyName(가족들의 이름 성), isBig(대가족 여부)
- 가족의 인원 수는 생명의 탄생과 죽음에 따라 변할 수 있다.
- 가족의 인원 수에 따른 대가족 여부를 속성 형태로 클래스에 제공해야하며, 5명 이상이면 대가족이다.
- 가족이 사는 곳 전체를 입력받으면 입력된 주소의 앞 10자만 저장하도록 구현하여라.
- 가족의 성은 바뀌지 않는다
A7.
class Family(var familyNum: Int, val familyName: String){
var isBig: Boolean? = null //대가족인지 여부를 저장하는 프로퍼티
get() = familyNum >=5 //getter를 커스텀으로 지정, boolean값을 반환
var address: String? = null //null로 초기화
set(value){ //value는 인자로 들어올 새로 지정될 주소값을 가지고 있음
field = value?.substring(0..9) //field는 address 프로퍼티
}
}
//사용 예시
val family: Family = Family(5, "kim")
println("isBig: ${family.isBig}") //true 출력
family.address = "NewYork BigHouse"
println("new address: ${family.address}") //"NewYork Bi"까지 저장되어 출력
Q8.
EditText의 값을 Float 형태로 만들 때는 EditText.text.toString().toFloat()이라는 긴 코드를 통해 만들 수 있다.
하지만, 여러개의 EditText를 모두 Float 형태로 만들 때 쟤네들을 일일히 다 호출해주는 것은 불편하다. 이를 해결하여라.
A8.
fun EditText.makeFloat(): Float {
return this.text.toString().toFloat() //this로 리시버 클래스의 인스턴스에 접근
}
Q9.
숫자를 넣으면 해당 숫자가 positive한 숫자인지 Boolean 값으로 return하는 함수를 람다 표현식을 이용해 작성하여라.
A9.
val isPositive = {num: Int -> num >= 0 }
'Android' 카테고리의 다른 글
[kotlin] 코틀린을 코틀린답게 (라이브러리 - 스트림 함수,범위 지정 함수) (0) | 2020.03.08 |
---|---|
[kotlin] 코틀린을 코틀린답게 (라이브러리 - 조건 확인 함수,컬렉션 생성 함수) (0) | 2020.03.08 |
[kotlin] 코틀린을 코틀린답게 (함수,람다표현식) (0) | 2020.03.05 |
[kotlin] 코틀린을 코틀린답게 (함수,상속과 구현,this,companion object,제네릭,예외,null 연산자) (0) | 2020.03.04 |
[kotlin] 코틀린을 코틀린답게 (클래스,프로퍼티,접근제한자,생성자) (0) | 2020.03.03 |