Published 2022. 2. 17. 10:01

 

1. 함수 사용

fun 함수명(파라미터: 타입):반환타입{
    return 값
}

 

ex)

var x: Int = 10

 

fun square(x: Int): Int{

    return x*x

}

fun main(){
    var x: Int = 10
    var squareResult = square(10)
    println("${x}의 제곱근은? ${squareResult}")

    printSum(10, 20)

    val PI = getPi()
    println("파이의 값은? ${PI}")

}

// 파라미터 사용, 반환 값
fun square(x: Int): Int{
    return x * x
}

// 파라미터 사용. 반환 값 없음
fun printSum(x: Int, y: Int){
    println(" x + y = ${x + y}")
}

// 파라미터 없음.. 반환 값 있음.
fun getPi(): Double{
    return 3.14
}

2. Constructor

1) 매개변수가 있는 생성자 method가 정의 시 default 생성자 method는 자동 생성 안 됨.

매개변수가 있는 생성자가 없으면 compile 시 자동 생성 됨.

수동으로 정의할 수도 있음.

 

2) secondary constructor. 생성자에서도 overloading 규칙이 있음.

class DemoA{

    var a: Int = 0
    var b: Int = 0
    var c: Int = 0

    init{
        println("DemoA class 초기화")
    }

    // 디폴트 생성자 수동 정의
    constructor(){}

    constructor(value: String){
        println("values: ${value}")
    }

    constructor(value: Int){
        println("values: ${value}")
    }

    constructor(value1: Int, value2: String){
        println("values: ${value1}")
        println("values: ${value2}")
    }
}

3) primary 생성자 keyword 생략 가능.

접근자 없이 생성하고자 할 경우에 constructor 생략 가능.

class DemonB(a: Int, b: Int, c: Int){
    init{
        println("a파라미터 값은? ${a}")
        println("b파라미터 값은? ${b}")
        println("c파라미터 값은? ${c}")
    }
}

class DemoC{

    var a: Int
    var b: Int

    init {
        a = 10
        b = 10

        println("DemoC: ${a}")
        println("DemoC: ${b}")
    }

    constructor(){
        println("DemoC() 기본 생성자 호출됨")
    }

}

fun main(){
    var demoA = DemoA() // new keyword 사용 안 함
    demoA.a = 10
    demoA.b = 20
    demoA.c = 30

    println("demoA.a : ${demoA.a}")
    println("demoA.b : ${demoA.b}")
    println("demoA.c : ${demoA.c}")
}

 

 

공부 더 필요

 

3. 파라미터 유무에 따른 생성자 호출.

1) 파라미터가 없는 class. constructor keyword 생략. primary 생성자.

class Kotlin(){
    init {
        println("파라미터가 없는 클래스 호출")
    }
}

 

2) 파라미터가 있는 secondary constructor.

class KotlinTwo{
    constructor(value: String){
        println("파라미터 값은 ${value}")
    }
}

 

3) property와 method가 있는 class: 변수 -> property, 함수 - method

class KotlinThree {
    var one: String = "None"
    fun printOne(){
        println("one 변수 값은? ${one}입니다/")
    }
}

 

4) Object :

Java로 설명하면 static member. method 호출 시 클래스명.staticmember, 클래스명.staticmethod()

class KotlinFour {
    companion object{
        var one: String = "None"
        fun printOne(){
            println("one 변수 값은? ${one}입니다/")
        }
    }
}

 

4. Class 호출

1) 생성자 없는 Class 호출

fun main(){
    Kotlin()
}

 

2) parameter가 1개 있는 생성자 사용

fun main(){
    KotlinTwo("Hello World")
}

 

3) Class의 field와 method 사용

fun main(){
    var Kotlin = KotlinThree()
    // method 호출
    Kotlin.printOne()
    // field에 값 변경
    Kotlin.one="하나"
    Kotlin.printOne()
}

 

4) Companion Object 사용

fun main(){
    KotlinFour.printOne()
    KotlinFour.one = "한개"
    KotlinFour.printOne()
}

 

5) Data Class 사용하기

Parameter가 val 사용하면 값을 재할당 할 수 없음.

아래 코드에서 userData.name ="이순신" 할 수 없다는 것.

 

for main(){
    var userData = UserData("홍길동", 100)
    println("userData 정보? ${userData.name}")
    println("userData 정보? ${userData.age}")
    
    userData.age = 200
    println("userData 정보? ${userData.age}")
    
}

5-1) toString() method 생략됨

일반적으로 Class는 toString() method가 Class의 형 이름과 instance 주소가 출력되는데

Data Class의 특성으로 생략된다.

fun main(){
    println("userData 객체 정보? ${userData}")
    //println("userData 객체 정보? ${userData.toString()}")
}

 

5-2) 값 복사. 값만 복사한다.

fun main(){
    var newData = userData.copy()
    newData.age = 500
    println("userData 정보? ${userData.age}")
    println("userData 정보? ${newData.age}")
}

 

5. Data Class

Java의 VO에 해당하는 성격으로 data가 생성됨.

get, set 지원이 됨.

data class UserData(val name: String, var age: Int)

1) Data Class를 일반 Class로 사용 가능

data class UserData2(val name: String, var age: Int){
    init {

    }

    fun progress(){

    }
}

'Language > Kotlin' 카테고리의 다른 글

[Kotlin] 추상 Class  (0) 2022.02.17
[Kotlin] 상속과 확장  (0) 2022.02.17
[Kotlin] collection(list, map, set)  (0) 2022.02.17
[Kotlin] 배열  (0) 2022.02.16
[Kotlin] 조건문, 반복문  (0) 2022.02.16
복사했습니다!