Chapter 1 코틀린 시작하기
코틀린은 객체지향 프로그래밍 + 비동기 프로그래밍 + 함수형 프로그래밍 + 스크립트
왜 코틀린을 선택해야 하는가?
- 보일러 플레이트 코드를 덜 쓰도록 해준다.
- 컴파일 시간 안정성
- 프로젝트에서 코틀린 코드와 JAVA 코드를 함께 사용할 수 있다. 프로젝트에 코틀린 점진적 도입 가능
Chapter2 JAVA개발자를 위한 코틀린 필수사항
1. 더 적은 타이핑
- 새미콜론 생략 가능
- 변수타입 지정 생략 가능
- 클래스와 함수 생략 가능
명령문이나 표현식이 메소드에 속할 필요가 없고, 메소드는 클래스에 속할 필요가 없다.
코드가 컴파일되거나, 스크립트로 실행될 때 코틀린은 JVM에서 실행하기 위해 필수적으로 필요한 랩퍼 클래스와 메소드를 생성한다.
- try-catch는 선택사항
개발자가 직접 다루지 않은 예외는 자동으로 호출한 코드로 전파된다.
2. 현명한 경고
fun compute(n:Int) = 0
println(compute(4)) //compute에서 전달된 파라미터는 사용되지 않는다.
/*
-->
0
unused.kts:1:13: warning: parameter 'n' is never used
fun compute(n: Int) = 0
*/
스크립트가 실행될때 코틀린은 결과를 표시하면서 사용하지 않는 파라미터에 대한 경고를 함께 준다.
3. var보다는 val
var : 수정가능
val : 수정불가능
코드를 추측하게 하는 것은 좋지 않다.
StringBuilder : 수정 가능
val이나 var 어느 것을 사용하든지 String 객체는 변화로부터 안전하다.
그러나, StringBuilder의 객체는 안전하지 않는다.
val message = StringBuilder("hello")
message = SttringBuilder("another") // 이렇게 하면 message 변수 자체는 수정 불가능이기때문에 오류가 난다.
message.append("there") // 이건 가능. StringBuilder가 수정가능하기 때문.
4. 향상된 동일성 체크
Java의 equlas() 메소드 또는 코틀린의 == 연산자는 값을 비교한다. '구조의 동일성'
Java의 == 연산자 또는 코틀린의 === 연산자는 참조 대상을 비교한다. '참조상의 동일성'
println("hi" == "hi") // true
println("hi" == "Hi") // false
println(null == "hi") // false
println("hi" == null) // false
println(null == null) // true
위 비교가 java의 equls()로 실행되었다면 런타임에서 NullPointerException 이란 결과가 나왔을 것이다.
코틀린은 null을 안전하게 다루기 때문에 가능하다.
5. 문자열 템플릿
큰따옴표 문자열 안에서 $ 심볼을 변수 앞에 붙여주면 어떤 변수라도 문자열 안에 들어간다.
${}을 사용하면 복잡한 명령문도 들어갈 수 있다.
6. RAW 문자열
"""
Dear $name, hihi
party ~~
"""
/*
---->
Dear ej, hihi
party ~~
*/
"""
Dear $name, hihi
|party ~~
"""
/*
--->
Dear ej, hihi
party
*/
trimMargin() 메소드를 사용하면 (|) 문자가 나올 때까지 공백을 제거한다.
trimMargin("~") -> (~) 문자가 나올때까지 공백 제거
7. 표현식은 많이, 명령문은 적게
- 표현식(expression) : value를 return하는 무언가
- 명령문(statement) : 명령/지시. 아무것도 return하지 않는다. (if, else, for, while 등이 포함)
명령문은 상태가 변하고, 변수를 변하게 하고, 파일을 작성하고, 데이터베이스를 업데이트하는 등 부작용을 갖고있다.
명령문보다는 표현식이 좋다. 표현식은 결과를 리턴해주고, 어떤 상태도 변화시키지 않는다.
fun canVote(name: String, age:Int):String{
var status: String
if(age > 17){
status = "yes, please vote"
} else {
status = "nope, please come back"
}
return "$name, $status"
}
fun canVote2(name:String, age:Int):String{
val status = if(age>17){
"yes"
}else{
"No"
}
return "$name $status"
}
'Study > Book' 카테고리의 다른 글
다재다능 코틀린 프로그래밍 / 콜렉션 사용하기 (1) | 2023.05.17 |
---|---|
쏙쏙 들어오는 함수형 코딩 / 액션, 계산의 차이 (0) | 2023.03.27 |
쏙쏙 들어오는 함수형 코딩 / 함수형 프로그래밍? (0) | 2023.03.13 |