[Kotlin] Type 다루기

백마금편·2022년 7월 31일
0

Kotlin

목록 보기
3/5
post-thumbnail

Type

선언된 기본 값으로 타입을 추론한다.

java

int intType = 3;			// Int
long longType =3L;			// Long
Double doubleType = 3.0;	// Double
Float floatType = 3.0f		// Float

kotlin

val intType = 3			// Int
val longType = 3L		// Long
val doubleType = 3.0	// Double
val floatType = 3.0f	// Float

Convert Type

java

Java : 기본 타입간의 변환은 암시적으로 이루어질 수 있다.

int intType = 1;
long longType = intType;

System.out.println(intType + longType);

kotlin

Kotlin : 기본 타입간의 변환은 명시적으로 이루어져야 한다.

val intType = 4
// val longType: Long = intType		// 컴파일 오류
val longType: Long = intType.toLong()

println(intType + longType)
  • nullable 처리
val intType: Int? = 4
val longType: Long = intType?.toLong() ?: 0L

println(intType + longType)

타입 캐스팅

java

public static void getPersonAge(Object obj) {
	if (obj instanceof Person) {
    	Person person = (Person) obj;
        System.out.println(person.getAge());
    }
    
    if (!(obj instanceof Person) {
    	System.out.println("object is not Person tpye");
    }
}

kotlin

fun getPersonAge(obj: Any) {
	if (obj is Person) {	// is == instanceof(java)
    	val person = obj as Person	// 생략 가능, as Person == (Person) in java
        println(person.age)
    }
    
    if (obk !is Person) {
    	println("object is not Person tpye")
    }
}
  • nullable 타입
fun getPersonAge(obj: Any?) {
	if (obj is Person) {
    	val person = obj as? Person
        println(person.age)
    }
}

Any, Unit, Nothing

Any

  • 모든 객체의 최상위 타입(Java의 Object 역할)
  • 모든 Primitive Type의 최상위 타입도 Any
  • Any 자체로는 null 포함 불가능
  • equals, hashCode, toString 존재

Unit

  • Java의 void와 동일한 역할
  • Unit 자체로 타입 인자로 사용 가능
  • 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미

Nothing

  • 함수가 정상적으로 끝나지 않았다는 사실을 표현
  • 무조건 예외를 반환하는 함수, 무한 루프 함수 등
fun fail(message: String): Nothing {
	throw IllegalArgumentException (message)
}

String Type

String interpolation

Java

Person person = new Person("김태환", 29);

String log = String.format("이름 : %s, 나이 %s 입니다.", pserson.getName(), person.getAge());

StringBuilder builder = new StringBuilder();
builder.append("이름 : ");
builder.append(pserson.getName());
builder.append(", 나이는 : ");
builder.append(person.getAge());
builder.append(" 입니다.");

Kotlin

${변수}를 사용

val person = Person("김태환", 29)
var log = "사람의 이름은 ${person.name},  나이 ${person.age} 입니다."

// 변수일 경우 중괄호 생략 가능
val name = "김태환"
val age = 29
log = "사람의 이름은 $name,  나이 $age 입니다."

log = """
	사람의 이름은
    $name,
    니아 $age
    입니다.
""".trimIndent()

String indexing

Java

String str = "김태환";
char ch = str.charAt(1);

Kotlin

val str = "김태환"
val s = str[1]
}

정리

  • 코틀린의 변수는 초기값을 보고 타입을 추론하며, 기본 타입들간의 변환은 명시적으로 이루어진다.
  • is,!is 를 이용해 타입을 확인하고 as,as? 를 사용하여 타입 캐스팅한다.
  • Any 는 java의 Object과 같은 최상위 타입이다.
  • Unit 은 java의 void와 동일하다.
  • Nothing 은 정상적으로 끝나지 않는 함수의 반환을 의미한다.
  • 문자열을 가공할때 ${변수}""" """을 사용하면 깔끔한 코딩이 가능하다.
  • 문자열에서 문자를 가져올때의 java의 배열처럼 []를 사용한다.
profile
뭐 어떻게 잘 되겠지

0개의 댓글