프로그래밍 언어/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