JavaRush /Java Blog /Random-KO /Kotlin과 Java 사이에 차이점이 있나요?
Paul Soia
레벨 26
Kiyv

Kotlin과 Java 사이에 차이점이 있나요?

Random-KO 그룹에 게시되었습니다
안녕하세요 여러분. 초보자에게 도움이 될 Kotlin 언어에 대한 몇 가지 기본 사항을 말씀드리고 싶습니다. 이제 하나의 언어만으로 Android 개발을 시작하는 것이 어려울 것입니다. 대부분의 새 프로젝트는 Kotlin으로 작성되기 시작하고 대부분의 기성 프로젝트는 Java로 작성됩니다. Kotlin과 Java 사이에 차이점이 있나요?  - 1현재 저는 4개의 프로젝트를 진행하고 있습니다. 2개는 Kotlin, 2개는 Java(하나는 큰 메인 프로젝트, 하나는 내부용 작은 프로젝트 3개)입니다. 회사가 Kotlin으로 새 프로젝트를 작성하기로 결정했을 때 이 결정이 이상하게 보였습니다. 왜 다른 언어를 혼합합니까? 다른 사람이 Kotlin으로 작성하게 하세요. Kotlin이 왜 필요한가요? 하지만 방법이 없었기 때문에 새로운 언어를 시도해 보기로 결심하고 공부하기 시작했습니다. 물론 첫 번째 코드는 전적으로 Java 스타일로 작성되었으며, 이는 오해를 더욱 가중시켰습니다. 왜 새로운 언어가 필요한가? 그런데 사용해보면서 점점 더 많은 장점을 발견하게 되었고, 지금(거의 2년 동안 Kotlin으로 글을 쓰고 있습니다) Android 개발에서는 Kotlin이 더 편리하다고 말할 수 있습니다. Java 이후에 Kotlin을 배우기로 결정한 사람에게는 명확하지 않은 몇 가지 뉘앙스를 보여주고 싶습니다. Android는 현재 현재 버전이 14인 Java 8을 사용한다는 점을 상기시켜 드리겠습니다. 따라서 먼저 - 변수 : Java:
Int a = 1;
String s = "test";
코틀린:
val a = 1
var b = 2
val c: Int
val d = "test"
Kotlin에는 val(읽기 전용)과 var(읽기-쓰기)라는 두 가지 유형의 변수가 있습니다. 가능하면 val을 사용하는 것이 좋습니다. 변수가 이미 초기화된 경우에는 변수 유형을 선언할 필요가 없습니다. 두 번째 - if/else, 스위치 문 : Java에서 이 문 체인을 얼마나 자주 사용합니까?
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
또는 다음과 같습니다:
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
Kotlin에서는 이러한 표현식에 when 연산자가 사용됩니다(if/else도 사용할 수 있음).
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
여기서 우리는 일련의 조건을 살펴봤을 뿐만 아니라 전체 표현식을 결과 변수에 즉시 할당하여 꽤 많은 코드 줄을 절약했습니다. 하지만 여전히 브랜치에 두 가지 옵션만 있는 경우 일반적인 if..else를 사용하는 것이 좋습니다. 세 가지 옵션 중 건설 시간이 더 짧아집니다. 계속 진행합시다 - 생성자 . 여기는 동화예요. Java와 Kotlin의 코드를 비교해 보세요. 자바:
public class Person {

    private String firstName;
    private String lastName;
    private int age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
코틀린:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Kotlin 코드에서 뭔가 완료되지 않은 채 남아 있는 것처럼 보일 수 있습니다. 하지만 아니요, 이것은 서로 다른 언어로 된 두 개의 동일한 코드입니다. 조금 알아 봅시다. Kotlin에서는 생성자를 클래스 이름 본문에 직접 작성할 수 있습니다(하지만 원하는 경우 Java에서와 같이 구식 방식으로 작성할 수 있습니다). 그래서 우리는 세 개의 변수를 작성했습니다. Java에서는 age 변수에 대한 생성자, getter 및 하나의 setter를 만들었습니다. 우리가 기억하는 것처럼 Kotlin에서는 val 변수가 읽기 전용이므로 이러한 변수에 대한 setter를 사용할 수 없습니다(Kotlin은 내부적으로 getter-setter를 구현합니다). var 변수를 사용하면 setter를 사용할 수 있습니다. 그 결과, 자바에서는 수십 줄이 넘는 내용을 거의 한 줄에 작성하게 되었습니다. 여기에서는 Kotlin의 데이터 클래스에 대해 자세히 읽어볼 것을 권장합니다. 하지만 이것이 Kotlin 생성자가 잘하는 전부는 아닙니다. 하지만 두 개의 생성자가 필요하다면 어떻게 될까요? 3명이 있다면 어떨까요? Java에서는 다음과 같습니다.
public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

public Person(String firstName) {
        this.firstName = firstName;
    }
복잡한 것은 없고 필요한 만큼의 디자이너가 그렇게 했습니다. Kotlin에서는 하나의 생성자만으로 충분합니다. 어떻게? 간단합니다. 기본값입니다.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
생성자에 기본값을 할당했으며 이제 이를 호출하면 다음과 같습니다.
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
질문이 발생할 수 있습니다. 이것이 무엇입니까?
private val lastName: String? = null
이 다른 물음표는 무엇입니까? 예, 값이 null일 수 있으면 설정됩니다 ?. 이와 같은 옵션도 있습니다 !!(변수가 null을 허용할 수 없는 경우). 직접 읽어보세요. 모두 간단합니다. 그리고 우리는 다음 지점으로 넘어갑니다. 확장 . 이는 Java에서는 사용할 수 없는 Kotlin의 매우 멋진 도구입니다. 때로는 프로젝트에서 여러 클래스에서 반복되는 템플릿 메서드를 사용합니다. 예를 들어 다음과 같습니다.
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
Kotlin에서는 클래스를 확장할 수 있습니다.
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
그런 다음 프로젝트 전체에서 다음과 같이 사용하십시오.
context?.toast("hello world")
Context 클래스에 대한 확장을 만들었습니다. 이제 컨텍스트를 사용할 수 있는 모든 곳에서 새로운 토스트 방법을 사용할 수 있습니다. 이는 문자열, 조각, 사용자 정의 클래스 등 모든 클래스에 대해 수행할 수 있으며 제한이 없습니다. 그리고 마지막으로 살펴볼 내용은 Working with Strings 입니다 . 여기에서는 모든 것이 간단합니다. Java에서는 다음과 같이 작성됩니다.
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
Kotlin에서는 더 쉽습니다.
val s = "friends"
val a = 5
println("I have $a $s!")
이것은 제가 Kotlin을 처음 배울 때 우연히 발견한 뉘앙스입니다. 이것이 여러분에게 도움이 되기를 바랍니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION