티스토리 뷰
참조 : https://kotlinlang.org https://blog.jetbrains.com/kotlin/
Kotlin?
Android 앱 개발을 하면서 Java를 사용하였고 Studio에서 제공하는 Kotlin 변환 기능을 보면서 Kotlin에 관심을 가지게 되었다.
Kotlin은 Jetbrains에서 만든 개발언어다. Android, JVM, 브라우저 등에서 사용가능하며 앞으로 웹, 임베디드, IoT 등 다양한 플랫폼으로 진출한다는 목표를 가지고 있다고 한다. 정적 타입의 언어로 2011년에 출시되었고 많은 앱 개발자들이 사용하고 있다.
Kotlin vs Java
1. val과 var
Kotlin은 변수 선언에서 val과 var을 사용한다. 타입추론이 가능하여서 Java와 다르게 type 생략이 가능하다. 또한 ;을 생략가능하다.
var은 variable의 약자로 read/write가 가능한 일반 변수(mutable)이다.
val은 valuable의 약자로 read만 가능한 final 변수(immutable)이다.
Java |
Kotlin |
final int tmp = 1; |
val tmp = 1 |
String tmp = "a"; | var tmp = "a" |
초기화시 값을 할당하지 않는다면 type을 명시합니다. val tmp: Int type명은 제일 앞글자를 대문자로 합니다.
Java에서 Void tmp = null; 처럼 val tmp: Nothing? = null 과 같이 type을 생략할 수 있습니다.
2. Non-Null / Nullable
Kotlin은 null 안정성을 가지고 있다. 모든 변수는 null을 허용하지 않지만 변수에 ?를 붙여서 nullable로 만들 수 있다.
null을 값으로 가질 수 없으면 Non-Null, 가질 수 있으면 Nullable
var tmp: String? = null 과 같이 쓰며 ?를 사용한다.
val tmp: Nothing? = null 과 같이 type을 생략할 수 있다.
3. variable cast
Kotlin에서는 as와 is를 통해 casting이 가능하다. as는 값의 casting, is는 값이 맞는지 체크한다.
Java | Kotlin |
Object object = "a"; int it = 0; if(object instanceof Integer) { it = (int) object; } | val a: Any? = "a" val b: Int? = a as? Int if (a is Int) { b = a as? Int } |
4. Println
출력을 할 때 $를 통해 간편하게 할 수 있다.
Java | Kotlin |
System.out.println("a" + tmp); | println("a $tmp") |
5. Class와 Propery
Kotlin에서는 1개의 primary constructor, N개의 secondary constructor을 가진다. primary constructor을 위한 init {} block을 제공한다.
또한 primary constructor와 함께 오는 변수는 전역 변수이다.
default 값을 가질 수 있으며 default value 정의한 생성자를 Java에서 부르려면, @JvmOverloads를 적용해야 한다.
Kotlin에서는 따로 나타내지 않으면 모두 public이다. class는 아래와 같이 선언한다.
class Example(
val name: String
var isMan: Boolean
)
fun main(args: Array<String>) {
val person = Example("Heedu", true)
}
위와 같은 코드가 있을 때 컴파일러가 자동으로 getter와 setter를 만들어 준다. isMan처럼 is로 시작하는 property getter에는 get이 붙지 않고 is를 사용한다.
6. companion object
Kotlin에서는 static 대신 companion object를 사용하여 외부 접근을 가능하게 한다.
7. when
Kotlin에서 when은 다양하게 쓰인다.
when을 switch처럼 쓰는데 이때, break이 필요없다. 조건문 및 반복문에서 when이 is와 함께 많이 쓰인다.
8. Loop
Kotlin에서 반복문 중 for문이 Java와 조금 다르다.
Java | Kotlin |
for (i=0;i<10;i++) for(i=0;i<=10;i++) for(i=10;i>=0;i--) for(i=0;i<=10;i+=3); | for (i in 0 until 10) for (i in 0 .. N) for (i in 10 downTo 0) for(i in 0 .. 10 step 3) |
9. Safe call과 Elvis operator
Kotlin에서 ?. 을 통해 안전 호출을 할 수 있다. 앞의 타입이 null이 아니면 호출하여 값을 리턴하고 아니면 null을 호출한다.
Elvis operator ?: 은 앞의 값이 참이면 값을 반환하고 아니면 지정한 값을 반환한다.
val tmp = a?.length ?: -1
강제호출을 할때는 !! 을 사용한다.
10. 상속
Java | Kotlin |
Default class : 모든 class/function은 재 정의 가능 abstract : extends로 상속 구현 interface : implement로 상속 구현 public interface A { void init(); } public abstract class B { public abstract void init(); } public class C extends B implements A { @Override public void init() { } } | Default class : 모든 class/function은 재 정의 불가 재 정의를 위해서는 open 사용 상속의 정의는 : 으로 한다. 다중 상속은 , 로 한다. interface A { fun init() } abstract class B { abstract fun init() } class C : B(), A { override fun init() { } } |
11. data class
Java | Kotlin |
public class User { private long id; private String name; private String email;
@Override public int hashCode() { return 1; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null) return false; if (this.getClass() != o.getClass()) return false;
User user = (User) o; return id != user.id && (!name.equals(user.name) && !email.equals(user.email)); } } | data class User(val id: Long = 0, val name: String? = null, val email: String? = null) |
12. 기타
외에도 여러가지 Java와 다른 Kotlin 기능들이 있다. Sealed class, singleton, lazy evaluation, Lambda, ViewBinding 등이 있다.
위 글을 써보면서 실제 대형 프로젝트를 kotlin을 이용해서 하기 위해서는 더 많은 공부가 필요하다고 생각했다. 아직 완전 Kotlin으로만 완성된 앱보다는 Java와의 혼용이 된 앱이 많으므로 이를 고려해야 할 것 같다.
작성자 : 히더
'공부 > SW' 카테고리의 다른 글
오버헤드 (Overhead) (0) | 2018.10.09 |
---|---|
[C++] 파일 입출력 string 한 줄씩 읽어오기 (0) | 2018.10.02 |
[C++] int를 string으로, string을 int로 (0) | 2018.08.31 |
[C++] string 헤더 함수 정리 (0) | 2018.08.30 |
[Android] 구글 Firebase (0) | 2018.08.24 |
- Total
- Today
- Yesterday
- 17142
- 삼성
- 트렌드
- SWEA
- boj
- hackerrank
- 역량 테스트
- 게리맨더링 2
- scanf
- 팁
- 연구소 3
- 백준
- 2018 KAKAO BLIND RECRUITMENT
- 미세먼지 안녕!
- 2018 카카오 블라인드 채용
- SW Expert Academy
- 이차원 배열과 연산
- 17779
- 알고리즘
- 17143
- DP
- STL
- 입출력
- DFS
- 17144
- string
- 17140
- 시간 복잡도
- 새로운 게임 2
- 17837
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |