Kotlin - 1

KHS·2023년 3월 28일
0

Kotlin

목록 보기
1/4

Kotlin

Kotlin은 JetBrain에서 개발한 JVM 100% 호환가능한 언어이다.

Kotlin은 간결하고 모던한 코드를 지향한다.

Kotlin은 2011년에 출시 됐으며 2017년부터 Android의 공식 언어로 채택됐다.

Kotlin은 JVM과 100% 호환되기 때문에 기존 Java 개발 환경에서 그대로 사용 가능하며 파일 확장자는 kt이다.

클래스 정의

  • public class ~~와 같은 키워드 생략 가능
  • fun main() 키워드로 클래스의 main 메소드 구현
  • main() 메소드에 static 키워드 사용하지 않음
  • 클래스를 명시적으로 정의하지 않아도 함수 및 필드 정의 가능

변수 정의

  • 기본 스코프는 public
  • var - variable / val - value
  • 권장 사항은 val로 생성 후 필요 시 var로 변경
  • 변수 타입은 컴파일러가 자동 추론
  • 선언과 동시에 값 입력 시 타입은 생략해도 무관
var temp1 = 5L // == long temp1 = 5L;
val temp2 = 10L // == final long temp2 = 10L;

함수 정의

  • fun 이름(파라미터 이름: 타입 = 기본값): 반환 타입 {} 형태로 정의

Primitive / Reference Type

//Java
long num1 = 5L;
final long num2 = 10L;

//Kotlin
//연산을 사용할 때는 Reference Type 사용 권장
var num1: Long = 5L
val num2: Long = 10L

println(num1 + num2)

Null 처리

//nullable 변수는 타입 뒤에 ?를 추가
var num1: Long? = 5L
var num2: Long = 10L

num1 = null
num2 = null //에러

fun someFunction(param: String?): String {
	//함수 매개변수에서 null 가능 여부 확인
    return param.toUpperCase() //에러
}

//null-safe 문법
var str:String? = null
println(str?.length) //null 출력
println(str?.length ?: 0) //0 출력
println(str!!.length) //컴파일러에게 null이 아니라고 명시
---
//Java
@Nullable
public String getName() {
	return name
}

//Kotlin
println(xxx.getName().length) //에러

객체 초기화

//객체 초기화 시 new 키워드 사용하지 않음
val person = Person("이름")

Type 관리

val num1 = 5   //int
val num2 = 10L //long

println(num1 + num2) //에러
println(num1.toLong() + num2)

val num3 = 3.0f //float
val num4 = 6.0  //double

println(num3 + num4) //에러
println(num3.toDouble() + num4)
---
//Java
void compare(Object obj) {
	if(obj instanceof Person) {
    	Person person = (Person) obj;
    }
}

//Kotlin
fun compare(obj: any) {
	if(obj is Person) { //부정의 뜻은 !is
    	val person = obj as Person //타입 캐스팅, nullable은 as?
    }
}

특이 타입

Any

  • Java의 Object와 같은 타입
  • null 값 할당하려면 any?와 같이 입력

Unit

  • Java의 void와 같은 타입
  • return 타입으로 작성하는 Java와 달리 타입 인자로도 사용 가능
  • 함수형 프로그래밍에서는 단 하나의 인스턴스만 갖는 타입으로 표현

Nothing

  • 코드가 정상적으로 끝나지 않는다는 표현
  • 오류만을 반환하는 타입, 함수에 사용

String Interpoation/Indexing

//Java
System.out.println("%s - %s".formatted(param1, param2);

String name = "abcd";
System.out.println(name.charAt(1));

//Kotlin
println("${param1} - ${param2}") //중괄호 생략 가능

val name = "abcd"
println(name[1])

연산자

  • 단항 연산자, 산술 연산자 동일
  • 비교 연산자('<', '>', '<=', '>=')는 객체에 사용 시 내부적으로는 compareTo 함수를 사용함
  • 인스턴스의 메모리 주소 비교 시 ===, 값 비교 시 == 사용
    • Java equals <=> == Kotlin
    • Java == <=> === Kotlin
    • Kotlin에서 == 사용 시 내부적으로는 equals 함수를 사용함

Kotlin 전용 연산자

  • in / !in
    • 콜렉션에 포함/비포함 여부 확인
  • a..b
    • a부터 b까지의 범위 객체를 생성
  • a[i]
    • 콜렉션의 요소를 가져옮
  • a[i] = b
    • 콜렉션의 요소를 수정함

연산자 오버로딩

  • 클래스 내 특정한 키워드를 이용해 연산자를 오버로딩 가능
operator fun plus(...): Long {
	return ... + ...
}
profile
Java & Vue ...

0개의 댓글