1장 코틀린이란 무엇이며, 왜 필요한가?
- 코틀린이란? 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
- 간결, 실용적, 자바코드와의 상호운용성(interoperability) 중시
- 서버개발 / 안드로이드 앱 개발 가능
1.1 코틀린 맛보기
-
data class Person(val name:String, val age:Int? = null) val persons = listOf(Person("영희"), Person("철수", age=29)) val oldest = persons.maxBy{ it.age ?:0 } println("나이가 가장 많은 사람 : $oldest")
- 데이터 클래스
- 이름 붙은 파라미터
- 람다식과 엘비스 연산자
- 문자열 템플릿
- toString 자동생성
1.2 코틀린의 주요 특성
1.2.1 대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳
- 서버 (백엔드)
- 안드로이드 앱
- IOS : 인텔 멀티 OS엔진 사용 시 코틀린을 IOS디바이스에서 실행 가능
- 데스크탑 어플리케이션: 코틀린+토네이도FX,자바FX
- 자바뿐 아니라 자바스크립트로도 코틀린 컴파일 가능, 즉 코틀린 코드를 브라우저나 노드에서 실행 가능
- 코틀린을 통해 모든 소프트웨어 개발을 할 수 있게 하는 목표가 있음
- 하지만 해당 책은 자바 관련된 부분만 집중적으로 다룸
1.2.2 정적 타입 지정 언어
- 자바와 달리 모든 변수의 타입을 프로그래머가 직접 명시 할 필요 X
- 컴파일러가 문맥을 고려해 변수 타입을 결정하는
타입 추론
이 존재
1.2.3 함수형 프로그래밍과 객체지향 프로그래밍
- 함수형 프로그래밍
- 일급 시민인 함수(First-class)
- 함수를 일반 값처럼 다룰 수 있다.
- 함수를 변수에 저장 가능하고 인자로 전달 가능
- 함수에서 새로운 함수를 반환 가능
- 불변성(Immutability)
- 만들어지고 나서 내부 상태가 바뀌지 않음
- 부수 효과 없음(Side effect)
- 입력이 같은면 항상 같은 출력
- 다른 객체의 상태 변경 x
- 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수 사용
- 이로 인한 장점
- 간결성
- thread safe
- 테스트 쉬움
- 일급 시민인 함수(First-class)
1.2.4 무료 오픈소스
1.3 코틀린 응용
- 자바 코드와 매끄럽게 상호운용 가능
- 자바 -> 코틀린 변경 이슈 없음
- 시스템을 좀 더 간결하고 신뢰성을 높일수 있고 유지보수도 쉬워질 것으로 기대
- 코틀린 빌더 패턴, HTML태그 변환도 지원하여 별도 템플릿언어 필요X
1.4 코틀린의 철학
1.4.1 실용성
- 실제 문제를 해결하기 위한 실용적인 언어
- 코틀린은 연구를 위한 언어 아님
- 코틀린을 처음 배우는 사람은 자바스타일로하다가, 코틀린의 강력한 특성을 익히고 나면 좀 더 간결하게 활용 가능
- IDE지원 많음 (JetBrains에서 시작)
1.4.2 간결성
- 자바에서 이슈가 됬던 부분들, 불편했던 부분들을 언어자체어서 간결한 코딩이 가능케 설계
- 코드 읽는 시간 > 코드 작성 시간
- 수정해야하는 부분을 찾고, 어떻게 고쳐야할지 파악하기 위해선 읽어야 한다
- 코드가 더 간단하고 간결하면 내용 파악이 더 쉽다
- 코틀린은 코드에서 의미 없는 부분을 줄이고, 준비코드를 묵시적으로 제공
- 다만 코틀린 설계 목표에는 소스코드를 가능한 짧게 만든다는건 없다
1.4.3 안전성
- 안전성과 생산성 사이에는 트레이드 오프가 존재
- 코틀린을 만들면서 자바보다 더 높은 수준의 안전성을 달성하되 전체 비용은 더 적게 하고자 함
- JVM을 사용하여 메모리 안정성 보장, 버퍼 오버플로 바지, 동적 메모리할당 이슈 예방 가능 (자바 동일)
- 정적 타입 지정 언어 (자바 동일)
- 코틀린 컴파일러가 타입을 자동 추론
- 코틀린은 컴파일 시점에서 잡아주는 에러가 많음
- NullPointerException
- ClassCastException
1.4.4 상호운용성
- 자바 클래스 상속, 자바 인터페이스 구현, 자바 애노테이션 -> 모두 가능
- 자바 -> 코틀린호출도 이슈 없음
- 섞어 쓰는것도 가능
(kang)
비즈니스 코드레벨에선 안섞는게 좋아보이긴 함(kang)
자바 개발자들이 대다수인 상황이었기에 필요했던 목표이지 않았을까
1.5 코틀린 도구 사용
1.5.1 코틀린 코드 컴파일
- 코틀린 소스코드를 저장시에는
.kr
확장자 사용 - 코틀린 컴파일러도 컴파일 후
.class
파일 생성 - 빌드 과정
- maven, gradle 애플리케이션 패키지시에 코틀린 런타임을 포함 시켜줌