목록Language/Kotlin (10)
한 걸음 두 걸음
Object 어떤 클래스에서 조금 변경된 객체를 생성하지만, 상위 클래스의 상속을 명시하지 않고 객체를 생성할 때 사용합니다. Object의 표현은 Java의 익명객체와 같고, 객체의 선언은 자바의 싱글턴과 비슷합니다. Companion Object는 어떤 클래스와 관계된 싱글턴이 필요할 때 사용합니다. 싱글턴 + 클래스메소드(static) (JAVA에는 Static함수가 없습니다.) 사용방법 아래처럼 Runnable을 상속받은 클래스를 따로 만들어주지않고 바로 object로 처리할 수 있엇음~ fun main(args : Array){ val t = Thread(object : Runnable); { override fun run(){ println("hello world") } } t. run() }..
데이터클래스 data class User(val name : String, var a : Int) //기본 생성자는 1개 이상이어야합니다. var 이나 val //이는 데이터값만 가지고있는 클래스입니다. //abstrct open sealed inner 등이 안됩니다. 데이터클래스를 활용하면 equals hashCode copy toStirng과 같은 함수를 자동으로 만들어줍니다. 단, 기본 프로퍼티로 지정된 변수에 대해서만 생성됩니다. 흐호호 중첩클래스 중첩클래스class A{ private val b : Int = 1; class N { fun foo() = 2; //N클래스는 b에 접근할 수 없습니다. } } var demo = A.N().foo() // 2 2. 내부클래스(inner) 이는 바깥쪽..
프로퍼티 이는 자바에서 지원하지 않지만 코틀린에 있기 때문에 알아두시는 것이 좋습니다. class Name{ var a : String = "A" }에서 getter와 setter가 생략되어있습니다. 그래서 print(Name.a) 이런식으로 사용하면 getter가 자동으로 호출됩니다. (getter와 setter가 아니라 여기서는 get() set()함수입니다.) field 식별자를 accessor에서 사용할 수 있습니다. var counter = 0 set(value){ //accessor if(value > 0) field = value }를 통해 value값을 field에 저장할 수 있습니다. const const val A = "TOP LEVEL" 그리고 lateinit도 있는데 조건이 굉장히 ..
상속 class 이름 :상속할거(){} 방식으로 사용합니다. :만 써줌으로써 할 수 있고, 아무것도 안쓸경우 Any가 상속됩니다. open class AA{x : Int} //open 키워드를 써줌으로써 상속해줄 수 있는 클래스가 됩니다. class BB(x:Int) : AA(x){}기본적으로 코틀린의 모든 클래스는 final로 만들어지기때문에 open으로 사용해주어야합니다. 파생 클래스에 기본생성자가 없는 경우에는 super키워드를 사용하여 상속클래스의 생성자를 초기화시켜주어야합니다. class MyView : View{ constructor() : super(1) //매개변수가 없는 보조생성자 constructor(a : Int) this() //인트형 a를 하나 받는 보조생성자는 this(매개변수가..
class class 이름(data : Int): { } //바디가 없으면 생략할 수 있습니다.생성자 기본생성자(primary) : 기본생성자는 클래스에 1개만 가질 수 있고, 클래스 이름 뒤에 작성합니다. class Person constructor(data : String){ }이런 식으로 사용합니다. 이 때, 어노테이션이나 접근지정자가 없을 경우 constructor를 생략하여 위처럼 쓸 수 있습니다. 기본 생성자의 코드는 init블록을 따로 만들어 작성해주어야합니다. init{ //data는 init블록 내부에서 사요할 수 있습니다. print("데이터 : $data"); } } 보조생성자 : 기본생성자를 꼭 한 번씩 호출을 해주어야합니다. class Person(val name:String){ ..
Package Package 이름.pack이름 fun 함수(){} 를 다른 곳에서 가져다가 쓰려면 import 이름.pack이름; fun A(){ 함수() }처럼 import해서 가져다쓰면 됩니다. 여기서 코틀린은 패키지를 명세하지 않아도 이름이 없는 기본 패키지에 포함되게 사용할 수 있습니다.(JAVA와 다른 부분입니다.) 함수 이름이 중복되는 경우, import nar.Bar import bar.Bar as ali2 //이런식으로 별명을 지어줌으로써 중복을 피할 수 있습니다 Label : break and return and continue 이중for문이 있을 떄 for(){ for(){ break; } } 를 하면 내부에 있는 for문만 탈출하는데 loop@를 사용하면 외부에 있는 for문까지 탈출..
if문 if문이 식으로 사용될 수 있다. val a = if(a>b) a else b;이 때 else를 반드시 명시해주어야하며, true일경우 a false일경우 b를 반환합니다. val max = if(a>b) { printf("a") a }else { print("b") b }이럴 땐 a > b가 참일 경우 a가 max에 들어가고, false일경우 b가 들어갑니다. 대신 JAVA에는 있는 코틀린이 삼항연산자가 없습니다. When switch문과 같은 것으로, 어떤 조건이 만족할 때까지 조건을 확인합니다. 때문에 break문이 필요없습니다. when (x){ 1 -> print("x = 1") 2 -> print("x = 2") else -> { print("x는 1도 2도 아닙니다.") } }이 때 ..
1. basic types 기본 타입 코틀린은 모든 타입이 객체입니다. 그래서 모두 대문자로 시작합니다. 예 ) Double, Int, Byte... java와 다른 점이 있다면 char를 숫자로 지원하지 않는다는 것입니다. val c : Char = 'a' // OK val c : Char = 45 // NO 1.1 리터럴상수 기본설정 : 10진수 (123)이나 double (2.3) 수동명시 : Long (123L ) Float ( 2.3f ) 2진수(ob0101111) 16진수 (OX0F) (8진수는 지원하지 않습니다.) 1.2 언더바 표현 val won = 1_000_000 //백만 1.3 표현 주의사항 일반 val의 경우 primitive type이지만, Nullable이나 Gen..