728x90
반응형
1. 코틀린이란?
- 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
- 자바 코드와 상호운용성을 중시함
- 간결하고 실용적
- 무료, 오픈소스
2. 코틀린의 주요 특성
(1) 대상 플랫폼
- 서버, 안드로이드 등 자바가 실행되는 모든 곳
a. 코틀린 서버 프로그래밍
- 브라우저에 HTML 페이지를 돌려주는 웹 애플리케이션
- JSON API를 제공하는 백엔드 애플리케이션
- RPC(원격 프로토콜 호출)을 통해 서로 통신하는 작은 서비스들로 이뤄진 마이크로 서비스
- 예시
- 코틀린 빌드 패턴
- DSL
b. 코틀린 안드로이드 프로그래밍
- null 값을 정확하게 추적한다. 널 포인터로 인한 문제가 줄어든다.
- 예시
- 리스너, 바인딩 …
(2) 정적 타입 지정 언어
a. 정적 타입 vs 동적 타입
정적타입 | 동적타입 | |
타입 판단 | 개발자가 컴파일 단계에서 직접 작성한다. | 코드 실행 시, 자동으로 판단해줌. |
변수 타입이 결정되는 시기 | 컴파일 시 | 런타임 시 |
예시 | C, C#, C++, Java, Kotlin | JavaScript, Ruby, Python |
특이점 | 코틀린은 타입추론이 가능하다. (즉 타입을 명시하지 않아도 된다.) |
b. 정적 타입 언어의 장점
- 성능 : 실행 시점에서 어떤 메소드를 호출 할 지 알아내는 과정이 필요없으므로 메소드 호출이 빠르다.
- 신뢰성 : 컴파일 단계에서 프로그램 정확성을 판단한다. 실행할 때 프로그램 오류 발생할 확률이 적다.
- 유지 보수성 : 객체가 어떤 타입인지 바로 알 수 있어서 이해가 쉽다.
(3) 함수형 프로그래밍
a. 함수형 프로그램이란?
- 일급 시민인 함수 : 함수를 일반 값처럼 사용
- 함수를 변수에 저장 가능
- 함수를 인자로 다룰 수 있다. ( 다른 함수에 전달 가능하고, 함수에 새로운 함수를 만들어서 반환 가능하다.)
//코틀린에서 1급 객체 함수란? fun main(){ println(sum(1,2)) //3 println(calculate(2,3,sum)) //5 println(calculate(2,3,sum2)) //-1 val compare = comparison() println(compare(5,3)) //true println(compare(5,10)) // false } //1. 함수를 변수에 할당 할 수 있다. val sum = { x: Int, y: Int -> x + y } val sum2 = { x: Int, y: Int -> x - y } //2. 함수를 인자로 전달 할 수 있다. fun calculate(x: Int, y: Int, operation: (Int,Int) -> Int): Int { return operation(x,y) } //3. 함수에서 다른 함수를 반활 할 수 있다. fun comparison(): (Int,Int) -> Boolean { return { x, y -> x > y } }
- 불변성 : 일단 만들어지고나면 내부 상태가 절대 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
- 대입문이 아니다. 변수에 값이 할당되면 그 이후 절대 변하지 않는다.
- side effect 없음 : 순수함수를 사용한다.
- 순수함수 : side effect가 없고, 함수 외부나 다른 바깥 환경과 상호작용 하지 않는 함수.
b. 함수형 프로그래밍의 장점
- 간결성
- 함수를 값처럼 사용함.
- 다중 스레드를 사용해도 안전함
- 불변 데이터 구조를 사용하고, 순수 함수를 그 데이터 구조에 적용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경 할 수 없다. 따라서 복잡한 동기화를 적용하지 않아도 된다.
- 테스트가 쉽다.
c. 코틀린이 지원하는 기능
- 자바 8 이전에는 함수형 프로그래밍을 지원할 수 있는 기능이 거의 없다.
- 코틀린은 처음부터 함수형 프로그래밍을 지원해왔다.
- 함수 타입 지원
- 어떤 함수가 다른 함수를 파라미터로 받거나, 함수가 새로운 함수를 반환 할 수 있다.
- 람다식 지원
- 데이터 클래스
- 불변적인 값 객체를 간편하게 만들 수 있는 구문을 제공한다.
- 코틀린 표준 라이브러리
- 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API 제공
- 함수 타입 지원
3. 코틀린의 철학
(1) 실용성
- 연구하는 언어 X. 다른 프로그래밍 언어가 채택하고 검증한 기능에 의존한다.
- 언어가 복잡하지 않고, 이미 알고 있는 기본 개념들이 많이 존재한다.
- 코틀린은 어느 특정 프로그래밍 스타일이나 패러다임을 강요하지 않는다.
- 자바를 이용해도 상관없다.
- 도구를 강조한다.
- 코틀린은 도구 사용을 항상 염두한다.
- 자동 수정 안내 등 …
- 코틀린은 도구 사용을 항상 염두한다.
(2) 간결성
- 의미 없는 부분, 언어가 요구하는 조건을 만족시키기 위해 별 뜻은 없지만 프로그램에 꼭 넣어햐는 부수적인 요소를 줄여준다.
- getter, setter, 생성자 파라미터 등
- 람다식 지원
- 기호만으로 식별자를 작성 할 수 없다. 무조건 단어로 이뤄진 이름을 사용한다.
- 읽기 쉽고 검색이 편하다.
(3) 안정성
- 트레이드 오프
- 오류를 방지하기 위해서는…
- 우리는 컴파일러에게 프로그램이 어떻게 돌아갈지 정보를 더 자세하게 제공해야한다. → 컴파일러가 프로그램 코드와 작동 의도가 일치하는지 검증해야한다.
- 💥 컴파일러에게 더 많은 정보를 제공해야하므로 생산성이 하락한다!
- 우리는 컴파일러에게 프로그램이 어떻게 돌아갈지 정보를 더 자세하게 제공해야한다. → 컴파일러가 프로그램 코드와 작동 의도가 일치하는지 검증해야한다.
- 안정성과 생산성 사이에는 트레이드오프 관계가 성립한다.
- 오류를 방지하기 위해서는…
- 코틀린은 더 높은 수준의 안정성 + 비용은 적게 들고 싶었다.
- JVM에서 실행 가능하다.
- 타입 안정성
- 코틀린 컴파일러는 타입 추론 가능, 개발자가 실수 할 일이 없다.
- NullPointerException 방지
- 비용이 아주 적다! ?만 붙이면 된다.
- ClassCastException 방지
- 타입 검사와 캐스트가 한 연산자에 의해 이뤄진다.
if (value is String) <- 타입을 검사한다. println(value.toUpperCase()) <- 해당 타입의 메서드를 사용한다.
(4) 자바와 상호운용성
- 자바와 코틀린 소스 파일을 자유롭게 내비게이션 할 수 있다.
- 자바 ↔ 코틀린 리팩토링 가능. 자동으로 코드를 변경해준다.
4. 코틀린 도구 사용
(1) 코틀린 코드 컴파일
- 코틀린도 컴파일 언어이다.
- 코드를 컴파일한 후 → 코틀린 코드를 실행한다.
- 코틀린으로 컴파일한 애플리케이션은 런타임 라이브러리도 함께 배포해야한다.
- 코틀린 런타임 라이브러리
- 크기가 매우 작다.
- 포함된 기능
- 코틀린 자체 표준 라이브러리 클래스
- 자바 API의 기능을 확장한 내용
- 실제 프로젝트를 컴파일하기 위해서는, 빌드시스템이 필요하다. gradle, maven…
- 빌드 시스템들은 애플리케이션을 패키지할 때 알아서 코틀린 런타임을 포함시켜준다.
(2) 기타
- 인텔리J, 안드로이드스튜디오, 셸, 플레이그라운드 등
728x90
반응형
'Kotlin in Action' 카테고리의 다른 글
4. kotlin 클래스, 객체, 인터페이스 (0) | 2024.07.13 |
---|---|
3. kotlin 컬렉션, 확장함수, 정규식 (0) | 2024.07.13 |
2. kotlin 기본요소, 스마트 캐스트, 예외처리 등 (0) | 2024.07.13 |