Kotlin in Action 1챕터
코틀린은 도대체 무엇일까
자바 코드와의 상호운용성이 중시된다.
따라서 자바자 사용중인 곳에서는 거의 대부분 코틀린의 사용도 가능하다.
그렇다면 자바와 무엇이 다를까?
높은 생산성
⚫간결하면서도 표현력이 뛰어나서 유지보수를에 용이하다
⚫타입추론이 잘 되어있어서 타입을 명시하지 않아도 된다
⚫NullPointerException의 방지가 잘 되어있다
⚫기존에 자바를 활용하면서 동시에 코틀린 도입 역시 가능하다
⚫여러 라이브러리와도 잘 융합되는 특징
36P예시에 따른 자바와의 차이
⚫data class의 존재
⚫java에서는 it.age?:0과 같이 it.age가 null이면 0을 반환하게 할 수 없다
⚫data class를 사용하여 자동으로 toString이 되는 모습을 알 수 있다
⚫타입 추론 기능
타입 추론의 정의
컴파일러가 문맥으로부터 변수 타입을 결정
자바와 달리 코틀린에서있는 기능
정적 타입 지정 언어
정적 타입 지정 언어의 정의
모든 프로그램의 구성 요소 타입을 컴파일 시점에서 알 수 있음 + 객체의 필드나 메서드 사용할 때마다 컴파일러가 타입을 점검해줌
장점 VS 단점
장점
⚪성능: 메서드 호출이 더 빠르다
->실행 시점에서 어떤 메서드를 호출할지 알아내는 과정 필요 없기 때문
⚪신뢰성: 컴파일러가 정확성 검증
->실행 시 오류로 중단될 가능성이 더 적어짐
⚪유지보수성: 처음 보는 코드를 다루는 데에도 용이
-> 객체가 어떤 타입에 속하는지 알 수 있기 때문
⚪도구 지원: 더 정확한 코드 완성 기능 제공 및 안전한 리팩토링+IDE사용 편리
그에 따른 단점
🔴동적 타입 지정 언어에 비해 유연성 저하 될 수도
->동적 타입 지정 언어는 변수의 타입을 실행도중 자유롭게 변경가능
반면 정적 타입 지정 언어는 타입의 제한을 둠으로써 코드의 안정성을 높이기 때문에 유연성은 저하될 가능성이 있다
🔴매번 코드 작성시 변수형 결정해주어야하는 번거로움
코틀린 타입 시스템 살펴보기
자바와 유사한 작동을 가진타입 시스템
클래스, 인터페이스, 제너릭스는 모두 자바와 비슷하게 작동
새로운 점
널이 될 수 있는 타입 지원
때문에 널포인터 에러 발생 여부를 컴파일 시점에서 검사 가능하여, 프로그램의 신뢰성을 높일 수 있다
함수 타입에 대한 지원
함수형 프로그래밍과 객체지향 프로그래밍
함수형 프로그래밍의 핵심 개념
🔴first-class함수(일급 시민 함수)
함수를 일반적인 값(변수)처럼 다룰 수 있다.
함수에서 새로운 함수를 만든다거나 함수를 인자로 다른 함수에게 전달하는 등의 작업도 가능
🔴불변성
만들어지고 나면 내부 상태가 절대 바뀌지 않는 불변 객체 사용하여 프로그램 작성
🔴부수효과 없음
입력이 같으면 항상 같은 출력 내놓음
순수함수 사용
순수함수란: 함수 외부나 다른 바깥 환경과 상호작용 하지 않는 함수
함수형 프로그래밍의 유익성
간결성:더 강력한 추상화를 통해 코드의 중복을 막기 때문
ex)람다식을 사용하여 공통부분만 따로 뽑아낸 뒤 서로 다른 사항은 인자로 전달
다중 스레드를 사용해도 안전
원래는 동기화 없이 같은 같은 데이터를 여러 스레드가 변경하는 경우 많은 문제가 생김
그런데, 순수함수를 사용하면 같은 데이터를 여러 스레드가 변경할 수 없고 복잡한 동기화를 적용하지 않아도 됨
테스트를 하기 쉬움:준비코드 없이 독립적 테스트 가능
코틀린의 함수형 프로그래밍 지원법
🟢함수 타입을 지원->어떤 함수가 다른 함수를 파라미터로 받거나/
함수가 새로운 함수 반환하는 게 가능
🟢람다 식을 지원하여 번거로운 준비 코드 없이 코드블록 쉽게 정의하는 것이 가능
🟢데이터 클래스를 통해 불변적인 값 개체를 간편하게 만들 수 있다.
🟢객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API제공
무료 오픈소스 파트는 생략
코틀린 응용
코틀린 서버 프로그래밍
🟢서버 프로그래밍이란 다음과 같은 응용 분야를 포함하는 개념이다.
◼브라우저에 HTML 페이지 돌려주는 웹 애플리케이션
◼모바일 애플리케이션에게 HTTP통해 JSON API제공하는 백엔드 애플리케이션
◼RPC프로토콜을 통해 서로 통신하는 작은 서비스들로 이뤄진 마이크로 서비스
통상적으로 애플리케이션을 독립적으로 밑바닥부터 개발하기보다는
기존 프레임 워크나 기술의 확장 및 개선하는 방향인 경우가 더 많다.
->자바 클래스는 코틀린 클래스로 확장해도 아무 문제 없음+특정 애너테이션을 붙여도 아무 문제가 없음
코틀린 안드로이드 프로그래밍
모바일 어플리케이션은 더 다양한 디바이스에 대해 신뢰성 보장하면서 더 빠르게 개발하여 배포해야함
따라서 안드로이드 프레음 워크의 컴파일러 플러그인 지원을 조합하면
보다 간편하게 컨트롤러에 리스너를 추가하는 등의 작업이 가능해진다.
코틀린의 타입 시스템으로 null값을 추적하여, 널 포인터로 생기는 문제가 줄어든다.->애플리케이션의 신뢰성 증가
자바와 똑같이 효율적으로 실행되며 최신 안드로이드가 탑재되지 않은 곳에서 실행해도 문제가 생기지 않는다.
코틀린의 철학
실용성
다른 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존
따라서 언어의 복잡도가 줄어들고 이미 알고있는 개념을 통해 코틀린을 쉽게 배울 수 있음
특정한 프로그래밍 스타일이나 패러다임에 대한 강제적인 요구가 없음
간결한 구조로 바꿀 수 있는 코드 패턴의 경우 도구가 자동으로 감지하여 주기도 한다.
간결성
getter 등을 묵시적으로 제공하기 때문에 준비 코드로 인해 훨씬 간결하다.
라이브러리의 호출로 반복되거나 길어지는 코드를 정리할 수 있다.
람다를 통해 작은 코드 블록들을 캡슐화 한 뒤 개별적인 내용만 사용자의 코드 안에 남겨둘 수 있다.
연산자 오버로딩은 지원하나, 언어가 제공하지 않는 연산자를 프로그래머가 정의할 수는 없다.
->오히려 이런 기능 때문에 보다 직관성과 가독성이 좋을 수 있다.
안전성
통상적으로는 더 큰 안전성을 얻기 위해서 생산성은 하락함
그러나 코틀린은 JVM에서 실행하는 방식을 통해 JVM과 똑같은 정도의 안전성을 확보한다.
+컴파일 시점에서의 오류 검사 및 컴파일러의 타입 자동 추론 기능으로 더 높은 안전성을 확보하는 데에 성공
그에 비해 널이 될 수 있나 없나 여부를 표시하는 것은 ‘?’ 한글자만 추가하면 되니 경제적
또한 코틀린은 타입검사와 캐스트가 한 연산자에 의해 이루어지기때문에
타입검사만 진행한 뒤 바로 해당 타입의 메서드 사용이 가능하다.
상호 운용성
자바코드에서 코틀린 코드를 호출 할 때에도 아무런 노력이 필요없다.
그래서 자바와 코틀린 코드를 한 프로젝트 내에서 원하는 대로 섞어서 쓸 수 있음
다중 언어 프로젝트를 완전히 지원하기 때문에
자바와 코틀린 소스 파일이 임의로 섞여있어도 제대로된 프로그램 컴파일이 가능하다.
또한 자바 메서드 리팩토링시 그 메서드와 관련있는 코틀린 코드까지도 제대로 변경 가능하다.
코틀린 도구 사용
코틀린 코드 컴파일
.kt라는 확장자를 붙인다.
이는 코틀린 컴파일러를 거쳐 .class파일로 만들어진다.
.class파일은 개발중인 애플리케이션의 유형에 맞는 패키징 과정을 거쳐 실행
kotlinc명령으로 코틀린 코드를 컴파일 후 java명령으로 그 코드를 실행한다. 이때 .jar파일로 패키징이 이루어진다.
플러그인들
인텔리 J아이디어와 안드로이드 스튜디오 코틀린 플러그인
대화형 셸
코틀린 코드를 한 줄 입력하면 그 즉시 코드를 실행한 결과를 볼 수 있다는 특징이 있다.
이클립스 플러그인
이클립스 마켓 플레이스에서 코틀린 플러그인 다운로드 후 사용 가능
자바-코틀린 변환기
자바로 코드를 작성하여 복사하면 변환기가 코틀린 코드를 제안해준다.
가장 코틀린스러운 코드는 아니지만, 작동에는 이상이 없다.
댓글남기기