본문 바로가기
기타

[Kotlin] 코틀린에서 Type 다루는 법 : 기본타입/일반타입/타입변경/타입캐스팅/코틀린의 3가지 타입/ String Interpolation(문자열 덧붙이기)/String indexing(문자 가져오기)

by yapdol 2024. 9. 5.

 

[Kotlin] 코틀린에서 Type 다루는 법 : 기본타입/일반타입/타입변경/타입캐스팅/코틀린의 3가지 타입/ String Interpolation(문자열 덧붙이기)/String indexing(문자 가져오기)

 

 


 

 

 

 

코틀린에 문헌 및 강의를 통해 코틀린에 대해 독학하며

학습한 내용을 정리한 글 입니다.

인프런 - [자바 개발자를 위한 코틀린 입문] 이라는 강의를 수강하며

배운 것을 그날그날 요약/정리 했습니다.

 

 


 

 

🚩 학습 컨텐츠

  • 강의명 : 인프런 - [자바 개발자를 위한 코틀린 입문]

 

 

코틀린에서 Type 다루는 법 (요약)

  • 코틀린에서는 선언된 기본값을 보고 타입 추론
  • 기본타입들 간의 변환은 명시적으로 이루어진다.
  • is, !is, as, as? 를 이용해 타입을 확인/캐스팅함.
  • Any : Java의 Object 와 같은 최상위타입이다.
  • Unit: Jave의 void 와 동일
  • Nothing : 정상적으로 끝나지 않는 함수 반환 의미
  • 문자열 가공법 : ${변수}, """ """ 사용
  • 문자열에서 특정문자를 가져올때 [ ]를 사용

 

 

 

 

✅ 기본 타입 및 변경

기본 타입은 자바랑 코틀린이랑 똑같음.
가장 많이 쓰이는 Int, Long, Float, Double 에 대해 알아보자

- Byte
- Short
- Int
- Long
- Float
- Double
- 부호 없는 정수들

 

 

코틀린에서는 선언된 기본값을 보고 타입 추론

자바 : 기본타입간 변환은 암시적으로도 가능
코틀린 : 기본타입간 변환은 명시적으로 이루어져야함
val number1 = 3 // Int : L이 붙지 않았기때문에, Int 로 자동 추론
val number2 = 3L // Long : L이 붙었기떄문에 Long으로 자동 추론
val number3 = 3.0f // Float
val number4 = 3.0 // Double

 

 

⭐자바 : 암시적 변경 예시

    int number1 = 4;
    long number2 = number1;

    // int 타입의 값이 long타입으로 암시적 변경
    // : Java에서 더 큰 타입으로 암시적 변경!
    System.out.println(number1 + number2);

 

⭐코틀린 : 명시적 변경 예시

    // to변환타입()을 사용해 명시적으로 바꿔줘야함.
    val number1: Int = 4
    val number2: Long = number1.toLong()

    println(number1 + number2)

 

⭐코틀린 : nullabe 일 경우(=변수에 null 이 들어갈 수 있다면), 적절한 처리 필요

    fun main() {
        val number1: Int? = 3
        val number2: Long = number1.toLong() ?: 0L
    }

 

 

 

 

 

✅ 일반 타입 및 타입확인 / 타입캐스팅

 

* instanceof : 들어온 변수가 해당 타입인지 아닌지 확인하는 함수

 
타입 확인 : instanceof(자바) → is(코틀린) : 변수가 주어진 타입이면 true, 아니면 false
타입캐스팅 : (타입캐스팅) obj(자바) → as Person(코틀린) : obj를 (타입)으로 간주. (as는 생략가능)

 

 

 

⭐ 타입 확인법 비교 (자바 vs 코틀린)

    // 1-1. 자바 코드
    public static void printAgeIfPerson(Object obj) {
        if (obj instanceof Person) { // instanceof : 변수가 주어진 타입이면 true, 아니면 false
            Person person = (Person) obj; // (Person) : 주어진 변수로 해당타입을 변경한다.
            System.out.println(person.getAge());
        }
    }

    // 1-2-1. 코틀린으로 변경 (is)
    fun printAgeIfPerson(obj: Any) { // Object 대신 Any 사용
        if (obj is Person){ // (instanceof를 대신할 함수로 is 사용) 해석 : obj가 Person 이라면
            val person = obj as Person // (타입)으로 타입캐스팅 X → as 사용. 해석: obj를 Person 으로 간주
            println(person.age)
        }
    }

    // 1-2-2. 코틀린으로 변경 (as 생략 버전)
    // 스마트 캐스트 : as를 생략해도, 애당초 바로 obj.age 로 인식
    fun printAgeIfPerson(obj: Any) {
        if (obj is Person){ // (instanceof를 대신할 함수로 is 사용) 해석 : obj가 Person 이라면
            println(person.age)
        }
    }

 

 

// 2-1. 자바 코드
    public static void printAgeIfPerson(Object obj) {
        if (!(obj instanceof Person)) {
            Person person = (Person) obj;
            System.out.println(person.getAge());
        }
    }

    // 1-2-1. 코틀린으로 변경 (not is)
    fun printAgeIfPerson(obj: Any) {
        if (obj !is Person){
            println(person.age)
        }
    }

 

 

 

⭐ obj에 null이 들어오는 경우

 fun main() {
        printAgeIfPerson(Person("", 100))
    }

    fun printAgeIfPerson(obj: Any?) {
        val person = obj as? Person // as? : obj 가 null 인 경우, null
                                    //     : null X 인 경우, Person 타입으로 변경
                                    // as?를 통해, person → nullable person 으로 변경.
        println(person?.age)        // 따라서 person? 으로 작성해야함.
    }

 

 

 

 

 

 

 

 

 코틀린의 3가지 타입  :  Any, Unit, Nothing

 

1.  Any

  • Jave의 Object 와 동일한 역할 (모든 객체의 최상위타입)
  • 모든 원시타입의 최상타입도 Any
  •  Any? : null을 포함하고 싶은경우
  • Any 에 equals / hashCod / toString 존재.

 

2. Unit

Java의 void 와 동일한 역할 : 반환할 것이 없을 경우 사용

 


3. Nothing

Nothing은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할



 

 

 

 

String Interpolation(문자열 덧붙이기)

// ⭐ 자바에서 문자열 덧붙이기 방법 1 : String.format()
Person person = new Person("최태현", 100);
String log = String.format("사람의 이름은 %s이고 나이는 %s세 입니다.", person.getName(), person.getAge());

// ⭐ 자바에서 문자열 덧붙이기 방법 2 : StringBuilder와 builder.append
StringBuilder builder = new StringBuilder();
builder.append("사람의 이름은");
builder.append(person.getName());
builder.appent("이고 나이는");
builder.append(person.getAge());
builder.appent("세 입니다");

//⭐ 코틀린에서 문자열 덧붙이기 방법 1: ${변수} (String.format 대체)
val person = Person("최태현", 100)
val log = "사람의 이름은 ${person.name}"이고 나이는 ${person.age}세 입니다"


// ⭐ 코틀린에서 다중 문자열 작성법 2: """ """".trimIndent()
// 출력 결과물 : ABC
//             EFG
//             최태현
fun main() {
    val name = "최태현"

    val str = """
            ABC
            EFG
            ${name}
            """.trimIndent()
            println(str)

}

 

 

 

 

String indexing(문자 가져오기)

// ⭐ 1. 자바에서 특정 문자 가져오기
String str = "ABCDE";
char ch = str.charAt(1);

// ⭐ 2. 코틀린에서 특정 문자 가져오기
val str = "ABCDE"
val ch = str[1] // B

 

 

 

 

 

 

 

참고 문헌:

인프런 - [자바 개발자를 위한 코틀린 입문]