Kotlin

내일배움캠프 12.11 TIL

공부처음하는사람 2023. 12. 22. 20:52



> function

함수란 명령어를 담는 상자이다.

- 함수의 기본형
```kotlin
fun main() {
    println(myFun())
}

fun myFun(): Int { //인자 (파라미터, 매개변수)가 없는 함수
    val a = 10
    val b = 11
    println("a: "+a+", b:"+b)
    return a + b
}
```

- return을 생략한 함수 형태
```kotlin
fun main() {
    val aaValue = aa()
    println(aaValue)
}

fun aa(): Double {
    return 3.0 + 100
}

// 위의 함수를 간단히 줄여서 다음과 같이 사용할 수 있다.
fun aa(): Double = 3.0 + 100 
fun aa() = 3.0 + 100 
```

\- = 를 넣어 블록(중괄호), return을 생략했다. 
\- 반환자료형도 생략이 가능하다. 코틀린은 추론기능이 있기 때문.

- Default를 갖는 함수 형태
```kotlin
fun main() {
   val avg = getAvg1(77,88,)
    println(avg)
   val avg2 = getAvg1(77,88,true)
    println(avg2)
    val avg3 = getAvg1()
    println(avg3)
    val avg4 = getAvg1(print = true)
    println(avg4)
}

fun getAvg1(a: Int = 0, b: Int = 0, print: Boolean = false): Double {
    val result = (a + b) / 2.0
    if(print)
        println(result)
    return result
}
```
\- 매개변수가 기본값을 갖는 함수이다.
\- Boolean 에게 true를 주게 되면 getAvg1에서 출력, main에서 출력 총 2번 출력된다.

> 가변인수

```kotlin
fun main() {
    val sum1 = getTotal(1, 2, 3)
    val sum2 = getTotal(10, 11, 22, 33, 44, 55)
    val sum3 = getTotal(11, 22, 33, 44, 55, 66, 66, 66, 100)
    println(sum1)
    println(sum2)
    println(sum3)
}

fun getTotal(vararg num: Int): Int {
    val cnt = num.size
    var i = 0;
    var sum = 0

    while (i < cnt) {
        sum += num[i]
        i += 1
    }
    return sum
}
```
\- varag 키워드를 사용해 가변적으로 매개변수를 사용할 수 있다.
\- 가변인수와 일반인수(매개변수)는 같이 사용이 가능하나, 가변인수가 일반인수의 오른쪽에 배치되어야한다.
(안그러면 오류남)

> 오버로딩

```kotlin
fun some(a: String) {
    println("some(a: String) 호출")
}

fun some(a: Int) {
    println("(some(a:Int) 호출")
}

fun some(a: Int, B: String) {
    println("some(a:Int, b:String) 호출")
}

fun main() {
    some("Hello")
    some(100)
    some(100, "Hello~!")

}
```
\- overloading은 같은 이름의 함수를 매개변수를 다르게 해서 여러개 사용할 수 있다.
\- 매개변수를 다르게 한다는 것은 매개변수의 개수, 자료형등이 상이해야한다는 것을 뜻함

> 지역변수, 전역변수

```kotlin
var count = 0  // 함수 밖에 선언되어 있는 변수를 전역변수(Global Variable)라고 한다.

fun main() {
    val aa = 20
    println(aa)
    // 블록 안에 선언되어 있는 변수를 지역변수(Local Variable)라고 한다.
    outputCount()
    println(count)
}

fun outputCount() {
    println(count)
    count += 10
}
```
\- 지역변수(Local Variable), 전역변수 (Global Variable)
\- Scope는 유효범위를 뜻 함
\- 지역변수는 블록을 벗어나면 사라진다. 즉 블록 안에서만 인식됨
\- 전역변수는 모든 함수에서 사용이 가능하다.
\- 지역변수와 전역변수의 이름은 중복사용이 가능하다.
\- 중복사용이 되었을 때, 가까운 변수가 우선적으로 실행된다.

> Stack, Heap

스택/힙은 말로 설명하기가 어려움.....
대략적으로 변수는 스택에, 객체는 힙에라고 생각해두자.
(String형 변수는 힙에 저장된다.)

>Class

```kotlin
package study2

// 클래스(class) : 객체를 찍어내는 틀(설계도)

class Person {
    var name: String = ""
    var age: Int = 0
}

fun main() {
    val person: Person
    person = Person()  // < 인스턴스
    person.name = "루피"
    person.age = 30

    val person2 = Person()
    person2.name = "조로"
    person2.age = 27

    val person3 = Person()
    person3.name = "상디"
    person3.age = 27

    println(person3.name)
}
```
\- 객체는 붕어빵 틀...... 이젠 지겨움 
\- 참고로 하나의 인스턴스를 사용할 땐 object라고 표현한다.

```kotlin
//Main.kt

fun main() {
    val product: Product
    product = createProduct() //<- 인스턴스 변수
    printInfo(product) 
    raisePrice(product) 
    printInfo(product) 
    //Unit형인데 Unit이 생략된 형태이므로 return값을 받을 수 있음

}

fun createProduct(): Product {
    val banana = Product()
    banana.name = "Banana"
    banana.price = 5000
    return banana
}

fun raisePrice(product: Product) {
    product.price += 500
}

fun printInfo(product: Product) {
    println("상품명: ${product.name}")
    println("가격: ${product.price}")
}
```

```kotlin
//Product.kt

class Product {
    var name = ""
    var price = 0
}
```
\- 클래스 사용코드 예시. 이해가 안되면 첫줄부터 차근차근 읽어보자



> Garbage Collection

```kotlin
fun main() {
    var res = ""
    var a = 1

    while (a <= 100) {
        res += "$a"
        a += 1
    }
    println(res)
}
```

\- Heap에 쌓여있는 객체(참조되지 않은 객체)들을 자동적으로 JVM에 삭제해주는 기능이다.
(메모리 관리를 위해?)

---

하루에 보는 강의가 좀 많은편이라 TIL로 작성하기 너무 까다롭다.
내가 직접 작성하고 풀은 말이긴 하지만 가독성이 너무 떨어진다.
좋은방법을 연구해보자.

오늘도 낮시간에 공부에 집중을 못했다. 
밤에 공부가 잘되는 듯... 낮에 집중좀 하자

내일은 part2까지를 듣는걸 목표로 합시다

'Kotlin' 카테고리의 다른 글

내일배움캠프 12.13 TIL  (2) 2023.12.22
내일배움캠프 12.12 TIL  (2) 2023.12.22
내일배움캠프 12.10 TIL  (1) 2023.12.22
내일배움캠프 12.09 TIL  (0) 2023.12.22
내일배움캠프 12.08 TIL  (2) 2023.12.22