코틀린 기본 문법 복습
package com.monosoft.monopractice
fun main() {
//helloWorld()
//println(add(4,5))
//3.String Template
//val name = "wonho"
//val name1 = "kim"
//println("안녕하세요 ${name+name1}요" )
//println("지금 달러는 \$aaaa ")
/*주석 */
//주석 블럭지정 후 컨트롤 / 키
//forAndWhile()
//nullcheck()
ignoreNulls("kimwonho")
}
//1. 함수
fun helloWorld() : Unit { //Unit은 리턴이 없을경우
println("Hello world")
}
fun add(a:Int, b:Int) : Int { //리턴이 있는경우
return a+b
}
//2. val vs var
//val = value
fun hi() {
val a : Int = 10 //상수
var b : Int = 9 //변수
var aa : String
var name :String = "kimwonho"
}
//4.조건문
fun maxBy(a:Int, b:Int) : Int {
if(a > b) {
return a
} else {
return b
}
}
//또는
fun minBy(a:Int, b:Int) = if(a>b) a else b
fun checkNum(score : Int) {
when(score) {
0 -> println("this is 0")
1 -> println("this is 1")
2,3 -> println("this is 2 or 3")
else -> println("I don't know")
}
//또는
var b = when (score) {
1-> 1
2-> 2
else -> 3 //꼭 써야된다
}
println("b: ${b}")
when(score) {
in 90..100 -> println("you are genius")
in 10..80 -> println("not bad")
else -> println("okay")
}
}
// Expression vs Statement
//Expression? 어떤값을 만드는것 코틀린의 모든 함수는 이것
//Statement? 모모해!! 명령을 위한것
// 5. Array and List
// Array
// List 1. List(수정이 불가능한 리스트 ) 2. MutableList (수정가능한리스트)
fun array() {
val array = arrayOf(1,2,3) //초기화
val list = listOf(1,2,3) //초괴화
val array2 = arrayOf(1,"d",3.4f)
val List2 = listOf(1,"d",11L)
array[0] = 3
//list[0] = 2 변경불가
var result = list.get(0)
var arrayList = arrayListOf<Int>()
arrayList.add(10)
arrayList.add(20)
arrayList[0] = 20
}
// 6. for / while
fun forAndWhile() {
val students = arrayListOf("kim","won","ho","kkk","www")
//for문 1
for (name in students) {
println("${name}")
}
//인덱스와 이름을 함께 사용할수있음
for((index , name ) in students.withIndex()) {
println("${index+1}번째 학생 : ${name}")
}
//for문 2
var sum : Int = 0
for (i in 1..100 ) { //step 2 (2씩더하라) , downTo 1 반대로 루프 , 1 until 100 = 1~100
sum += i
}
println(sum)
//while
var index = 0
while (index < 10) {
println("curent index = {$index}")
index++
}
}
// 7. Nullable / NonNull
fun nullcheck() {
//NPE : NULL pointer Exception
var name : String = "wonho"
var nullName : String? = null //물음표를 넣으면 null이 가능하다
var nameInUpperCase = name .toUpperCase()
var nullNameInUpperCase = nullName?.toUpperCase() //null이면 null이고 아니면 대문자로 바꿔라
// ?:
val lastName : String? = null
val fullName = name + " " + (lastName?: "No lastName") //null이면 다음문장을 실행해라
println(fullName)
}
// !! : null 아니라는걸 보증한다!!
fun ignoreNulls(str : String?) {
val mNotNull : String = str!! //null 일리 없어!!
//이후 null 처리할필요없이 처리한다.
//let함수 자신의 리시브 객체를 람다식내부로 옴겨서 실행하는 구분 = 내부로 실행시켜준다.
val email : String? = "asdfsfd@hanmail.net"
email?.let {
println("my email is ${email}")
}
}
===============================================================
package com.monosoft.monopractice
//클래스
open class Human (val name : String = "wwww") {
//상속 시 open 사용
constructor (name : String, age : Int) : this(name) {
println("maname ${name}, ${age}ddkdkdk")
}
//인스턴스 생성시 동작 코드블럭 무조건 먼저 실햏됨
init {
println("start init")
}
//val name = name//"wonho"
fun eatingCake() {
println("This is so Yes..")
}
open fun singAsong() {
println("lalal")
}
}
class Korean : Human() {
override fun singAsong() {
super.singAsong()
println("djdjdjdj")
}
}
fun main() {
val korean = Korean()
korean.singAsong()
// val human = Human("1111",12)
// human.eatingCake()
//
// println("this human's name is ${human.name}")
}
========================================================
package com.monosoft.monopractice
//1. Lamda
// 람다식은 우리가 마치 value 처럼 다룰 수 있는 익명함수이다.
// 1) 메소드의 파라미터로 넘겨줄수가 있다. fun maxby( a : int)
// 2) return 값으로 사용할 수가 있다.
// 람다의 기본정의
// val lamdaName : Type = {argumentList -> codeBody}
//input int를 받아서 output int를 내보내서 number는 int로 타입을 추론해서 리턴을 해준다.
val square : (Int) -> (Int) = {number -> number*number}
val nameAge = {name : String, age :Int -> //리턴
"my name is ${name} I'm ${age}"
}
// 확장함수
val pizzaIsGreat : String.() -> String = {
this + " Pizza is the best!"
}
//this는 함수가 가리키는 오브젝트고 it 파라메타를 가리킨다.
fun extendString(name : String, age : Int) : String {
val introduceMyself : String.(Int) -> String = { "I am ${this} and ${it} years old "}
return name.introduceMyself(age)
}
//람다의 Return
val calculateGrade : (Int) -> String = {
when(it) {
in 0..40 -> "fail"
in 41..70 -> "Pass"
in 71..100 -> "pefect"
else -> "err"
}
}
//람다를 표현하는 여러가지 방법
fun invokeLamda(lamda : (Double) -> Boolean) : Boolean {
return lamda(5.2343)
}
fun main() {
val lamda : (Double) -> Boolean = {number : Double ->
number == 4.3213
}
println(invokeLamda(lamda))
println(invokeLamda({true}))
println(invokeLamda({it > 9.22})) //it는 넣는 파라메타가 오직 하나일때 it써도 됨
println(invokeLamda { it > 3.22 })
println(calculateGrade(98))
println(square(12))
println(nameAge("kimwonho",99))
val a = "kim"
val b = "won"
println(pizzaIsGreat(a.pizzaIsGreat()))
println(pizzaIsGreat(b.pizzaIsGreat()))
println(extendString("kimwon", 27))
}
==================================================================
package com.monosoft.monopractice
//POJO : 어떤모델이되는 클래스, 비어있는 어떤 틀 클래스를 푸조라고 한다.
data class Ticket(val companyName : String, val name : String, var date : String,var seatNumber : Int)
//toString(), hashCode(), equals(), copy()
class TicketNormal(val companyName : String, val name : String, var date : String,var seatNumber : Int)
fun main(){
val ticketA = Ticket("koreanAir","kimwonho","2020-02-16",14)
val ticketB = TicketNormal("koreanAir","kimwonho","2020-02-16",14)
println(ticketA) //보기쉽게 출력됨
println(ticketB) //메모리 주소값만 출력됨
}
===================================================================
package com.monosoft.monopractice
//Companion object
class Book private constructor (val id : Int, val name : String) { //private constructor는 다른곳에서 객체를 생성못하게 함
companion object BookFactory : idProvider {
override fun getId(): Int {
return 333
}
val myBooik = "name11"
fun create() = Book(0, myBooik)
}
}
interface idProvider {
fun getId() : Int
}
fun main(){
//val book = Book.Companion.create()
val bookID = Book.BookFactory.getId()
//println("${book.id} ${book.name}")
println("${bookID}")
}
======================================================================
package com.monosoft.monopractice
//Singleton Pattern
object CarFactory {
val cars : MutableList<Car> = mutableListOf<Car>()
fun makerCar(horsePower : Int) : Car {
val car = Car(horsePower)
cars.add(car)
return car
}
}
data class Car(val horsePower : Int)
fun main() {
val car = CarFactory.makerCar(10)
val car2 = CarFactory.makerCar(200)
println(car)
println(car2)
println(CarFactory.cars.size.toString())
}
'Kotlin > Kotlin 문법' 카테고리의 다른 글
한글 또는 다른언어 설정 (0) | 2022.08.16 |
---|---|
코틀린 lateinit 와 속성 참조 더블 콜론 (0) | 2022.08.08 |
contains와 startsWith 차이점 (0) | 2022.08.05 |
시간형식 리턴값 받기 (0) | 2022.08.04 |
안드로이드 True False 존재 유무 체크 함수 (0) | 2022.08.03 |
댓글