Null null null이 될 수 있는 타입 뒤에는 ?를 붙이면 null참조를 저장할 수 있다. ?. Kotlin에서 제공하는 안전한 호출 연산자이다. 일반적인 Null 체크는 if문을 통해 체크할 수 있지만, ?.를 이용한다면, Null검사와 메서드 호출을 동시에 할 수 있다. /// 두 코드는 동일하다. s?.toUpperCase() if(s!=null) s.toUpperCase() else null 또한 null이 될 수 있는 프로퍼티 접근 시 안전한 호출도 가능하다. ?: ?:는 null 대신 사용할 디폴트 값을 지정할 때 편리하게 사용할 수 있다. 사용 방법은 다음과 같다. fun foo(s : String?){ val t : String = s ?: "" } s가 null이라면, t에 ""을..
Lambda Lambda 란? 다른 함수에 넘길 수 있는 작은 코드 조각을 뜻한다. 람다를 이용하여 불필요한 코드를 제거하기 버튼에 onClick리스너를 구현한다고 가정해보자. java에서는 다음과 같이 구현할 수 있다. button.setOnClickListener(new OnClickListener() { @override public void onClick(View view){ /* 수행할 동작 */ } }) 무명 내부 클래스를 선언하느라, 코드가 복잡해진 것을 볼 수 있다. 여기서 무명 내부 클래스란 new OnClickListener() ... 부분을 의미한다. kotlin에서는 다음과 같이 구현이 가능하다. button.setOnClickLinstener{/* 수행할 동작 */} 두 코드 다 ..
Interface 선언하기 click이라는 추상 메서드가 있는 인터페이스를 다음과 같이 작성할 수 있다. interface Clickable{ fun click() } 구현하기 Kotlin에서는 :을 통해 클래스 확장과 인터페이스 구현이 가능하다. class Button : Clickable{ override fun click() = println("click!") } 중요한 점은, Interface의 경우 개수 제한 없이 구현이 가능하지만, 클래스의 확장은 오직 하나만 가능하다. 디폴트 구현 java에서는 디폴트 메서드 선언시 default를 작성해주어야 했지만, Kotlin에서는 바로 작성해 주면 된다. default 메서드는 구현을 원한다면 새로운 동작을 정의할 수 있고, 아니면 정의된 구현을 사용..
Kotlin에서 Collection Kotlin에서의 Collection은 자체적인 컬렉션 기능이 없다. 기존 Java의 컬렉션을 그대로 가져간다. 하지만, 기존의 Java의 컬렉션에 없는 기능을 제공한다. 예를들어, 마지막 원소 또는 첫번째 원소를 가져오고 싶다면 다음과 같이 작성이 가능하다. val strings = listOf("first","second","third") strings.last() strings.first() 메서드를 다른 클래스에 추가 : 확장 함수 확장함수란 ? 어떤 클래스의 멤버 메서드인 것처럼 호출될 수 잇지만, 그 클래스 밖에 선언된 함수이다. 말로만 들으면 애매할 수 있으니, String의 마지막 문자를 가져오는 함수를 작성해보겠다. fun String.lastChar(..
Kotlin에서 If문은 식이다. Java에서 if문이라고 한다. 그렇다면, Kotlin에서는 왜 식일까? 하나의 상황을 예시로 들어보겠다. result 라는 변수에 condition의 상태에 따라 값을 저장한다고 가정한다면, Java와 Kotlin에서는 어떻게 작성할 수 있을까? Java 가장 먼저 Java에서는 다음과 같이 작성할 수 있다. String result; if (condition) { result = "참"; } else { result = "거짓"; } Java에서는 변수를 선언하고 if문의 결과를 변수에 할당하여 값을 설정해야 한다. Kotlin Java와 다르게 Kotlin에서는 다음과 같이 작성할 수 있다. val result = if (condition) "참" else "거짓"..
Compose를 사용할 때 Modifier을 이용해 padding 값을 적용하려고 하는 상황에서 적용이 안되는 경우가 있다. 내 경우에는 다음과 같다. 아래가 안되는 코드이고 Box( Modifier .fillMaxWidth() .fillMaxHeight() .background(Color.Blue) .padding(horizontal = 30.dp) ) 이게 되는 코드이다. Box( Modifier .fillMaxWidth() .fillMaxHeight() .padding(horizontal = 30.dp) .background(Color.Blue)) 차이는 바로 순서이다. 여기서 padding 값은 background 이후에 적용이 된다. padding은 파란색 배경 안쪽에 적용이 되어, 만약 배경 ..