본문 바로가기

Kotlin23

Object 키워드 companion object 자바의 클래스를 코틀린으로 변경해 보자. public class JavaPerson { private static final int MIN_AGE = 1; public static JavaPerson of(String name) { return new JavaPerson(name, MIN_AGE); } private String name; private int age; private JavaPerson(String name, int age) { this.name = name; this.age = age; } } class Person private constructor( var name: String, var age : Int, ) { } 코틀린에는 static 키워드가 존.. 2023. 1. 12.
접근 제어 자바와 코틀린의 가시성 제어 protected 자바에서 protected는 같은 패키지 또는 하위 클래스에서만 접근이 가능했다. 하지만 코틀린에서는 선언된 클래스 또는 하위 클래스에서만 접근 가능하다고 한다. 코틀린에서는 패키지를 namespace를 관리하기 위한 용도로만 사용하기에 가시성 제어로는 사용하지 않기에 같은 패키지에서도 사용할 수 없다. default default는 자바에서 같은 패키지에서만 접근이 가능한 접근 지시어였다. 마찬가지로 코틀린에서는 default라는 지시어가 사라지고 internal이라는 같은 모듈에서만 접근이 가능한 지시어가 추가되었다. 한 번에 컴파일 되는 코틀린 코드를 모듈이라고 할 수 있다. 코틀린 파일의 접근 제어 코틀린 파일에서 protected는 사용이 불가능하다.. 2023. 1. 2.
상속 1. 추상 클래스 public abstract class JavaAnimal { protected final String species; protected final int legCount; public JavaAnimal(String species, int legCount) { this.species = species; this.legCount = legCount; } abstract public void move(); public String getSpecies() { return species; } public int getLegCount() { return legCount; } } 자바로 작성된 추상클래스를 코틀린으로 옮겨보자. abstract class Animal( protected var s.. 2023. 1. 1.
클래스 클래스와 프로퍼티 자바의 클래스는 다음과 같다. public class JavaPerson { private final String name; private int age; public JavaPerson(String name, int age) { if (age = 20; } } 이를 코틀린으로 변환해보자. 드디어 코틀린 파일 말고 클래스를 만들어본다.!! 1. name, age를 프로퍼티로 갖고 있다. 2. name은 final로 상수로 표현된다. 3. name, age를 생성자로 받는다. 4. name만 받고 default 값으로 age를 1로 세팅하는 생성자가 오버로드 돼있다. 5. name은 setter가 없다. 6. getter가 구현되어 있다. 7. 성인임을 나타내는 메서드가 하나 있다. cl.. 2022. 12. 5.
함수 문법 함수 선언 문법 fun max(a: Int, b: Int): Int { return if (a > b) { a } else { b } } return 대신 함수가 표현식을 리턴한다면 =을 통해 할당할 수 있다. fun max(a: Int, b: Int): Int = if (a > b) { a } else { b } 최대로 다음과 같이 줄일 수 있다. fun max(a: Int, b: Int) = if (a > b) a else b =을 쓴다면 반환 타입을 코틀린이 추론 가능하기 때문에 생략 가능한다. { } 을 사용한다면 명시적으로 반환 타입을 작성해주어야 한다. default parameter 자바에서는 오버 로딩을 통해 default 값을 세팅하고 매개변수를 숨길 수 있다. 다만 자바에서는 이를 위해.. 2022. 12. 4.
예외 처리 try catch finally 구문 큰 문법 차이는 없으나 catch 구문에서 에러의 타입을 정의하는 부분과 코틀린에서 객체를 생성하는 문법을 기억하고 있으면 된다. 문자를 숫자로 변환하는 try-catch-finally 구문을 확인해보자. fun parseIntOrThrow(str: String): Int { try { return str.toInt() } catch (e: NumberFormatException) { throw IllegalArgumentException("$str is not number") } } null 반환문도 가능하다. fun parseIntOrNull(str: String): Int? { return try { str.toInt() } catch (e: NumberForm.. 2022. 12. 4.
반복문 for-each문 자바 코드 List collect = Stream.of(1, 2, 3).collect(Collectors.toList()); for (Integer integer : collect) { System.out.println(integer); } 코틀린 코드 val numbers = listOf(1L, 2L, 3L) for (number in numbers) { println(number) } 차이점 콜론 대신 in을 사용한다. list를 만드는 방법이 다르다. 공통점 in, 콜론 뒤에 Iterable이 구현된 타입을 받는다는 것. 전통적인 for문 자바 코드 for (int i = 1; i = 1; i--) { System.out.println(i); } 코틀린은 조금 다르다. for (i.. 2022. 12. 4.
조건문 if문 fun validationScoreIsNotNegative(score: Int) { if (score = 50) { return "P" } else { return "F" } } Expression , Statement 자바에서 if-else는 Statement이지만 코틀린에서는 Expre.. 2022. 11. 30.
연산자 단항 연산자 / 산술 연산자 ++, --, +, -, * , / , %, +=, -=, *=, /=, %= 단항 연산자와 산술 연산자는 자바와 완전히 동일하다. 비교 연산자, 동등성, 동일성 > , money2) { println("${money1} is bigger than ${money2}") } 자바에서 동일성에 == 을 통해 주소 값을 사용하고 동등성에는 equals를 호출해야 했다. 코틀린에서는 동일성에 === 을 사용하고 동등성에 ==을 호출한다. var money1 = JavaMoney(2_000L) var money2 = money1 var money3 = JavaMoney(2_000L) println(money1 === money2) println(money1 === money3) pri.. 2022. 11. 27.
Type 기본 타입 코틀린에서는 선언된 기본 값을 보고 타입을 추론한다. val num1 = 3 // Int val num2 = 3L // Long val num3 = 3.0f // Float val num4 = 3.0 // Double 자바에서는 기본 타입 간의 변환은 암시적으로 이루어진다. 하지만 코틀린에서 타입 변환은 명시적으로 이루어져야 한다. 자바에서는 더 큰 타입으로 암시적인 변경이 가능했습니다. int num = 1; long num2 = num; 코틀린은 to"Type"()으로 명시적으로 변경해야 한다. var num1 = 3 // Int var num2 = 3L // Long var num3 = 3.0f // Float var num4 = 3.0 // Double num2 = num1.toLong.. 2022. 11. 27.