4 분 소요

문법 사용하기 위해서는

Kotiln 창이 따로 만들어 쓸수 있다.

코틀린 창

Android 창에서 코틀린 창 열수있다

코틀린 창

문법 기초

변수 선언

val 은 상수이고 var 은 변수이다

val pi : Double = 3.14

기본 자료형

자료형 크기
Byte 1Byte
Short 2Byte
Int 4byte
Long 8byte
자료형 크기
Double 8Byte
Float 4Byte

Float 형으로 지정시 값 뒤에 F 추가해야한다.

val numDouble : Double =3.2
val numFloat : Float = 3.2f
자료형 크기
vhar 문자
String 문자열
val char1 : Char ='b'
val String1 : String = "hell"

| 자료형| 크기 | |:—- :|:—- :| |Boolean| true,false |

배열 문자열

배열 문자는 Array<자료형> 으로 선언하고 arrayOf 하는 함수로 만든다

val stringArray : Array<String> = arrayOf("apple","banana")
val intArray = arrayOf(1,32,3)

println(stringArray[0])

함수

함수 기본형태는 다음과 같다

fun 함수명 (매개변수) : 반환 자료형 {
    // 실행할 코드
}

다음 예시로 보여주고 Unit은 값을 반환할게 없다는 의미이다

fun printage(age :Int) : Unit {
    println(age)
}

printage(10)

문자열 템플릿

변수 문자열을 만들때에는 $ 붙여서 사용이 가능하다 변수가 많아진다면 ${} 묶어서 사용이 된다.

val prince =3000
val tax = 300

val message = "temp $prince"
println(message)

제어문

범위 클래스

Int Range, LongRange,CharRange 이 있고 예시로 다음과 같이 사용이 된다.

val numRange : IntRange = 1..5

println(numRange.contains(3))

for문

//정방향
for (i in 1..5){ 
    println(i)
}

// 역방향
for(i in 5 downTo 1){ 
    println(i)
}
// 간격 조정
for(i in 1..5 step 2){
    println(i)
}

인덱스와 함계 출력하기 위해서는 withIndex() 함수를 이용한다

val stuents = arrayOf("a","b","c")

for ((index, name) in stuents.withIndex()){
    println("$index and $name")
}

while 문

var num = 1

while (num<5){
    println(num)
    num++
}

num =1

do {
    num++
    println(num)
}while(num <5)

if 문

val examscore =50
var ispass = false

if(examscore < 50)
{
    ispass = true
}

println ("시힘 결과 : $ispass")

when 문

val weather = 15

when(weather){
    -20 ->{
        println("추운 날시")}
    11,12,13,14 -> {println("적당한 날씨")}
    in 15 .. 27 -> {println("정답")}
    !in -30..50 -> {println("오류")}
    else -> {println("오류 2")}
}

컬렉션

리스트

읽고 쓰기 모두 가능한 리스트

val numImmutableList = listOf(1,2,3) //읽기 정용
val numMutableList = mutableListOf(1,2,3) //읽고 쓰기 가능

셋 (set)

중복되지 않는 요소 만들떄 사용

val immutableSet = setOf(1,2,3,1,2,3)
val mutableSet = mutableSetOf(1,2,3,4,1,2,3)

맵 (map)

맵은 키와 값을 짝지어 저장하는 자료구조입니다. 키는 중복되지 않아야 합니다.

클래스

class Car

// 프로퍼티란 속성을 뜻한다
val car = Car("Red")
println("Sample ${car.color}")

클래스 생성자

  1. 주생성자 클래스 이름 옆에 괄호로 둘러 쌓인 코드 를 주생성자라고 한다. 아래 <h2 style ="color:Tomato" >constructor(name:String){}</h2> constructor 은 생략이 가능하다
    class Person constructor(name:String){}
    class Person (name:String){}
    class Person (val name:String){}  // 생성된 입력값을 프로퍼티에 할당
    
  2. 보조 생성자 주 생성자와 다르게 클래스 바디 내부에서 constructor 키워드를 이용하여 만듬
class Person{
    constructor(age :Int){
        println("age is $age")
    }
}
// 주 생성자가 존재할 떄는 반드시 this 키워드를 통해 주 생성자를 호출
class Person(name : String){
    constructor(name : String, age :Int) : this(name){
        println("age is $age")
    }
}
  1. 초기화 블록 객채 생성 시 필요한 작업을 하는 부분
class Person(name : String){
    val name : String

    init {
        if(name.isEmpty()){
            thorow IllegalArgumentException("이름 없어요")

        }
        this.name = name
    }
}

클래스의 상속

부모클래스에 open 키워드를 추가해야합니다. 메서드도 자식 클래스에 오버라이드 할려면 부모클래스의 매서드에 open 키워드를 추가해야합니다.

open class Flower{
    open fun waterFlower(){
        println("water Floddwer")
    }
}

class Rose : Flower(){
    override fun waterFlower() {
        super.waterFlower() //Flower 클래스의 매서드 먼저 실행
        println("rose is happyddd")
    }
}

val rose = Rose()
rose.waterFlower()

접근 제한자

이름 정의
public 코틀린의 기본 접근 제한자
internal 같은 모듈내 접금
protected 자식 클래스에서는 접근
private 클래스 내부에서만 접근

컴페니언 객체 companion

정의된 변수나 매서드들은 객체를 만들지 않고 접근

class MyClass {
    companion object {
        val myProperty: String = "Hello, World!"

        fun myFunction() {
            println("This is a companion object function.")
        }
    }
}
fun main() {
    println(MyClass.myProperty)  // "Hello, World!" 출력
    MyClass.myFunction()         // "This is a companion object function." 출력
}

추상 클래스

객체를 만들 수 없는 클래스

abstract class Animal(val name: String) {
    abstract fun makeSound()  // 추상 함수

    fun sleep() {
        println("$name is sleeping.")
    }
}

class Dog(name: String) : Animal(name) {
    override fun makeSound() {
        println("$name says: Woof!")
    }
}

class Cat(name: String) : Animal(name) {
    override fun makeSound() {
        println("$name says: Meow!")
    }
}

fun main() {
    val dog = Dog("Buddy")
    val cat = Cat("Whiskers")

    dog.makeSound()  // "Buddy says: Woof!" 출력
    cat.makeSound()  // "Whiskers says: Meow!" 출력
    dog.sleep()      // "Buddy is sleeping." 출력
    cat.sleep()      // "Whiskers is sleeping." 출력
}

# 데이터 클래스

data class memo (val title : String, val content: String)

val memo1 = memo("제목", content = "내용")

val memo1 = memo("제목", content = "내용")
val memo2 = memo1.copy(content = "변경")
println(memo1.toString()) //제목 내용
println(memo2.toString())  // 제목 변경

# 인터 페이스

클래스들이 같은 기능을 수행하게끔 강제하는것

interface Animal {
    fun makeSound()
}

class Dog : Animal {
    override fun makeSound() {
        println("Woof!")
    }
}

class Cat : Animal {
    override fun makeSound() {
        println("Meow!")
    }
}

fun main() {
    val dog: Animal = Dog()
    val cat: Animal = Cat()

    dog.makeSound()  // "Woof!" 출력
    cat.makeSound()  // "Meow!" 출력
}

댓글남기기