부스트코스 Hello, 코틀린! 요약
코틀린 : 구글에서 안드로이드를 개발하기 위해 공식 지정한 언어
코틀린은 안드로이드 앱 개발에 필수적이다
안드로이드 앱개발, IOS 앱개발
멀티플랫폼 앱개발
컴파일 시 변수의 자료형이 결정된다
C, C++에서 변수를 선언할 때 아래와 같이 선언한다
int num = 3;
int라는 자료형을 정해서 사용한다.
동적 타입 언어는 java, python 등이 있다.
num = 3
num = "Hello"
python에서는 위와 같이 변수 자료형을 정하지 않고 선언한 후 프로그램 내에서 동적으로 변경된다.
동적 타입 언어는 자료형을 명시하지 않아도 되서 편리하지만 논리적인 에러가 발생할 수 있다.
반면에 정적 타입 언어는 자료형 관련해서 코드를 잘못 작성하게 되면 코드 작성 중이나 컴파일 시에 에러를 발견할 수 있다.
코틀린도 여러 타입이 있는데, Kotlin/JS를 사용할 때는 코틀린을 통해서 JavaScript 코드를 만들어야 하므로 동적 타입을 지원한다
코틀린에서는 자료형을 명시하지 않아도 변수에 넣는 값에 따라 자료형 추론이 가능하다
일단 자료형을 추론하고 나면 정적 타입이므로 자료형이 변하지 않는다.
코틀린은 Java와 100% 호환된다
코틀린 소스 파일(.kt 확장자)을 컴파일러가 컴파일하면 bytecode 파일이 생성된다
Java 소스 파일(.java 확장자) 역시 컴파일 결과로 bytecode 파일이 생성된다
JVM이 bytecode 파일을 실행한다. 따라서 kotlin 파일도 java와 같게 사용될 수 있다.
Java 라이브러리를 그대로 가져다 사용할 수 있다.
(Kotlin 라이브러리를 사용하는 것이 더 좋긴 하다)
Java와 Kotlin을 섞어서 사용할 수 있다.
같은 패키지 내에 있다면 코틀린에서 Java의 static 메소드와 상수를 사용할 수 있다.
코틀린에서는 클래스로 감쌀 필요 없이 자바의 클래스명.필드or메소드 로 접근 가능하다.
코틀린 파일이 Hello.kt라면 Java 코드에서 HelloKt.메소드 로 Hello.kt 내의 메소드에 접근할 수 있다. 코틀린은 클래스로 감싸지 않기 때문에 파일명을 이용한다.
NULL은 규정되지 않아 접근할 수 없는 메모리다
Kotlin은 NPE(Null Point Error)를 방지할 수 있는 안정성을 가진다
NULL이 가능한 자료형(Nullable type)과 불가능한 자료형(Non-Null type)을 구분한다
자료형 뒤에 ?를 붙이면 Nullable type이다.
var a : String? = null
var b : String = "Hello"
b = null //Error
Kotlin에서는 :뒤에 자료형을 명시하고 = 뒤에 값을 넣는다
a는 String?로 Nullable type이다.
b는 String으로 Non-Null type이므로 값에 null을 넣으면 에러가 발생한다.
String? 와 String은 다른 자료형으로 이해해야 한다.
var name : String? = null
var len = name.length //Error
위의 예시에서 named은 Nullable type으로 name.length로 접근하면 NPE가 발생한다.
코틀린에서는 이처럼 NPE 가능성이 있는 코드를 컴파일 단계에서 막아버린다.
var name : String? = null
var len = name?.length //name이 null이 아닐 경우에만 접근
위와 같이 name?.로 변경해야 컴파일 가능하다.
name?.로 변경하면 name이 null이 아닐 경우에만 name에 접근한다.
이것을 안전하게 호출하는 Safe Call 이라 한다.
되도록이면 Non-Null type을 사용하는 것이 좋다
하지만 Java랑 같이 사용하다 보면 Nullable type이 필요할 경우가 있다.
val (value) : 할당 후 변경 불가 : immutable
var (variable) : 할당 후 변경 가능 : mutable
Kotlin은 할당 후 변경하는 경우가 많이 없다.
따라서 val을 사용하고 혹시 바꿔야 한다면 그 때 var로 바꿔준다.
더 안전한 프로그래밍이 가능하다.
val list1 = mutableListOf<Int>(1,2,3,4)
//add() ,remove()로 요소 추가, 삭제 가능
val list2 = ListOf<Int>(1,2,3,4)
//요소 추가, 삭제 불가능
list1은 mutableListOf 로 생성한 컬렉션이다. mutable이므로 요소 추가, 삭제가 가능하다
하지만 앞에 mutable이 붙지 않은 ListOf로 생생한 컬렉션 list2는 요소 추가, 삭제가 불가능하다
여기서 val의 의미는 list1 자체가 value로 immutable 한 것이지 list1 내부의 요소와 관련된 것은 아니다.
자바는 이러한 기능이 Java9부터 추가됨
간결하고 깔끔하다.
보일러플레이트 코드의 최소화(매번 반복해서 작성하는 코드, Java에서의 getter, setter등)
Java에서는 라이브러리 내용을 직접 수정할 수 없어서 클래스를 상속해서 기능을 추가해야 했다.
Fotlin에서는 확장함수를 이용해서 클래스 상속이나 디자인 패턴을 사용하지 않고 새로운 기능을 확장할 수 있다.
Original.함수명() 으로 확장함수를 만들면 Original 클래스에 함수를 추가한 것과 같은 효과다.
함수의 유기적 연결을 통한 프로그래밍 방식이다.
함수를 일급 객체로 사용할 수 있다.
일급 객체는 함수의 인자, 반환값에 사용되거나 자료구조에도 넣을 수 있다.
람다식을 통해 함수를 선언하지 않고 함수기능을 식에 전달할 수 있다.
안드로이드 개발이 지금 목적이지만,
IOS, 웹, 서버개발에 모두 사용할 수 있다.
공통되는 common code를 작성하고 플랫폼별로 의존 코드를 작성해서 사용할 수 있다.
Kotlin/JVM, Kotlin/JS 등 ..
linkedin에 이력서를 써놓으면 헤드헌터가 연락을 준다고 함
proven ability : 능력을 증명해야 한다 (앱스토어에 실제로 올려야 한다)
REST API같은 써드파티 API들을 잘 다룰 수 있어야 한다.
UI, design concept에 대해 잘 알아야 한다.
CS에서 가장 중요한 것은 data structure
입사할 때 시험에서 물어본다
위 사이트들에서 다른 개발자들로부터 정보를 얻으면 좋다
앱 개발을 하려면 Kotlin의 기본 문법을 먼저 익히고
앱 개발을 위한 FrameWork를 알아야 한다
Kotlin으로 백엔드, 서버 개발 가능하다