Kotlin-v3

Shaun·2022년 3월 31일
1

Kotlin

목록 보기
3/10
post-thumbnail

Data클래스

  • 자바에서는 매개체에대한 정보를 관리하기위해 또는 기능을 내기위해 클래스 -> 객체를 만들지만

  • 코틀린에서는 객체를 생성하는거 외의 목적으로 만드는것들은 다 함수로 만든다.

  • 그래서 코틀린에서의 클래스는 매개체에 대한 정보만을 관리하기 위한 클래스 하지만 이것만으로는 우리가 원하는 기능을 낼수 없으니 거기에 부가적인 기능을 추가한것이 DataClass

  • abstract,open, sealed, inner 로 클래스 정의 불가

  • 순수하게 특정 매개체 정보 관리를 위해만 사용

  • 반드시 주 생성자 가지고 있어야함

Data 클래스 메서드

  • Equals 는 주생성자 매개변수들만 비교! -> 그래서 왠만하면 주생성자로 만드는게 유리함

Generic

= 객체 생성시 타입을 정하겠다라는 의미이다. 자바와 매우 흡사하다.

제네릭 예시1

제네릭 예시2

  • 당연하게도 매개변수에도 재네릭 설정이 가능하다
  • 코틀린은 클래스생성시 프로퍼티 자동생성(필드,게터,세터)

제네릭 예시3

  • 응용해서 좀더 복잡한 재네릭도 가능하다.

가변성

InnerClass(중첩 클래스)

  • 자바의 내부클래스와 매우 비슷하다

  • 내부 클래스에서 외부 클래스 사용은 자유롭지만 외부에서 내부는 그렇지 못하다.

  • 내부 클래스를 사용하려면 외부클래스가 객체화 되있어야한다.

익명 중첩 클래스

  • 자바의 익명클래스 와 매우 흡사하다. 사용법도 거의 흡사하다.

  • 인터페이스나 추상클래스 생성과 동시에 바로 오버라이딩해서 사용

  • 한번만 사용가능/ 객체화 불가

null처리

  • 자바에서 널포인트 익셉션으로 많이 고생했지만 코틀린에서는 다양한 대응법이 존재한다.

1. ?/?:/?.

? = 널이 들어올수도 , 널이 아닌 값이 들어올수도 있다.

?: (Elvis 연산자) = 널이 들어오면 기본값(디폴트) 값 사용, 널이 아니면 그대로 사용(오류발생 x)

?.(safe call)= 널이 들어올수도 있는값에 변수나 ,메서드 사용시 사용 널이면 널반환(오류발생 x)

  • 보통 ?. ?: 같이 씀

2. !!

!! = 널이 들어올수도 , 널이 아닌 값이 올수도 -> 널이 못들어오게 한다.

형변환(스마트캐스팅)

  • 자바의 형변환과 매우 흡사

  • 코틀린은 모든 값을 객체로 관리하기 떄문에 코틀린에서의 형변환은 다른 클래스 타입의 객체로 변환하는것을 의미

  • 형 변환은 객체의 클래스 타입이 아닌 객체의 주소 값을 가지고 있는 참조 변수의 타입이 변경되는 것이다.

  • 객체의 타입변환은 상속관계, 구현한 인터페이스 타입에 해당한다.
    -자식클래스 타입으로 변환
    -부모클래스 타입으로 변환
    -다른 자료형 타입으로의 변환

  • 기본적인 형변환(스마트캐스팅) 이다. 자식클래스는 부모클래스로 형변환이 가능하고 구현클래스는 인터페이스로 형변환이 가능하다.(반대는 x)

객체 타입 변환

  • 객체의 타입변환은 상속관계나 구현한 인터페페이스 타입에 해당된다
    -부모 클래스 타입으로 형변환
    -자식 클래스 타입으로 형변환
    -구현한 인터페이스 타입으로 형변환
    -인터페이스를 구현한 클래스 타입으로 형변환

1. As연산자

  • 객체를 지정된 클래스 타입으로 변환하는 연산자
  • 참조변수 as 클래스 타입
  • 객체가 지정된 클래스타입과 관계가 없을 경우 오류 발생
  • 형 변환이 발생한 참조 변수는 변환된 타입 유지

2. Is 연산자

  • 형 변환이 가능하면 True or False 반환
  • if문으로 구상하여 사용하면 그 구문안에서는 타입이 유지되지만 구문을 나가게되면 전타입으로 돌아옴
  • if 문에서 true가 나오면 자동으로 스마트캐스팅

3.Any + is연산자

  • 코틀린에서 모든 객체들은 Any클래스를 상속한다. 따라서 모든 객체의 주소 값은 Any 타입 참조 변수에 담을수 있다.

  • is + as // instanceof 반대는 !is

  • obj 가 null 일경우 as?도 가능

기본 타입의 형변환

  • 참조 변수의 타입이 변경되는 것이 아닌 새로운 객체가 생성되어 반환된다.
  • toByte(),toShort(),toInt(),toLong(),toFloat(),toDouble(),toChar()

null 안정성을 위한 형 변환

  • null 을 허용하는 변수에 Null이 들어있지 않다는 것을 보장해주면 null을 허용하지 않는 타입으로 스마트 캐스팅 발생

  • 매개변수를 any로 받을경우에는 널체크와 타입체크까지 해줘야한다. 그래서 is사용 추천
profile
호주쉐프에서 개발자까지..

0개의 댓글