공부/Java

[공부/Java] Java와 Kotlin

yulee_to 2022. 12. 28. 21:07

Java


자바

객체 지향 방법론을 사용하며 여러 운영체제에서 실행될 수 있는 언어

자바의 특징

  • 멀티 플랫폼 : JVM만 설치되어 있으면 어떤 운영체제에서도 애플리케이션을 작동시킬 수 있음
  • 메모리 관리 : GC가 사용하지 않는 자원을 자동으로 반환
  • OOP : 객체 지향 방법론을 사용해 객체라는 단위로 나누고 객체들끼리 상호작용하는 방식
  • 멀티 스레드 : Thread 클래스와 Runnable 인터페이스를 이용해 멀티 스레드를 구현
  • 동적 로딩 : 필요한 시점에 구현한 클래스를 로딩할 수 있음

코틀린

개발자의 편의성, 간결하고 효율적인 코드 작성, 객체지향 프로그래밍과 함수형 프로그래밍의 장점을 절묘하게 조화시킨 언어

코틀린이 생겨난 배경

JetBrains라는 회사에서 만든 제품들이 70%이상 자바로 작성되어 있었는데, 자바를 사용한다는 건 그만큼 쓸데없는 Boiler-plate 코드가 많아져 시간이 갈수록 코드를 유지/보수하고 읽고 쓰기가 점점 더 어려워진다는 문제가 있었다. 자바가 아닌 더 좋고 모던한 언어로 바꾸고 싶었는데 그러기엔 이미 자바로 쓴 코드가 너무 많았기 때문에 자바와 호환이 가능한 새로운 언어인 코틀린을 만들어 낸 것이다.

 

코틀린의 특징

  • Type interface : 할당되는 리터럴 값을 알아서 추론
  • OOP와 FP(functional programming) : 객체지향 프로그래밍, 함수형 프로그래밍을 모두 지원. 코틀린에서의 함수는 일급 객체로 고차 함수로 사용이 가능
  • 모든 타입이 클래스 타입 : 기본 타입마저 클래스로 존재
  • Nullable : Null 할당이 가능한 타입을 선언할 수 있음. NPE 예외를 컴파일 시점에서 미리 방지할 수 있음

안드로이드 빌드 프로세스

  1. 컴파일러는 소스코드를 DEX(Dalvik Executable, 기기에서 실행되는 바이트 코드 포함) 파일로 변환하고, 그 외 모든 것은 컴파일된 리소스로 변환
  2. APK Packager는 DEX 파일과 컴파일된 리소스를 단일 APK로 결합
  3. APK Packager는 디버그 또는 출시 키 저장소를 사용해 APK에 서명
  4. 최종 APK를 생성하기 전에, 패키저는 앱이 기기에서 실행될 때 더 적은 메모리를 사용하도록 앱을 최적화하기 위해 zipalign 도구를 사용

여기서 첫번째 단계가 자바와 코틀린이 호환이 가능하다는 것을 보여준다.

자바 코드(.java)는 컴파일러에 의해 바이트 코드(.class)로 변환되는데, 코틀린 코드(.kt) 또한 컴파일러에 의해 바이트 코드로 컴파일되어 상호 호환이 가능하다.

안드로이드에서 소스 코드(자바와 코틀린) 컴파일러에 의해 DEX 파일로 변환되는데 여기에 바이트코드(.class)들이 포함된다.

자바와 코틀린의 공통점

두 언어는 정적 타입으로 컴파일러가 타입 오류를 잡아 줄 수 있다.

멀티 플랫폼 개발을 할 수 있는 비슷한 장점을 가지고 있고 두 언어로 안드로이드 개발이 가능하다.

모두 객체지향 프로그래밍을 지원하며 class 키워드를 사용가능하다.

자바와 코틀린의 차이점

자바는 class가 기본 단위로 class 안에서 로직을 만들어야 하지만 코틀린은 class가 선택사항이며 Top-Level에서 변수, 함수의 선언과 구현이 가능하다.

자바(9이하)는 타입추론이 안되지만, 코틀린은 타입 추론이 가능하다.

가장 중요한 차이점으로는 NPE로 자바는 null을 참조하게 되면 런타임 시에 예외를 발생시키지만 코틀린은 컴파일 시점에서 미리 방지할 수 있다. Null을 확인하는 연산자들이 존재하고 Null이 가능한 타입도 있다.


참고 자료 :

https://stonybean.github.io/Kotlin-and-Java-compatible/

https://bbaktaeho-95.tistory.com/50

728x90