-
[Kotlin] 코틀린 문법 요약 (자바코드로 훑어보기)프로그래밍 언어/Kotlin 2022. 9. 19. 22:11
자바코드를 코틀린 코드로 변환함으로써 코틀린을 이해해보는
코린이의 포스팅입니다.
계속 업데이트 될 예정입니다.
1. 변수 초기화
주석부분이 Java 코드입니다.
1-1. val vs var
val user: User = User(name, eamil) // public final User user = new User(name, email); var userName: String = "Ping9" // public String userName = "Ping9";
1-2. ? vs .? vs ?:
var user: String? = User(name, eamil) // public User user = new User(name, email); var userName = user?.getName() // public var userName = (user==null) ? null : user.getName(); var userEmail = user ?: user.getEmail() // public var userEmail = (user==null) ? null : user.getEmail();
1-3. (TBD)
2. 클래스 선언
2-1. var vs val (getter, setter)
프로퍼티의 default 접근제어자는 private,
val 은 setter 만 생성,
setter 와 getter 는 코틀린코드에서 object.property 로 접근//Kotlin class Book(var name: String, val category: String?) fun main() { val book: Book = Book("Ping9", null) println(book.category) // 출력결과 : null val book2: Book = Book() // Compile Error } //Java public final class Book { @NotNull private String name; @Nullable private final String category; @NotNull public final String getName() { return this.name; } public final void setName(@NotNull String name) { this.name = name; } @Nullable public final String getCategory() { return this.category; } public Book(@NotNull String name, @Nullable String category) { this.name = name; this.category = category; } }
2-2. 상속, data, override, open, as?(Safe Cast), is(Type Check & Smart Cast), 삼항연산자
as? 키워드는 Safe Casting 으로 해당타입이아니면 null 을 반환하고 해당타입이면 캐스팅한다.
is 키워드는 타입체크 연산자이며 캐스팅하지 않아도 자동으로 캐스팅 한 후 비교한다.
data 키워드는 ToStirng(), Equals(), HashCode() 를 오버라이딩 해줍니다.
open 키워드는 kotlin 의 클래스 선언 및 setter, getter 디폴트값인 final 키워드를 제거하는 키워드이다.
kotilin 에는 삼항연산자가 없다.//== Kotlin == open class Book(open var name: String, open val category: String?) data class EnglishBook(override var name: String, override val category: String?, var region: String) : Book(name, category) class SuperBook(var name: String) fun main() { val englishBook: EnglishBook = EnglishBook("Ping9", null, "en") val castToBook1: Book? = englishBook as? Book val castToBook2: Book? = SuperBook("Ping9") as? Book println(castToBook1.toString()) // 출력결과 : EnglishBook(name=Ping9, category=null, region=en) println(castToBook2.toString()) // [no exception] 출력결과 : null val isThisBook: String = if(englishBook is Book) "this is Book!" else "this is not a Book!" //Kotlin 에는 삼항연산자가 없다. println(isThisBook) // 출력결과 : "this is Book!" println(englishBook == Book("Ping9",null)) // EqualsAndHashCode 오버라이딩 됨. 출력결과 false } //== Java == // 1. Book Class public class Book { @NotNull private String name; @Nullable private final String category; @NotNull public String getName() { return this.name; } public void setName(@NotNull String var1) { this.name = var1; } @Nullable public String getCategory() { return this.category; } public Book(@NotNull String name, @Nullable String category) { this.name = name; this.category = category; } } // 2. English Book Class @ToString @EqualsAndHashCode public final class EnglishBook extends Book { @NotNull private String name; @Nullable private final String category; @NotNull private String region; @NotNull public String getName() { return this.name; } public void setName(@NotNull String var1) { this.name = var1; } @Nullable public String getCategory() { return this.category; } @NotNull public final String getRegion() { return this.region; } public final void setRegion(@NotNull String var1) { this.region = var1; } public EnglishBook(@NotNull String name, @Nullable String category, @NotNull String region) { this.name = name; this.category = category; this.region = region; } } //3. Super Book Class public final class SuperBook { @NotNull private String name; @NotNull public final String getName() { return this.name; } public final void setName(@NotNull String var1) { this.name = var1; } public SuperBook(@NotNull String name) { this.name = name; } }
728x90'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] Runtime 에 타입정보를 알아내는 방법 (0) 2023.05.15 [Kotlin] 객체 데이터 암호화 하기 (0) 2023.05.08 [Kotlin] static nested Class, inner Class 문법 정리 (0) 2022.11.06 [Kotlin] 코틀린에서 JPA Lazy Loading 적용하기 (0) 2022.09.25