Backend
Algorithm
Project
codesche’s blog
/
Education
/
코틀린으로 더욱 간결하고 안전하게 스프링 개발하기
/
코틀린 강의
Backend
Algorithm
Project
codesche’s blog
/
Education
/
코틀린으로 더욱 간결하고 안전하게 스프링 개발하기
/
코틀린 강의
Share
Backend
Algorithm
Project
코틀린 강의
코틀린 강의
Search
Nullability
•
자바에서는 Null 인 객체를 잘못 사용하며 NullPointerException(NPE)가 발생
•
이것을 방지하기 위해 메서드 최상단은 항상 Null 여부 체크가 필수
•
코틀린에서는 이것을 더욱 명확히 관리해줌
null이 될 수 있는 타입 vs null이 될 수 없는 타입
•
의문 혹은 불확실함을 나타내는 물음표(?)를 활용하여 nullable한 타입임을 나타냄
•
해당 타입의 경우 컴파일 시점부터 null check 가 진행됨
•
함수 파라미터, 응답타입 등이나 클래스의 생성자나 프로퍼티 정의에도 사용 가능
•
nullable 한 클래스 인스턴스에서의 3가지 호출 방법
Elvis operator (엘비스 연산자)
11. 코틀린 타입(Nullable, Not Null)
람다란 무엇인가?
람다란 일종의 익명 함수이며, 로직이다. 함수에 로직을 넘기기 쉽게 하기 위해 활용
•
setOnClickListener에 클릭 시 수행할 동작 하나를 전달하기 위해 특정 인터페이스를 구현하는 익명 클래스를 만들어야 하기 때문에 매우 복잡함
•
Java8 부터는 자바에서도 람다식을 도입함 → 코틀린은 해당 수식을 더 간결하게 해줌
코틀린의 람다식
•
매우 간결해짐
•
함수 호출을 ()가 아닌 {}로 함
람다식의 장점
10. 람다식
인터페이스, 상속, 가시성
인터페이스와 구현
•
자바의 implements와 extends는 “:”으로 대체됨 (둘다 공통)
•
인터페이스의 메서드 구현은 override 변경자를 반드시 붙여야 함
다중 인터페이스 구현
•
Clickable과 Focusable이 둘다 showOff()라는 기본구현 메서드가 있는 경우 컴파일 오류 발생
open, final, abstract 변경자 : 기본적으로 final
•
무분별한 상속과 오버라이드는 취약한 기반 클래스(fragile base class) 문제를 일으킬 수 있음
9. 클래스 객체 인터페이스
•
kotlin 에서는 다양한 콜렉션 기본 생성 함수 제공
•
내부적으로는 자바와의 호환을 위해 java의 콜렉션을 사용함
함수를 호출하기 쉽게 만들기
이름 붙인 인자
•
자바는 생성자 또는 메서드 호출 시 파라미터 순서를 확인해서 인자를 넘겨야 하는 불편이 있었음
•
코틀린은 생성자 또는 메서드 호출 시 파라미터의 이름을 붙여서 실수를 방지할 수 있음
디폴트 파라미터 값
•
자바에서는 파라미터가 일부만 달라도 오버로딩으로 여러 메서드를 만드는 케이스가 흔하고, 불편을 초래함
8. 함수 더 자세히
기본적인 예외 던지는 방식
•
자바와 거의 유사하지만 new가 불필요
try, catch, finally
•
try catch finally 구문은 자바와 거의 동일하지만 이 부분도 if나 when과 마찬가지로 식(값으로 취급 가능한 문장)으로 취급
•
java와의 차이점?
7. 예외처리 : try, catch
while 루프
for 루프
•
기본적으로 i in 1..100 은 양쪽 끝 부분을 포함, 마지막을 미포함 하려면 until 키워드 사용
map과 iteration
•
c in ‘A’..’Z’ : c는 ‘A’ 문자에서 ‘Z’문자까지 반복
•
(key, value) in binaryReps
6. 반복문
enum
when을 사용할 때는 enum이 필수적이다.
when 으로 enum 클래스 다루기
각 색상에 해당하는 한글을 가져오는 함수
•
enum의 모든 구성요소를 나열하지 않거나 else가 없을 경우 컴파일 오류가 발생
인자가 없는 when
•
if else if else 문장과 동일한 구조
5. 코틀린의 선택과 표현 처리(when, enum)
클래스
Java Class
Kotlin Class
•
엄청 간결하다! (생성자와 프로퍼티 정의가 한번에 진행됨)
•
접근 제어자(public/private) 없음 → 기본 제어자가 public 이라 생략 가능
프로퍼티
(예외) Boolean property의 차이점
4. 클래스 프로퍼티
코틀린의 Hello World
•
함수는 fun으로 표시
•
파라미터 : 타입
•
함수를 클래스 안에 정의할 필요가 없음
•
자바와 달리 코틀린에는 배열만의 특별한 문법이 없음
•
System.out.println(Java) → println(Kotlin)
•
세미콜론(;)이 없어도 됨
함수(function)
•
함수의 반환형은 파라미터 목록 뒤에 옴(파라미터와 동일)
3. 코틀린의 함수, 변수
Kotlin Koans
•
https://play.kotlinlang.org/koans/overview
Convert Java File to Kotlin File
•
IntelliJ, eclipse 등의 IDE 기능
•
거의 동일한 기능의 코드가 생성됨
•
lombok이 있는 경우 delombok 필요
2. 코틀린을 빠르게 배우는 방법
2017 구글 안드로이드 개발 공식 언어로 코틀린 지정
•
……성공적인 예로 새로운 기능 개발을 Kotlin으로 이전한 Google Home팀을 사례로 들 수 있음. Kotlin으로 개발한 결과
코드베이스 크기가 33% 줄고 NPE 비정상 종료가 30% 감소
Null Pointer Exception Error를 방지해줌
— Java —
•
Java 컴파일러는 NPE(NullPointerException)의 발생을 방지하지 못함
•
NPE는 항상 런타임(서비스 운영 중)에 발생하며 사용자에게 불편을 줌
•
NPE가 발생하는 위치를 정확히 알려주지 못하는 경우도 많이 있음
— Kotlin —
•
Kotlin 컴파일러는 Null 가능 여부를 미리 체크하고 컴파일 타임에 미리 체크함
1. 코틀린을 추천하는 이유
•
특정한 객체를 영역을 한정하여 활용하고 싶은 경우 주로 사용
Scope function의 종류
•
Scope function은 특정 객체를 영역을 한정하는데 활용하며 크게 아래의 두 가지 방법으로 구분 가능
다양한 Scope function 사용 예시
•
이름은 다르나 내부적으로 보면 같은 용도로 사용할 수 있는 함수들이 있음
•
각각의 이름과 만든 목적에 따라 사용하는 것이 좋음
•
참고
https://kotlinlang.org/docs/scope-functions.html#function-selection
12. 범위 함수
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120807?language=kotlin
해결 방법
•
삼항 연산자를 활용하여 해결한다.
코드
[프로그래머스] 숫자 비교하기
결제 시스템 소개
계좌와 결제의 차이점
•
계좌는 이미 있는 계좌의 잔액을 변경
•
결제는 새로운 주문이 생성되면서 주문의 하위 거래(결제, 취소 등)도 생성됨
•
주문 : 거래(트랜잭션) = 1:N 관계
•
가맹점 - 결제 - 계좌 간 연동 관계
결제 시스템 도메인
13. 코틀린 프로젝트