[내배캠/51일차] TIL - Kotlin스러움

euphony·2025년 3월 11일
0

내일배움캠프

목록 보기
59/66

✅오늘의 한 일

  • 개인 과제 Lv.2-7까지
  • 연관관계와 N+1 세션 듣기
  • 챌린지반 세션 듣기

💻오늘의 학습

코틀린스러움

코틀린 문법에 맞게 개발하다보면 ‘코틀린스러워’진다!

Kotlin vs Java

  • 자바에서 표현할 수 없었던 코드를 Kotlin에서는 간결하게 표현 가능
  • 기본적으로 null 안정성을 제공하는 언어
  • 멀티 플랫폼 언어로 개발됨 (초기에는 주로 안드로이드 개발에 사용)

✔️ Kotlin ByteCode 변환

  • Show Kotlin ByteCodeDecompile을 통해 Java 코드로 변환 가능

일급 함수

  • Kotlin은 기본적으로 일급 함수를 지원
  • 일급 함수란?
    • 함수를 변수에 저장할 수 있음
    val add1 = { a: Int, b: Int -> a + b }
    val add2: (Int, Int) -> Int = { a, b -> a + b }
    val sum = add1(3, 7)
  • 함수를 다른 함수의 인자로 전달할 수 있음
    fun operate(op: (Int, Int) -> Int): Int {
        return op(3, 10)
    }
  • 함수를 다른 함수의 반환값으로 사용할 수 있음
    fun operate(op: (Int, Int) -> Int): (Int, Int) -> Int {
        return op
    }
  • 간단한 람다 선언
    val lambda = { a: Int, b: Int -> a + b}

type system

  • null - safe
    • ?(물음표) / :?(엘비스) / !!(단언)
val student = Student("name", 20, "won") // not null
val studentNull: Student? = null // nullable

println(student.name)
println(studentNull.name) // Error

변수 선언

  • val (불변) / var (가변)
  • 타입 추론 가능 (Type Inference)

클래스 (Class)

  • 객체 생성 시 new 키워드 사용하지 않음
  • 소괄호 문법 지원
  • data class
    • toString(), equals(), hashCode() 자동 생성
    • Lombok 사용하지 않음
    class Student(String name) {
     // 클래스 내에서 함수 정의
      fun print() {
      }
      
      companion object{
       // name에 접근 못함
       // static 영역(정적 팩토리 메서드 만들때)
      }
    }

🤔 나의 질문
Q. companion objectstatic 영역이면 상수 선언할 때도 사용되나요?
A. const val 키워드를 제공한다!

companion object {
    const val SCHOOL_NAME = "Kotlin Academy"
}
  • 상속 : open 키워드를 붙여야 상속 가능
  • 인터페이스 : interface 지원

고차함수

  • filter, map, groupBy, associate 등 사용 가능
val students = listOf(Student("gom", 20), Student("won", 22))
val studentMap = students.associate { it.age to it.name }

scope function

  • run: 특정 범위 내에서 실행하고 결과를 반환함. 객체 초기화 또는 블록 내에서 특정 연산을 수행할 때 주로 사용. (?.run과 같이 nullable 타입과 함께 사용하면 안전하게 실행 가능)
  • let: 객체를 매개변수로 받아 특정 작업을 수행한 후 결과를 반환. null-safe 연산(?.let)이나 특정 프로퍼티를 활용한 작업에 유용.
  • also: 객체 자체를 반환하며 추가적인 작업을 수행할 때 사용. 디버깅이나 로깅 등의 부가적인 작업을 추가할 때 유용.
  • apply: 객체 설정을 수행하고 해당 객체를 반환. 주로 객체의 프로퍼티를 초기화하는 데 사용.

extention

    val sting = students.map { it.name }.joinToString(",")
    
    // 커스텀해서 사용 가능
    fun <T> Collection<T>.toCommaString(): STring = this.joinToSTring(",")
- infix 연산자
    - 두 개 사이에서 동작하게 할 수 있음

📌내일의 할 일

  • JPA 심화 강의 듣기
  • 개인 과제 필수 기능 끝내기

0개의 댓글

관련 채용 정보