코틀린 강의
Search
Nullability
•
자바에서는 Null 인 객체를 잘못 사용하며 NullPointerException(NPE)가 발생
•
이것을 방지하기 위해 메서드 최상단은 항상 Null 여부 체크가 필수
•
코틀린에서는 이것을 더욱 명확히 관리해줌
null이 될 수 있는 타입 vs null이 될 수 없는 타입
// 널이 될 수 있는 타입
val nullable: String?
// 널이 될 수 없는 타입
val notNull : String
•
의문 혹은 불확실함을 나타내는 물음표(?)를 활용하여 nullable한 타입임을 나타냄

11. 코틀린 타입(Nullable, Not Null)
람다란 무엇인가?
람다란 일종의 익명 함수이며, 로직이다. 함수에 로직을 넘기기 쉽게 하기 위해 활용
/* 람다가 없던 구형 자바
*/
button.setOnClickListener(new OnClickListener() {
@override
public void onClick(View view)
/* 클릭 시 수행할 동작 */
}
});
/* 자바의 람다식 */
button.setOnClickListener(/* (인자)-> 실행 문장 */)
•
setOnClickListener에 클릭 시 수행할 동작 하나를 전달하기 위해 특정 인터페이스를 구현하는 익명 클래스를 만들어야 하기 때문에 매우 복잡함
•
Java8 부터는 자바에서도 람다식을 도입함 → 코틀린은 해당 수식을 더 간결하게 해줌
코틀린의 람다식

10. 람다식
인터페이스, 상속, 가시성
인터페이스와 구현
package ch08
interface Clickable {
fun click()
}
class Button: Clickable {
override fun click() {
println("Button is clicked.")
}
}
fun main() {
Button().click()
}
•
자바의 implements와 extends는 “:”으로 대체됨 (둘다 공통)
•
인터페이스의 메서드 구현은 override 변경자를 반드시 붙여야 함
다중 인터페이스 구현

9. 클래스 객체 인터페이스
•
kotlin 에서는 다양한 콜렉션 기본 생성 함수 제공
•
내부적으로는 자바와의 호환을 위해 java의 콜렉션을 사용함
val set: Set<Int> = setOf(1, 2, 3)
val list = listOf("a", "b", "1L")
val map = mapOf(
1 to "One",
3 to "Three"
)
fun main() {
println(set.javaClass)
println(list.javaClass)
println(map.javaClass)
}
함수를 호출하기 쉽게 만들기
이름 붙인 인자

8. 함수 더 자세히
기본적인 예외 던지는 방식
if (str.length > 10) {
throw IllegalStateException("str($str) is too long")
}
•
자바와 거의 유사하지만 new가 불필요
try, catch, finally
fun parse(numberStr: String): Int = try {
Integer.parseInt(numberStr)
} catch (e: Exception) {
throw IOException("일부러 발생시키는 checked exception")
} finally {
println("무조건 실행되는 코드블록")
}
•
try catch finally 구문은 자바와 거의 동일하지만 이 부분도 if나 when과 마찬가지로 식(값으로 취급 가능한 문장)으로 취급

7. 예외처리 : try, catch


6. 반복문
enum
when을 사용할 때는 enum이 필수적이다.
// 가장 간결한 enum class
enum class Color {
RED, ORANGE, YELLOW, GREEN
}
// 프로퍼티와 메소드를 갖는 enum class
enum class Color(val r: Int, val g: Int, val b: Int) {
RED(255, 0, 0),
ORANGE(255, 166, 0),
YELLOW(255, 255, 0),
GREEN(0, 255, 0);
fun rgb() = (r * 256 + g) * 256 + b
}
when 으로 enum 클래스 다루기
각 색상에 해당하는 한글을 가져오는 함수

5. 코틀린의 선택과 표현 처리(when, enum)
클래스
Java Class
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Kotlin Class
class Person(val name: String)
•
엄청 간결하다! (생성자와 프로퍼티 정의가 한번에 진행됨)

4. 클래스 프로퍼티
코틀린의 Hello World
fun main(args: Array<String>) {
println("Hello, world!")
}
•
함수는 fun으로 표시
•
파라미터 : 타입
•
함수를 클래스 안에 정의할 필요가 없음
•
자바와 달리 코틀린에는 배열만의 특별한 문법이 없음

3. 코틀린의 함수, 변수


2. 코틀린을 빠르게 배우는 방법
2017 구글 안드로이드 개발 공식 언어로 코틀린 지정
•
……성공적인 예로 새로운 기능 개발을 Kotlin으로 이전한 Google Home팀을 사례로 들 수 있음.
Kotlin으로 개발한 결과 코드베이스 크기가 33% 줄고 NPE 비정상 종료가 30% 감소
Null Pointer Exception Error를 방지해줌
— Java —
void makeNullPointerException() {
String str = null;
System.out.println(str.toUpperCase());
}
•
Java 컴파일러는 NPE(NullPointerException)의 발생을 방지하지 못함

1. 코틀린을 추천하는 이유
fun main() {
persons[0].let {
println(it)
println("첫번째 사람의 나이 : ${it.age}")
}
with(persons[1]) {
println(age)
println(name)
}
}
•
특정한 객체를 영역을 한정하여 활용하고 싶은 경우 주로 사용
Scope function의 종류
•
Scope function은 특정 객체를 영역을 한정하는데 활용하며 크게 아래의 두 가지 방법으로 구분 가능

12. 범위 함수
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120807?language=kotlin
해결 방법
•
삼항 연산자를 활용하여 해결한다.
코드

[프로그래머스] 숫자 비교하기


13. 코틀린 프로젝트



