본문 바로가기
Application/Android Studio

[언어] Java VS Kotlin

by junnykim 2023. 11. 22.

안드로이드 스튜디오는 사용하는 언어가 2가지 있다.

Kotlin과 JAVA인데, 둘의 차이점을 알아보도록 하자!

 

우선 둘 다 객체지향언어이다.

 

객체지향

객체지향 프로그래밍은 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것을 하나씩 조립 및 연결하여 전체 프로그램을 완성하는 것을 말한다.

객체를 만들기 위해 클래스를 작성하고, 객체와 객체를 연결해서 목적에 맞는 프로그램을 만들어 낸다.

객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.

객체지향 4가지 특징

  • 추상화 : 객체의 공통적인 속성과 가능을 추출하여 정의하는 것
    • 역할과 구현의 분리
  • 상속성 : 기존의 클래스를 재활용해서 새로운 클래스를 작성하는 자바의 문법요소
    • 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 가능을 간편하게 사용할 수 있도록 하는 것
    • 재사용, 반복적인 코드 최소화하고 공유하는 속성과 가능에 간편하게 접근
  • 다형성 : 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질
    • 역할과 구현을 구분하여 객체들 간의 직접적인 결합을 피하고, 느슨한 관계 설정을 통해 보다 유연하고 변경이 용이한 프로그램 설계를 가능하도록 한다.
    • 메서드 오버라이딩, 메서드 오버로딩
      • 오버라이딩 ?
        • 같은 이름의 메서드가 상황에 따라 다른 역할을 수행하는 것 
        • 부모 클래스의 메소드의 동작 방법을 변경(재정의)해서 우선적으로 사용하는 것
        • 이름, 매개변수 개수, 순서, 데이터 타입, return 타입이 일치해야 한다.
      • 오버로딩 ?
        • 이름은 같지만 같은 클래스 내부에서 메소드를 확장하기 위한 것
        • 이름 일치, 매개변수 개수 or 타입, return 타입이 달라야 한다.
  • 캡슐화 : 서로 연관있는 속성과 기능을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
    • 외부로부터 클래스에 정의된 속성과 기능들을 보호하고, 필요한 부분만 외부로 노출될 수 있도록 해서 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 목적
      • 데이터 보호 : 외부로부터 클래스에 정의된 속성과 기능들을 보호
      • 데이터 은닉 : 내부의 동작을 감추고 외부에는 필요한 부분만 노출

 

1. Java?

객체 지향 및 네트워크 중심 언어이다.

 

1) 높은 이식성

서로 다른 실행환경을 가진 시스템간에 프로그램을 옮겨 실행할 수 있다.

 

2) 인터프린터 언어

인터프리터 언어인 동시에 컴파일 언어이다.

인터프린터 언어?

  • 소스코드를 한 줄 읽어가며 명령을 바로 처리하는 프로그램
  • 번역과 실행이 동시에 이루어진다

컴파일 언어?

  • 소스코드를 한꺼번에 다른 목적 코드로 번역한 후, 한 번에 실행하는 프로그램

텍스트 소스 컴파일 -> 클래스 파일 -> 자바 런타임이 인터프리트 -

시스템에 무관한 2진 파일을 만듦으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을 수 있다.

 

3) 동적 로딩 지원

실행 시에 모든 클래스가 로딩되는 것이 아니라, 필요한 시점에 클래스를 로딩하여 사용할 수 있다.

 

 

4) 멀티 스레드 구현이 쉬움

스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.

 

5) 단점

  • 실행을 위해 가상머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느리다.
  • 코드의 길이가 긴 편이다.
  • 예외 처리가 잘 되어 있지만, 일일이 처리를 지정해 줘야 한다.

 

 

2. 왜 Kotlin?

자바와 코틀린은 100% 호환된다.

기존의 코드를 수정하지 않고도 유연하고 간결하게 변경이 가능하다.

 

1) 간결성, 생산성

코틀린은 자바보다 더 간결하고 직관적이라, 시간이 덜 걸린다.

 

자바는 반복적인 작업을 요구하는 보일러플레이크 코드의 발생이 많다. (Ex. Getter, Setter/Null Check/예외처리)

-> 코틀린은 data class를 사용해서 개선된다.

 

2) null 체크

자바에서는 null체크코드가 추가되어야 하지만, 코틀린은 ?를 이용해서 간결하게 null안정성을 부여할 수 있다.

 

 

3) 익명 클래스의 번거로움 개선

익명클래스는 클래스선언과 인스턴스 생성이 동시에 이루어지는데, 코드가 복잡하고 가독성이 떨어질 수 있다.

재사용이 어려워서 동일한 동작이 발생할 경우 재사용하기 어렵다.

외부에서는 접근할 수 없어 범위가 제한적이고, 이름이 없어서 디버깅하기 어렵다는 특징이 있다.

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 클릭시 발생할 이벤트 코드 작성
    }
});

 

코틀린은 람다식/고차함수를 지원해서 익명함수를 간단하게 작성할 수 있다.

  •  람다식
    • 함수형 프로그래밍에서 사용되는 개념
    • 익명함수를 간단하게 표현하기 위한 방법
    • 함수처럼 동작하고, 코드블록을 하나의 식으로 표현 가능
  • 고차함수
    • 함수를 매개변수로 전달하거나, 함수를 반환하는 함수
    • 고차함수를 사용했을 때 함수를 값으로 다루고, 동적으로 조작 활용이 가

 

 

출처 :

https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95

 

객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 -

객체 지향 프로그래밍은 객체의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다. 객체 지향 프로그래밍의 기본적인 개념과 그 설계를 바르게 하기 위

www.codestates.com

https://helloworld-88.tistory.com/3

 

[JAVA] 자바란 무엇인가?

8년을 끈 구글과 오라클의 자바(JAVA) 저작권 전쟁이 오라클의 승리로 막을 내렸다. 그렇다면 과연 자바가 무엇이길래 구글과 오라클에서 이리도 오랫동안 라이센스 분쟁을 벌였던것일까? 썬 마

helloworld-88.tistory.com

https://jie0025.tistory.com/528

 

[Kotlin] 코틀린이란 (왜 필요하고, 왜 배워야할까)

✅ 코틀린이란? JetBrains에서 개발한, 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어이다. 자바와 똑같이 JVM 위에서 작동한다! (OS에 독립적이라는 장점이 그대로 있다!) 주 목적 : 자바가 사용

jie0025.tistory.com

 

댓글