본문 바로가기
Kotlin/Kotlin 문법

코틀린 기본 문법 복습

by MonoSoft 2022. 8. 9.
728x90
반응형

코틀린 기본 문법 복습

 

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())

}

 

728x90
반응형

댓글