Kotlin 훑어보기 2 (Java 비교)
2022. 11. 13. 17:01ㆍ카테고리 없음
Null safe
// JAVA
Integer a =100; // 클래스 타입으로 null 가능
a=null;
a.sum(); // NullPointException 이 날수도 있음
//따라서, null safe 한 코드를 구성해야한다.
if( a != null){
a.sum();
}
// KOTLIN
val b: Int? =100 // null 가능
val c: Int =100 // null 불가
b?.sum() // null 일경우 실행하지 않음
c.sum() // 애초에 nullsafe 함.
Scope Function (apply, with, let, alse, run)
: 코드를 읽기 쉽게 해준다!
Apply :객체 초기화 할때 씀
// JAVA
Person person =new Person();
person.firstName ="Fast";
person.lastName ="Campus"
// apply
val person = Person().apply{
firstName ="Fast"
lastName ="Campus"
}
Also
: 객체 유효성 확인, 디버깅 용도로 씀
parameter 를 생략하고 it 으로 사용가능
// JAVA
int value = Random().nextInt(100);
System.out.print(value);
// also
Random.nextInt(100).also { value ->
print("getRandomInt() generated value $value")
}
// it 사용
Random.nextInt(100).also{
print("getRandomInt() generated value $it")
}
Let
null 값 처리 가능
// JAVA
Integer number =null;
String sumNumberStr = null;
if( number !=null){
sumNumberStr ="" + sum(10,number);
}
// let
val number: Int?
val sumNumberStr = number?.let { //number가 null 이면 let이후 실행이 안됨.
"${sum(10,t)}"
}
val sumNumberStr = number?.let {
"${sum(10,t)}"
}.orEmpty // nullable 일경우만 사용가능, null일 경우 빈값으로 바꿔준다.
With
// JAVA
Person person =new Person();
person.work();
person.sleep();
System.out.println(person.age);
// with
val person = Person()
with(person){
work()
sleep()
println(age)
}
Run
val result = service.run{
port =8080
query()
}
service.port =8080
Result result = service.query()
Data Class
: Data 를 저장하는 목적으로 만든 class
한 줄로 javaObject 클래스와 동일한 기능제공
// JAVA
public class JavaObject{
private String s;
JavaObject(String s){
this.s=s;
}
public String getS(){
return s;
}
public void setS(String s){
this.s=s;
}
// copy
// toString
// hashCode 등 생략
}
// data class
data class JavaObject(val s: String)
Lambda expression
// parameter가 1개일떄 생략 가능 v 생략하고 it으로도 가능
// JAVA
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
,,,
}
})
button.setOnClickListener { v->
}
lateinit , lazy init
지금 초기값을 몰라서 나중에 초기화 할게.
: non-null type 에만 사용가능
var nullableNumber : Int? = null // 초기화 해줌
latainit var lateinitNumber : Int // 초기화 안할꺼임
lateinitNumber =10 // 추후 초기화 하는 코드
nullableNumber?.add() // 항상 ? 을 넣어줘야함.
lateinitNumber.add() // ? 필요없음
lazyInit
// 나중에 init 해주겠다.
// 사용전까지는 값 할당이 안됨
val lazyNumber : Int by lazy {
100
}
// 사용전까지는 lazyNumber 변수에 100이 할당 안됨.
lazyNumber.add()
// 사용할때 100이 할당됨