kotlin 사용법(java랑 비교)

devdo·2024년 4월 30일
0

코틀린

목록 보기
2/2
post-thumbnail

코틀린의 핵심 개념을 자바와 비교하며 코드와 함께 정리합니다.

1강: 코틀린에 관한 재밌는 30가지 사실

  1. 코틀린은 IntelliJ를 만든 JetBrains에서 만들었다.
  2. IntelliJ는 Java 및 Kotlin을 이용한 프로젝트에서 널리 사용되는 통합개발환경(IDE)이다.
  3. Kotlin이라는 이름은 코틀린 섬에서 따왔는데, 이는 JetBrains의 R&D 센터가 상트페테르부르크에 있기 때문이다.
  4. 코틀린은 2020년 Stack Overflow에서 조사한 '개발자들이 가장 사랑하는 언어' 4위에 랭크된 적이 있다.
  5. 같은 해 조사된 '배우고 싶은 언어'에서는 6위를 차지했다.
  6. 2021년 12월 프로그래머스에서 조사한 설문 결과, 코틀린은 가장 배우고 싶은 언어 1위를 차지했다.
  7. 코틀린은 Java와 100% 호환 가능하면서도 현대적이고, 간결하며 안전한 언어를 사용하기 위해 탄생되었다.
  8. 탄생된 이유는 JetBrains에서 만드는 IntelliJ가 Java로 작성되어 있는데, 유지보수하다가 화가 나서 코틀린을 만들게 되었다고 한다.
  9. 코틀린 언어 공식 홈페이지에서 코틀린의 철학을 엿볼 수 있다.
  10. 코틀린은 Java와 100% 호환이 가능하기 때문에 JVM 위에서 동작한다.
  11. JVM 위에서 동작하는 언어에는 Java와 Kotlin 말고도 Scala, Groovy 등이 있다.
  12. 코틀린은 멀티 플랫폼 언어로, Android 앱 개발, iOS 앱 개발, 서버 개발, 웹 개발, 임베디드와 IoT, 데스크톱까지 다양한 플랫폼과 데이터 과학 분야까지 사용되는 것을 목표로 하고 있다.
  13. 하지만, 현재까지 가장 많이 사용되는 곳은 Android 앱 개발과 서버 개발이다.
  14. Android의 개발사인 구글은 2017년 안드로이드 공식 언어로 코틀린을 추가했으며, 2019년부터는 Kotlin First를 외치며 공식 문서 샘플 코드를 Java에서 Kotlin으로 우선 변경했다.
  15. 또한, 이때부터 구글에서 작성하는 Android 프로젝트는 코틀린으로 작성되었다고 한다.
  16. 코틀린은 정적 타입 언어이다. 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 프로그램 안에서 필드나 메소드를 사용할 때 컴파일러가 타입을 검증해준다는 뜻이다.
  17. 코틀린은 객체지향 프로그래밍(OOP)과 함수형 프로그래밍(FP)을 조화롭게 지원하고 있다.
  18. 코틀린은 무료 오픈소스로 아파치 2.0 라이선스를 갖고 있다.
  19. 아파치 2.0 라이선스는 소스 코드 공개 의무가 존재하지 않으며, 상업적 이용에 제한을 두지 않는다. 다시 말해서, 코틀린을 사용해 만들어진 프로그램은 소스 코드를 공개하지 않고 상업적으로 이용해도 된다는 의미이다.
  20. 코틀린 언어 개발자들은 코틀린 언어의 간결함을 살리기 위해서 프로그래머가 작성하는 코드에서 의미 없는 부분을 줄이고, 언어가 요구하는 구조를 만족시키기 위해 별 뜻은 없지만 프로그램에 꼭 넣어야 하는 부수적인 요소를 줄이기 위해 많은 노력을 했다.
  21. Kotlin의 파일 확장자는 .kt이다.
  22. Kotlin에서는 Java와 달리, 세미콜론을 붙이지 않아도 된다.
  23. Kotlin에서 주석 처리하는 방법은 Java와 동일하다.
  24. Kotlin에서는 Java와 동일하게 '패키지'라는 개념이 있다.
  25. Kotlin에서는 별도 지시어를 붙이지 않으면 모두 public이다.
  26. Kotlin에서는 출력을 할 때, System.out.println() 대신 println()만 작성해도 된다.
  27. Kotlin에서는 함수를 작성할 때 fun이라는 키워드를 사용한다. fun이라는 단어는 '재밌는'이라는 뜻도 갖고 있어서 가끔 fun fun(재밌는 함수)라는 외국 드립이 보일 때도 있다.
  28. Java에서는 '타입 변수명'을 사용했지만, 코틀린에서는 TypeScript와 유사하게 '변수명: 타입'을 사용한다.
  29. Kotlin에서의 Hello World는 다음과 같다.
  30. Kotlin에서는 변수나 함수, 클래스 모두 파일 최상단에서 선언할 수 있다.

2강: 코틀린에서 null을 다루는 방법

코틀린에서는 null을 허용하려면 ?를 붙여야 합니다.

자바

String name = null; // 가능

코틀린

var name: String? = null // `?`를 붙여야 null 허용
name?.length // null 안전 처리

코틀린에서는 null을 직접 다루지 않고 안전하게 처리하는 방법을 제공합니다.


3강: 코틀린에서 Type을 다루는 방법

코틀린은 타입 추론을 지원합니다.

자바

String text = "Hello";
int number = 42;

코틀린

val text = "Hello" // 자동으로 String으로 인식
val number = 42 // 자동으로 Int로 인식

4강: 코틀린에서 연산자를 다루는 방법

코틀린에서는 == 연산자가 값 비교, === 연산자가 참조 비교입니다.

자바

String a = new String("hello");
String b = new String("hello");

System.out.println(a == b); // false (참조 비교)
System.out.println(a.equals(b)); // true (값 비교)

코틀린

val a = "hello"
val b = "hello"

println(a == b) // true (값 비교)
println(a === b) // false (참조 비교)

5강: 코틀린에서 제어문을 다루는 방법

코틀린에서는 ifwhen을 활용해 조건을 평가합니다.

자바

int score = 85;
String grade;

if (score >= 90) {
    grade = "A";
} else {
    grade = "B";
}

코틀린

val score = 85
val grade = if (score >= 90) "A" else "B"
println(grade)

또한 when을 사용하면 더 깔끔한 코드가 가능합니다.

val grade = when (score) {
    in 90..100 -> "A"
    in 80..89 -> "B"
    else -> "C"
}

6강: 코틀린에서 반복문을 다루는 방법

코틀린에서는 forwhile을 지원하며 for-in 문법을 사용할 수 있습니다.

자바

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

코틀린

for (i in 0..4) {
    println(i)
}

..을 사용하면 범위 지정이 가능합니다.


7강: 코틀린에서 예외를 다루는 방법

코틀린에서는 try-catch를 사용해 예외를 처리합니다.

자바

try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("예외 발생: " + e.getMessage());
}

코틀린

try {
    val result = 10 / 0
} catch (e: ArithmeticException) {
    println("예외 발생: ${e.message}")
}

8강: 코틀린에서 함수를 다루는 방법

코틀린은 간결한 함수 선언이 가능합니다.

자바

int add(int a, int b) {
    return a + b;
}

코틀린

fun add(a: Int, b: Int) = a + b

9강: 코틀린에서 클래스를 다루는 방법

코틀린에서는 class를 사용해 클래스를 정의할 수 있습니다.

자바

class Person {
    String name;
    
    Person(String name) {
        this.name = name;
    }
}

코틀린

class Person(val name: String)

코틀린은 간결한 클래스 선언이 가능합니다.


10강: 코틀린에서 상속을 다루는 방법

코틀린에서는 open 키워드를 사용해 상속을 허용합니다.

자바

class Animal {
    void speak() {
        System.out.println("Animal speaks");
    }
}

class Dog extends Animal {
    void speak() {
        System.out.println("Dog barks");
    }
}

코틀린

open class Animal {
    open fun speak() = println("Animal speaks")
}

class Dog : Animal() {
    override fun speak() = println("Dog barks")
}

11강: 코틀린에서 접근 제어를 다루는 방법

코틀린에서는 public, private, protected, internal을 사용하여 접근 제어를 할 수 있습니다.

자바

public class Person {
    private String name;
    
    public Person(String name) {
        this.name = name;
    }
    
    private void greet() {
        System.out.println("Hello, " + name);
    }
}

코틀린

class Person(private val name: String) {
    private fun greet() = println("Hello, $name")
}

코틀린에서는 기본적으로 public이므로 명시하지 않아도 됩니다.


12강: 코틀린에서 object 키워드를 다루는 방법

코틀린에서는 object를 사용하여 싱글턴 객체를 만들 수 있습니다.

자바

class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

코틀린

object Singleton {
    fun greet() = println("Hello from Singleton")
}

코틀린에서는 object 키워드만 사용하면 싱글턴을 간편하게 만들 수 있습니다.


13강: 코틀린에서 중첩 클래스를 다루는 방법

코틀린은 inner class를 사용하여 중첩 클래스를 정의할 수 있습니다.

자바

class Outer {
    class Inner {
        void greet() {
            System.out.println("Hello from Inner Class");
        }
    }
}

코틀린

class Outer {
    inner class Inner {
        fun greet() = println("Hello from Inner Class")
    }
}

코틀린에서 inner를 명시해야 외부 클래스의 멤버에 접근할 수 있습니다.


14강: 코틀린에서 다양한 클래스를 다루는 방법

코틀린에서는 data class, sealed class를 사용하여 다양한 클래스를 정의할 수 있습니다.

자바

class User {
    String name;
    int age;

    User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}

코틀린

data class User(val name: String, val age: Int)

data class를 사용하면 toString, equals, hashCode가 자동 생성됩니다.


15강: 코틀린에서 배열과 컬렉션을 다루는 방법

코틀린에서는 배열과 컬렉션을 편리하게 다룰 수 있습니다.

자바

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
for (String name : names) {
    System.out.println(name);
}

코틀린

val names = listOf("Alice", "Bob", "Charlie")
names.forEach { println(it) }

코틀린에서는 listOf를 사용하면 간결하게 리스트를 만들 수 있습니다.


16강: 코틀린에서 다양한 함수를 다루는 방법

코틀린에서는 확장 함수를 활용할 수 있습니다.

자바

class Utils {
    static String greet(String name) {
        return "Hello, " + name;
    }
}

코틀린

fun String.greet() = "Hello, $this"
println("Alice".greet())

코틀린에서는 기존 클래스에 새로운 메서드를 추가할 수 있습니다.


17강: 코틀린에서 람다를 다루는 방법

코틀린에서는 람다 표현식을 간결하게 사용할 수 있습니다.

자바

Function<Integer, Integer> square = x -> x * x;
System.out.println(square.apply(4));

코틀린

val square: (Int) -> Int = { x -> x * x }
println(square(4))

18강: 코틀린에서 컬렉션을 함수형으로 다루는 방법

코틀린에서는 map, filter, reduce 등을 활용하여 컬렉션을 함수형으로 처리할 수 있습니다.

자바

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squaredNumbers = numbers.stream()
                                     .map(n -> n * n)
                                     .collect(Collectors.toList());

코틀린

val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers)

코틀린에서는 map을 사용하여 간결하게 변환할 수 있습니다.


19강: 코틀린의 이모저모

코틀린에는 다양한 기능이 있습니다.

코틀린의 기본적인 특징

  • 타입 추론
  • 널 안정성
  • 스마트 캐스팅
  • 고차 함수
  • DSL 구성 가능

코틀린을 활용하면 더욱 효율적인 개발이 가능합니다.


20강: 코틀린의 Scope Function

코틀린에서는 let, run, apply, also, with을 사용하여 스코프를 효과적으로 관리할 수 있습니다.

코틀린 예제

val user = User("Alice", 25).apply {
    println("User 생성됨: $name, 나이: $age")
}

apply를 활용하면 객체의 초기 설정을 간편하게 할 수 있습니다.



참고

  • 최태현 코틀린 강의
profile
배운 것을 기록합니다.

0개의 댓글