자바와 코틀린 비교해보기

김민태·2021년 7월 23일
post-thumbnail

자바와 코틀린의 문법 차이

자바와 코틀린의 문법 차이를 비교한다. 안드로이드 개발에서 과거에는 자바가 주로 사용되었으나, 현재는 코틀린이 많이 사용되고 있다. 이에 따라 로그인 기능을 구현하는 방식에서 두 언어의 차이를 분석한다.

로그인 로직 비교

로그인 기능을 구현하여 자바코틀린의 문법 차이를 비교한다. 변수 선언, Null 안전성, 조건문 활용, 람다 표현식 등의 차이점을 살펴본다.

자바 버전

자바로 로그인 기능을 구현하면 다음과 같다.

public class LoginService {
    public boolean login(String username, String password) {
        return username.equals("사용자1") && password.equals("비밀번호123");
    }
}

자바에서는 equals 메서드를 사용하여 문자열을 비교하고, 논리 연산자 &&를 활용하여 두 조건을 확인한다. 또한, 변수 선언 시 반드시 타입을 명시해야 한다.

코틀린 버전

같은 기능을 코틀린으로 구현하면 다음과 같다.

fun login(username: String, password: String): Boolean {
    return username == "사용자1" && password == "비밀번호123"
}

코틀린에서는 fun 키워드를 사용하여 함수를 선언하며, equals 대신 ==를 활용하여 문자열 비교가 가능하다. 또한, 변수 타입을 명시하지 않아도 자동으로 추론한다. val 키워드를 사용하여 불변 변수를 선언할 수 있으며, 변경이 필요한 경우 var를 사용한다.

주요 차이점

  • 세미콜론 생략 가능: 코틀린은 줄 끝에 ;을 사용하지 않아도 된다.
  • 함수 선언 방식 차이: 자바에서는 클래스 내부에 메서드를 정의해야 하지만, 코틀린에서는 독립적인 함수 선언이 가능하다.
  • 문자열 비교 방식: 자바equals를 사용해야 하지만, 코틀린==를 사용할 수 있다.
  • Null 안전성: 자바에서는 null을 직접 체크해야 하지만, 코틀린? 연산자를 활용하여 안전하게 처리할 수 있다.
  • val과 var: 코틀린에서 val은 불변 변수로, 재할당이 불가능하다. var는 가변 변수로, 값 변경이 가능하다.
  • 람다 표현식: 코틀린은 람다를 사용하여 간결한 코드 작성을 지원한다.
  • 스코프 함수 활용: let, apply, run, also, with 등의 스코프 함수를 활용하여 코드 가독성을 높일 수 있다.

Null 안전성

코틀린Null 안전성을 제공하여, NullPointerException 발생 가능성을 줄인다.

자바 버전

if (username != null) {
    System.out.println(username.length());
}

코틀린 버전

val username: String? = null
println(username?.length) // 출력: null

또한, let 함수를 활용하면 Null 체크 후 안전하게 코드 실행이 가능하다.

username?.let {
    println("사용자 이름 길이: ${it.length}") // 출력 없음 (username이 null이므로 실행되지 않음)
}

스코프 함수 활용

코틀린에서는 apply, run, also, with 등의 스코프 함수를 활용하여 객체 생성 및 초기화를 간결하게 처리할 수 있다.

apply와 with 차이

  • apply는 객체의 속성을 설정한 후 객체 자체를 반환한다.
  • with는 특정 객체를 사용하여 여러 작업을 실행할 때 유용하다.
val user = User("사용자1", "비밀번호123").apply {
    username = "새로운사용자"
}
println(user.username) // 출력: 새로운사용자
val userInfo = with(user) {
    "사용자 이름: $username, 비밀번호: $password"
}
println(userInfo) // 출력: 사용자 이름: 새로운사용자, 비밀번호: 비밀번호123

run의 활용

  • run은 객체를 초기화하면서 결과값을 반환할 때 사용된다.
  • 블록 내에서 this를 사용하여 해당 객체의 속성을 접근할 수 있다.
val userDetails = user.run {
    "사용자 정보: $username, 비밀번호는 숨겨짐"
}
println(userDetails) // 출력: 사용자 정보: 새로운사용자, 비밀번호는 숨겨짐

람다 표현식 차이

람다를 활용하면 코드가 더욱 간결해진다.

자바 버전

List<String> users = Arrays.asList("사용자1", "사용자2");
users.forEach(user -> System.out.println(user));

코틀린 버전

val users = listOf("사용자1", "사용자2")
users.forEach { println(it) } // 출력: 사용자1, 사용자2

데이터 클래스 활용

자바 버전

public class User {
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    public String getUsername() { return username; }
    public String getPassword() { return password; }
}

코틀린 버전

data class User(var username: String, var password: String)

결론

코틀린자바보다 간결한 문법을 제공한다. 세미콜론 생략, 독립적인 함수 선언, == 연산자를 통한 문자열 비교, Null 안전성 제공 등 다양한 차이점이 있다. 람다 표현식을 활용하여 반복문을 줄이고 가독성을 높일 수 있으며, let 함수를 통해 Null 체크를 효율적으로 처리할 수 있다.

또한, apply, with, run 등의 스코프 함수를 활용하여 객체를 효율적으로 다룰 수 있다. apply는 객체 설정 후 객체 자체를 반환하고, with는 특정 객체에서 여러 작업을 실행하는 데 유용하다. run은 객체 초기화 후 특정 값을 반환할 때 사용된다.

코드의 간결성과 유지보수성을 고려하면, 자바에서 코틀린으로의 전환을 고려할 가치가 있다.

0개의 댓글