JavaRush /Java Blog /Random-KO /KotlinRush: Java로 계속 작성하는 것이 합리적인가요?
NikEy
레벨 41
Новосибирск

KotlinRush: Java로 계속 작성하는 것이 합리적인가요?

Random-KO 그룹에 게시되었습니다
안녕하세요, JavaRush 학생 여러분, Java에 완전히 흡수되기 전에 여러분의 시야를 넓히고 점점 더 인기를 얻고 있는 Kotlin 언어 에 관심을 끌고 싶습니다 !
KotlinRush: Java로 계속 작성하는 것이 합리적인가요?  - 1
Kotlin은 JetBrains 에서 개발한 상당히 젊은 언어입니다 . 예, 그렇습니다. 우리가 가장 좋아하는 IDE인 IntelliJ IDEA를 개발한 바로 그 회사입니다. Kotlin은 JVM 언어이며 Java와 완벽하게 호환됩니다 . 즉, Kotlin 코드에서 친숙한 Java 라이브러리에 쉽게 액세스할 수 있습니다. 라이브러리는 어떻습니까? Kotlin과 Java 클래스는 하나의 패키지에 공존할 수 있습니다! Kotlin은 Google이 이를 Android의 공식 개발 언어로 인정할 정도로 프로그래밍 커뮤니티에서 인기가 높았으며, 최근 Kotlin은 기업 프로젝트에서 인기를 얻기 시작했습니다. 이 글에서는 Kotlin과 Java로 작성된 코드의 몇 가지 비교 예를 제시하고 몇 가지 결론을 도출하고자 합니다. 가다! 평소처럼 "Hello World"부터 시작하겠습니다.
// Java
public class Application {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
// Kotlin
class Application
fun main(vararg args: String) {
    println("Hello World!")
}
Kotlin 예제를 보면 다음 사항을 즉시 확인할 수 있습니다.
  • 줄 끝에 세미콜론을 쓸 필요가 없습니다.
  • 모든 메소드는 fun 키워드 로 설명됩니다 .
  • 한 줄을 인쇄하려면 단 한 단어면 충분합니다 - println() !
인스턴스 생성
// Java (до 10)
final Application application = new Application();
// Kotlin
val application = Application()
코틀린의 차이점:
  • 인스턴스에서 변수 유형이 명확한 경우 변수 유형을 선언할 필요가 없습니다.
  • 변수 유형 대신 - val (불변) 또는 var (변경 가능);
  • 인스턴스를 생성하기 위해 new 키워드를 작성할 필요가 없습니다 !
방법 설명
// Java
public int sum(int a, int b) {
    return (a + b);
}
// Kotlin
fun sum(a: Int, b: Int): Int {
return (a + b)
}
코틀린의 차이점:
  • 메서드에서 무언가를 반환해야 하는 경우 " : Int "가 서명에 추가됩니다. 여기서 Int 는 반환 유형입니다.
  • 메소드 매개변수에 대한 설명: 먼저 변수 이름, 그 다음 유형입니다.
  • 메소드 본문은 한 줄로만 구성되므로 return을 생략할 수 있습니다 .
    fun sum(a: Int, b: Int): Int = (a+b)
형식화된 문자열 출력
// Java
public int sum(int a, int b) {
    int result = (a + b);
    System.out.printf("Сумма %d и %d равна %d\n", a, b, result);
    return result;
}
// Kotlin
fun sum(a: Int, b: Int): Int {
    val result = (a + b)
    println("Сумма $a и $b равна $result")
    return result
}
Kotlin은 문자열 보간을 지원합니다. 변수 시작 부분에 '$' 기호를 사용하면 됩니다. 이 표기법은 코드의 깔끔함과 가독성을 크게 향상시킵니다. 인스턴스 비교
// Java
object1.equals(object2)
// Kotlin
object1 == object2
Kotlin에서는 ==객체 유형에 대한 비교 " "가 equals! 그리고 링크를 비교하기 위해서는 " ==="를 사용합니다. 예외
// Java
public List<String> getFileContent(String file) throws IOException {
    Path path = Paths.get(file);
    return Files.readAllLines(path);
}
// Kotlin
fun getFileContent(file: String): List<String> {
    val path = Paths.get(file)
    return Files.readAllLines(path)
}
Kotlin에는 확인된 예외가 없습니다. 이제 전체 애플리케이션에서 끝없이 예외를 발생시키거나 다중 레벨 예외를 생성할 필요가 없습니다 try-catch. 안전이 무효화됨
// Java
public class Data {
    String value;

    String render() {
        if (value == null) {
            return "Value: undefined";
        } else {
            return "Value:" + value.toUpperCase();
        }
    }
}
// Kotlin
class Data {
    var value: String? = null
    fun render(): String =
            "Value: ${value?.toUpperCase() ?: "undefined"}"
}
Kotlin은 NPE 문제를 해결하고 다음과 같은 여러 요구사항을 도입했습니다.
  • 모든 클래스 필드와 변수는 초기화되어야 합니다.
  • 필드나 변수에 "null"을 쓸 수 있지만 그런 다음 변수가 Null 가능임을 명시적으로 말해야 합니다("?" 기호 쓰기).
  • Elvis 연산자 "?:"는 다음과 같이 작동합니다. 왼쪽에 Null이 있으면 오른쪽에 있는 것을 가져옵니다. 이 예의 경우 값 변수가 초기화되지 않으면 " 정의되지 않음 " 값이 사용됩니다.
클래스 필드 및 해당 필드에 대한 액세스
// Java
public class Data {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
class App {
    void execute() {
           Data data = new Data()
           data.setValue("Foo")
     }
}
// Kotlin
class Data {
    var value: String = ""
}
class App {
    fun execute() {
          val data = Data()
          data.value = "Foo" // Под капотом выполнится data.set("Foo")
     }
}
Kotlin에서는 단순히 필드를 설명하는 것만으로도 충분합니다. 이미 암시적 getter 및 setter(hello lombok )가 있으며 원할 경우 언제든지 재정의할 수 있습니다. 동시에 필드에 직접 액세스하여 해당 필드의 값을 읽고 수정하며 내부적으로는 이라고 합니다 get()|set(). 사이클
// Java
void example() {
    for(int i = 1; i <= 10; i++) {
        System.out.println(i);
    }

    for(String line : "a,b,c".split(",")) {
        System.out.println(line);
    }
}
// Kotlin
fun example() {
    for(i in 1..10) {
        println(i)
    }

    for(line in "a,b,c".split(",")) {
        println(line)
    }
}
Kotlin은 시퀀스 순회를 위한 편리하고 통일된 구문을 제공합니다. 왼쪽에 변수를 사용 하고 오른쪽에 시퀀스를 사용하고 그 사이에 " in " 키워드를 사용 하면 유형이 콘텐츠에 따라 자동으로 결정됩니다. 하나씩 일어나는 것
// Java
public class Singleton {
    private static Singleton ourInstance = new Singleton();

    public static Singleton getInstance() {
        return ourInstance;
    }

    private Singleton() {
    }
}
class App {
    void execute() {
         Singleton singleton = Singleton.getInstance()
    }
}
// Kotlin
object Singleton {}

class App {
    fun execute() {
          val singleton = Singleton
    }
}
익숙한 " 싱글러 " 패턴이 실제로는 자주 사용되기 때문에 Kotlin은 " class " 대신에 작성된 별도의 키워드인 " object "를 만들기로 결정했습니다 . 이는 클래스가 싱글톤임을 의미합니다. 생성자나 다른 메소드를 호출해야 합니다! 명명된 메서드 매개변수 및 기본값
// Java
void setStatus(String code) {
    setStatus(code, "");
}

void setStatus(String code, String desc) {
    this.code = code;
    this.desc = desc;
}
// Kotlin
fun setStatus(code: String, desc: String = "") {
    this.code = code;
    this.desc = desc;
}

fun execute() {
    setStatus("200")
    setStatus(code = "200", desc = "Ok")
}
메소드나 생성자의 모든 매개변수가 필수는 아니며, Java에서는 가능한 모든 매개변수 조합에 대해 메소드 또는 생성자 세트를 생성하는 데 익숙합니다. 기본 매개변수가 Kotlin에 도입되었습니다. 이를 통해 상황에 따라 1개의 메소드를 선언하고 필요한 매개변수 세트를 전달할 수 있습니다. 스트림
// Java
String getFirst(List<String> strings, String alpha) {
    return strings.stream()
            .filter(x -> x.startsWith(alpha))
            .findFirst()
            .orElse("");
}
// Kotlin
fun getFirst(strings: List<String>, alpha: String): String {
    return strings.first { it.startsWith(alpha) }
}
Java 8의 스트림 도입은 컬렉션 작업 시 필수적인 기능이 되었습니다. Kotlin에서는 스트림이 더욱 편리하고 기능적으로 향상되었습니다. 각 컬렉션에는 이미 데이터 작업에 편리하고 자주 사용되는 메서드 세트가 있습니다. 또한 첫 번째 메소드 내부의 람다 표현식에 주목하세요. 함수 리터럴에 정확히 하나의 매개변수가 있는 경우 해당 선언을 제거하고(->와 함께) it 이라고 지칭할 수  있습니다 . 이제 마무리할 시간입니다... 저는 기능의 아주 작고 기본적인 부분만 시연했지만 이미 Kotlin을 사용해 보고 싶으실 거라고 확신합니다! 내 경험을 통해 다음과 같은 결론을 내릴 수 있습니다.
  • Java 개발자가 Kotlin 구문을 익히고 코드 작성을 시작하는 것은 매우 쉽습니다.
  • Kotlin은 Java와 완벽하게 호환되며 기존 프로젝트(예: 테스트)에서 이미 사용해 볼 수 있습니다.
  • Kotlin 코드는 더 깔끔하고 읽기 쉽기 때문에 많은 상용구를 작성할 필요가 없습니다 .
  • IDEA에는 자동 Java-Kotlin 변환기가 있으므로 미리 만들어진 Java 코드를 가져와 자동으로 Kotlin으로 변환할 수 있습니다.
  • 새 프로젝트는 Kotlin으로 작성해야 합니다. 인프라 관점에서는 Java와 동일하지만 사용 측면에서는 더 좋고 편리하기 때문입니다!
기사가 마음에 들었고 일반적으로 Java 관련 리소스와 관련이 있다면 실제 엔터프라이즈 프로젝트에서 Kotlin을 사용한 경험에 대해 계속해서 글을 쓸 수 있습니다. 유용한 링크:
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION