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이 할당됨