관리 메뉴

Bbaktaeho

[Android] 코틀린과 자바의 차이점 (kotlin, java, 안드로이드) 본문

개발 (Develop)/안드로이드 (Android)

[Android] 코틀린과 자바의 차이점 (kotlin, java, 안드로이드)

Bbaktaeho 2020. 8. 28. 02:40
반응형

시작하기에 앞서

필자의 java 언어 수준은 학교 전공 수업인 java언어와 jsp 프로그래밍에서 배운 것으로 멈춰있고 kotlin 언어의 수준은 자바와 마찬가지로 프로젝트 경험 없이 기초만 배운 상황입니다.

따라서 개인적인 견해가 거의 없으므로 찾아본 참고 자료를 토대로 글을 이어가겠습니다.

 

잘못된 부분이 있다면 댓글로 피드백 부탁드립니다.


자바의 특징

현재 Oracle 

 

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

자바 언어의 특징에 대해서 간단하게 보도록 하겠습니다.

  • 멀티 플랫폼
    • 크로스 플랫폼이라고도 불리는데 JVM(Java Virtual Machine)만 설치되어 있으면 어떤 운영체제에서도 애플리케이션을 작동시킬 수 있습니다.
  • 메모리 관리
    • 자바는 포인터 개념이 없고 자동으로 메모리를 관리합니다.
    • Garbage Collector 가 사용하지 않는 자원을 자동으로 반환해줍니다.
    • 프로그래밍이 편해집니다.
  • OOP (Object Oriented Programing)
    • 부품들을 조립해서 하나의 제품을 만드는 것과 같은 원리입니다.
    • 객체(Object)라는 단위로 나누고 객체들끼리 상호작용하는 방식입니다.
  • 멀티 스레드
    • Thread 클래스와 Runnable 인터페이스를 이용하여 멀티 스레드를 구현합니다.
  • 동적 로딩
    • 필요한 시점에 구현한 클래스를 로딩할 수 있습니다.

코틀린 특징

JetBrains

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

코틀린은 jvm의 바이트 코드로 실행되고 자바와 100% 호환되므로 뿌리부터 완전히 다른 새로운 개념의 언어는 아닙니다. 따라서 모든 특징을 설명하기보단 자바와 비교해가며 특징을 보도록 하겠습니다.

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

자바와 코틀린의 차이점

각 언어의 간단한 특징들만 살펴봤습니다.

자바 언어가 1990년대에 등장했고 코틀린 언어가 2010년도에 등장했으니 코틀린이 웬만한 좋은 특징들을 가지고 있기 때문에 간단하게 적었습니다. 예를 들어 가비지 컬렉터, 동적 로딩 등이 있겠죠?

 

그럼 두 언어의 차이점을 비교해보겠습니다.

  Type system Multi-Platform OOP FP Type Inference Nullable
자바 (Java) 정적 타입 O O X X (9 이하) X
코틀린 (Kotlin) 정적 타입 O O O O O

 

더보기

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

 

또한 두 언어는 멀티 플랫폼 개발을 할 수 있는 비슷한 장점을 가지고 있습니다.

 

특히 두 언어로 안드로이드 개발이 가능합니다. 모두 객체지향 프로그래밍을 지원하며 class 키워드를 사용 가능하나 자바는 class가 기본 단위로 class 안에서 로직을 만들어야 합니다.

 

반면에 코틀린은 class가 선택사항이며 Top-Level 에서 변수, 함수의 선언과 구현이 가능합니다.

 

코틀린은 타입 추론이 가능하나 자바(9 이하)는 타입 추론을 할 수 없습니다. 

 

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

코드의 차이 (main())

// java
class Test {
	public static void main(String[] args) {
		System.out.print("Hello Java");
	}
}
// kotlin
fun main() {
	print("Hello Kotlin")
}

안드로이드 개발에서 차이

안드로이드를 개발할 땐 객체지향 언어처럼 클래스 내에서 로직을 작성해야 합니다.

여전히 자바와 코틀린을 동시에 지원하므로 자바의 형식에 맞춰서 코틀린을 사용해야 합니다.

하지만 자바로 작성했을 때보다는 코틀린 코드의 양이 훨씬 줄어들고 간결해지므로 개발자의 편의성이 훨씬 좋습니다.


참고 자료

  • 이것이 안드로이드다 (고돈호 지음)
  • 핵심만 골라배우는 코틀린 프로그래밍 (심재철 지음)
  • 자바의 정석 (남궁 성 지음)
  • Do it! 안드로이드 앱 프로그래밍 (정재곤 지음)
반응형