프로그래밍 언어/Kotlin

[Kotlin] 코틀린 문법 요약 (자바코드로 훑어보기)

DevPing9_ 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