Languages

Kotlin과 Java의 차이 그리고 혼용

!쪼렙조햄 2020. 4. 10. 02:05
반응형

2장. Kotlin 기초

Kotlin 코드는 Java 코드와 한 프로젝트에 있어도 완벽하게 혼용 가능하고 컴파일 된다. 그리고 심지어 컬렉션 (ex. java.util.HashSet )을 공유하면서도 기능은 더 많다.

🐨 예제로 살펴보는 Kotlin의 특징

class Person (val name: String, val age: Int? = null)
fun main (args: Array<String>){
    val persons = listOf(Person(“영희”), Person(“철수”, age = 29))
    val oldest = persons.maxBy { it.age ?: 0 }
}
  • class 의 파라미터
    • 파라미터 이름 뒤에 파라미터의 타입을 쓴다
    • ? 표시를 통해 null값이 될 수 있다는 표시를 해주고 = 뒤에 null일때 넣어줄 값을 설정
    • kotlin은 java와 다르게 null값이 될 수 있는 변수와, 없는 변수를 지정하여 null exception 위험 감소
  • main 함수
    • 함수는 fun으로 선언
  • list
    • listOf
      • 코틀린에서 리스트를 만들때 사용하는 함수
      • Person 객체 선언할 때 보면, null이 될 수 있는 변수인 age 값은 안넣고 생성하기도 함
    • maxBy
      • 리스트의 max값을 뽑아주는 함수
  • 람다 함수
    • it 이라는 변수가 람다식에서 사용됨
    • ?:
      • it.age가 null이면 0을 넣고, it.age가 null이 아니면 it.age 사용

👩🏻‍💻 함수 포함한 코드 작성법

fun main(args: Array<String>){
    println(“Hello World!”)
}
  • 함수 선언 시 fun 사용
  • 파라미터 이름 뒤에 파라미터의 타입을 쓴다
  • 함수를 최상위 수준에 정의할 수 있다
    • first class function
    • java 처럼 class 안에 함수를 넣어야 할 필요가 없다
  • 배열
    • 배열도 일반적인 class와 동일하게 취급
    • kotlin에는 자바와 달리 배열 처리를 위한 문법이 따로 존재하지 않는다
  • println
  • 끝에 세미콜론을 붙이지 않아도 된다

🎂 함수 - 반환 값 있는 경우

fun max(a: Int, b : Int): Int{
    return if (a>b) a else b
}
println(max(1,2))
  • max 라는 이름의 함수
  • return 형식이 Int라고 뒤에 선언
  • 위의 경우 블록이 본문인 함수 (본문이 중괄호로 둘러싸인 함수)
    • 식이 본문인 함수로는 위의 함수를 한줄에 표현할 수 있다
      • fun max(a: Int, b: Int) : Int = if (a>b) a else b
    • 위의 식이 본문인 함수에서 반환 타입을 생략할 수도 있다
    • 식이 본문인 함수의 경우에만 타입추론이 가능하다

🍰 변수

  • 타입
    • val answer = 42
      • val answer: Int = 42와 같은 효과를 가진다
    • val answer : Int
      • 위와 같이 초기화 식을 사용하지 않고 변수를 선언하고 싶을때는 타입을 반드시 지정해 주어야 한다
  • val vs var
    • val : 변경 불가능한 변수
      • 일단 초기화 하고 나면 재 대입이 불가능하다
      • 참조 자체는 불변일지라도 그 참조가 가리키는 객체의 내부값은 변경될 수 있다
      • java의 final
    • var : 변경 가능한 변수
      • java의 일반 변수
      • 변수의 값은 변경할 수 있지만, 변수의 타입은 고정되어 바꿀 수 없다
    • 기본적으로는 모든 변수를 val 키워드를 사용해서 불변 변수로 선언하고, 나중에 꼭 필요할 때만 var로 변경

🍬 문자열 템플릿

  • $name
    • 위 값을 문자열 안에 넣으면 name 변수의 값이 대입됨
  • ${ args[0] }
    • 위와 같이 중괄호로 복잡한 식도 넣을 수 있다.
  • 단순 변수명만 사용할 때에도 중괄호를 같이 쓰는 습관을 들이는 것이 좋다

🙋🏻‍♀️ 스터디 이후 해소된 의문점들

  • expression
    • if, when, try
    • 결과를 만들어 내는 구문
  • val vs var
    • 객체 안은 변경될 수 있지만, 객체 자체는 변화 하지 않는다
    • var은 변화 가능성 있는 primitive type에 사용
    • val, var을 구분해서 잘 사용하면 함수형 코드에 가까워질 수 있다
  • ?:
    • 엘비스 연산자
    • 앞이 null 이면 뒤의 값으로, null이 아니면 앞의 값으로 쓰는 연산자

Reference

반응형