코틀린 퀴즈 -1 컬렉션, 생성자, 추상클래스, 인터페이스

🔥 Problem 1
코틀린에서는 컬렉션에 자료 수정 가능여부를 제한할 수 있다.
1-1. List 자료구조를 사용하여 aList를 생성하라. String 타입이다. 리스트에 값3개를 초기화한다.
1-2. 초기화 후 리스트에 "data" 값을 추가하려한다. aList.add("data") 👉가능할까?
1-3. 가능하다면 이유가 무엇인가? 불가능하다면 리스트를 어떻게 수정해야할까?
🔥 Problem 2
생성자의 인자를 통해 바로 클래스 내부의 프로퍼티에 값을 할당하는 코드를 작성하시오. -시연
class의 이름은 Foo이며 두개의 프로퍼티를 갖는다.
첫번째 프로퍼티의 타입은 Int, 이름은 a 이고 한번 할당되면 값을 바꿀 수 없다.
두번째 프로퍼티의 타입은 String, 이름은 b 이고 할당 된 후에도 값 수정이 가능하다.
🔥 Problem 3
Shape 인터페이스를 작성하는데 한 개의 프로퍼티와 두개의 함수를 가지고 있다. -찬영
프로퍼티의 타입은 Int이고 이름은 width 이고, 수정이 가능한 값이다.
첫번째 함수의 타입은 Double 이고 이름은 getWidth 이다. 이 함수에는 구현부를 만들지마라.
두번째 함수의 타입은 Unit 이고 이름은 islarge 이다. 이 함수에는 구현부를 만드는데 아무것도 넣지마라.
🔥 Problem 4
해당 추상 클래스와 인터페이스의 인스턴스를 생성하시오 -시연
(단, 인스턴스의 이름은 foo 이며 한번 할당 되면 수정이 불가능하다.)
4-1)
추상 클래스는 다음과 같이 선언되어 있다.
abstract class Foo {
abstract fun bar()
}
4-2)
인터페이스는 다음과 같이 선언되어 있다.
interface Bar {
fun baz()
}
답
🍀 Solution 1
1-1
aList.add("dd"); val aList : List = listOf("aa", "bb", "cc");
1-2
불가능하다. 그 이유는 List 인터페이스는 불가변이기 때문이다. 즉, 값을 수정할 수 없다.
1-3
val bList : MutableList = arrayListOf("aa", "vv", "cc");
bList.add("data"); // MutableList이기 때문에 추가 가! 능!
🍀 Solution 2
class Foo (val a : Int, var b : String)
🍀 Solution 3
interface Shape{
var width : Int
fun getWidth() : Double
fun isLarge() {}
}
👉 구현부 {}가 존재하지 않으면 반드시 구현해야한다. 즉, width와 getWidth()는 반드시 구현해야한다.
구현부{} 가 존자하는 isLarge()는 구현이 되어있기 때문에 반드시 구현할 필요가 없다.
🍀 Solution 4
4-1
val foo = object : Foo(){
override fun bar()
}
💥주의💥
추상클래스는 클래스이기 때문에 반드시 인스턴스 생성 시 Foo() 맞음. Foo 아님. 생성자를 사용한다.
4-2
val foo = object : Bar {
override fun baz()
}
💥주의💥
인터페이스는 인터페이스 이름 형태로 인스턴스 생성. Bar() 아님. 그냥 Bar