반응형
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값을 뽑아주는 함수
- listOf
- 람다 함수
- 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로 변경
- val : 변경 불가능한 변수
🍬 문자열 템플릿
- $name
- 위 값을 문자열 안에 넣으면 name 변수의 값이 대입됨
- ${ args[0] }
- 위와 같이 중괄호로 복잡한 식도 넣을 수 있다.
- 단순 변수명만 사용할 때에도 중괄호를 같이 쓰는 습관을 들이는 것이 좋다
🙋🏻♀️ 스터디 이후 해소된 의문점들
- expression
- if, when, try
- 결과를 만들어 내는 구문
- val vs var
- 객체 안은 변경될 수 있지만, 객체 자체는 변화 하지 않는다
- var은 변화 가능성 있는 primitive type에 사용
- val, var을 구분해서 잘 사용하면 함수형 코드에 가까워질 수 있다
- ?:
- 엘비스 연산자
- 앞이 null 이면 뒤의 값으로, null이 아니면 앞의 값으로 쓰는 연산자
Reference
반응형
'Languages' 카테고리의 다른 글
kotlin에서의 람다식과 멤버 참조 (lambda, ::, 값으로 표현된 함수) (0) | 2020.04.26 |
---|---|
kotlin in Action 4장 예제 (by, selaed, factory method, constructor) (0) | 2020.04.26 |
kotlin의 가시성 (open, final, abstract), 생성자 (0) | 2020.04.19 |
Kotlin의 함수 (Collection, 확장함수, 가변 인자 함수, 중위호출) (5) | 2020.04.16 |
Kotlin 튜토리얼 (0) | 2020.04.10 |