고차함수)
함수를 마치 클래스에서 만들어 낸 '인스턴스처럼' 취급하는 방법
함수를 패러미터로 남겨줄수도있고 '결과값으로 반환' 받을수도있는 방법
코틀린에서는 모든 함수를 고차함수로 사용 가능

예시)
fun a(str: String){
println("$str 함수 a")
}
// Unit 함수 자료형의 일종(반환값이 null일 경우 Unit)
fun b(function: (String)->Unit) {
function("b가 호출한")

}
fun main() {
b(::a)
}

람다함수)
fun a(str: String){
println("$str 함수 a")
}
// Unit 함수 자료형의 일종(반환값이 null일 경우 Unit)
fun b(function: (String)->Unit) {
function("b가 호출한")

}
fun main() {
b(::a)

val c:(String)->Unit = { str -> println("$str 람다함수")}
b(c)
}

Posted by 모과이IT
,

패키지)
자바는 폴더와 패키지명을 일치 시켜야 하나 코틀린에서는 폴더와 패키지명을 일치시킬 필요없이
코틀린 파일 상단에 패키지명을 기재하면되고 패키지 키워드 기준으로 구분되어지도록 설계되어졌음
그래서 파일과 클래스명을 일치 시키지 않아도 되며 한 파일에 여러 클래스가 있어도 컴파일러서
패키지 키워드 기준으로 알아서 컴파일 해주도록 되어있음

Posted by 모과이IT
,

클래스 상속가능한 키워드인 open과 마찬가지로 함수에서도 오버라이드 가능하도록
open 키워드를 붙여준 함수에 한해서 override 키워드를 붙여서 오버라이드(함수 재정의)를 
할수있다.

사용예시)
open class Aclass(var name:String, var age:Int, var type:String)
{
open fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")

}
}
class Dog (name:String, age:Int) : Aclass(name,age,"개")
{
override fun introduce(){
println("Dog 클래스에서 오버라이딩한 함수")
}

}
fun main(){
var a = Aclass("별이",5,"개")
var b = Dog("별이",5)
a.introduce()
b.introduce()
}

추상화)
추상화할 클래스 나 함수에 abstract를 키워드를 붙여준다

사용예시)
abstract class Animal{
abstract fun eat()
fun sniff() {
println("킁킁")
}
}

class Rabbit : Animal(){
override fun eat(){
println("당근을 먹습니다")
}
}
fun main(){
var r = Rabbit()
r.eat()
r.sniff()
}

인터페이스)
구현부가 있는 함수 -> open 함수로 간주
구현부가 없는 함수 -> abstract 함수로 간주

사용예시)

interface Runner {
fun run()
}
interface Eater {
fun eat() {
println("음식을 먹습니다")
}
}
class Dog : Runner, Eater {
override fun run() {
println ("우나나나 뜁니다")
}
}
fun main() {
var d = Dog()
d.run()
d.eat()
}

Posted by 모과이IT
,

open 클래스)
상속 가능한 클래스임을 명시해주는 키워드

상속 예시)
open class Aclass(var name:String, var age:Int, var type:String)
{
fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")

}
}
class Dog (name:String, age:Int) : Aclass(name,age,"개")
{
}
fun main(){
var a = Aclass("별이",5,"개")
var b = Dog("별이",5)
a.introduce()
b.introduce()
}

Posted by 모과이IT
,

흐름제어)
break, continue 는 일반 기존에 언어와 비슷함
label)
외부 반복문에 레이블 이름과 @ 기호를 달고
break(continue도 동일) 문에서 @과 레이블이름을 달아주면
label이 달린 반복문을 기준으로 즉시 break를 시켜준다
예시)
fun main(){
  label@for(i in 0..5){
        for(j in 0..5){
            if(i == 1 && j==2) break@label
            println("i : $i, j: $j")
        }
    }   
    
}

논리연산자)
기존 언어 똑같음

Posted by 모과이IT
,

while, do while 고전적인 언어와 똑같음

for는 고전적인언어와 다르다)
for(i in 0..9)
=> 0~9까지 순회
for(i in 0..9 step 3)
==> 3씩 증가 0,3,6,9
for(i in 9 downTo 0)
=> 9~0까지 순회
for(i in 'a'..'e')
=> a~e까지 순회 char에서 사용

Posted by 모과이IT
,

when 비교연산자 swich의 업그레이드버전
사용예시)

fun main(){
    doWhen(1)
doWhen("Min")
doWhen(12L)
doWhen(3.14159)
doWhen("Kotlin")
}
// Any 모든 자료형 허용 자료형의 최상위
fun doWhen1(a: Any){
when(a){
1 -> println("점수는 1")
"Min" -> println("민 글자")
is Long -> println("Long 타입")
!is String -> println("String 타입이 아닙니다")
else -> println("어떤 조건도 만족하지 않습니다")

}
}
// 리턴값 형태
fun doWhen2(a: Any){
var result = when(a){
1 -> "점수는 1"
"Min" -> "민 글자"
is Long -> "Long 타입"
!is String -> "String 타입이 아닙니다"
else -> "어떤 조건도 만족하지 않습니다"
}
println (result)
}

Posted by 모과이IT
,

3. 타입추론과 함수
타입추론 - 변수 선언시에 자료형을 선언하지 않아도 자동으로 추론해서 선언해줌

함수 선언 방법) - 맨 끝에 Int는 return 자료형 없다면 비워둠(void)
fun add(a: Int, b: Int): Int {
return a+b
}
단일 표현식 함수) - 변수처럼 선언(간단한 역할 함수만), 타입추론 가능하여 반환형 생략가능
fun add(a: Int, b: Int) = a+b

Posted by 모과이IT
,

2. 형변환과 배열

형변환 방법)
변수.to자료형()
ex) Int 에서 Long으로 변환
var a:Int = 123
var b:Long = a.toLong()

배열 선언 방법)
Array<T>
var intArr = arrayOf(1,2,3,4,5)
자료공간 지정하고 null값으로 초기화 방법)
var nullArr = arrayOfNulls<Int>(5)
배열 값 할당 및 방법)
intArr[2] = 8
println(intArr[4])

Posted by 모과이IT
,

1. 변수와 자료형

자바에서의 int,boolen,String 등 변수의 자료형은 그대로 가지고 있으나 차이점은

그 자료형 상위에 var, val 2가지 자료형이 존재한다. var는 read,write가 가능한 일반적인

변수라고 생각하면 되면 val는 초기값이 정해진 이후에는 read,write가 불가능한 함수 상수변수라고 

생각하면된다.

 

코틀린은 기본적으로 'null'값 허용 하지 않으나 'null'값이 필요할 시에는 변수 선언시 자료형뒤에 '?'키워드를

넣어주미녀된다

null  허용하지 않는 변수선언 ex)


var a: Int = 123
a = 123
println(a)

 

nullable 변수 ex)
var b: Int? = null

변수 정수형 -> byte, Short, Int, Long
실수형 -> Float, Double
문자열 -> char, boolean
문자열은 기본 String
자바와 호환으로 거의 동일



Posted by 모과이IT
,