Kotlin

    프로퍼티와 필드

    프로퍼티와 필드

    속성(property) 선언 코틀린에서 클래스는 var 키워드를 사용하여 변경가능하거나 val 키워드를 사용하여 읽기전용 프로퍼티를 가질 수 있다. class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: String = "123456" } 또한 이름을 통해 프로퍼티를 참조할 수 있다. fun copyAddress(address: Address): Address { val result = Address() //코틀린에선 new 연산자가 필요없다. result.name = address.name // 접근..

    클래스와 상속

    클래스와 상속

    클래스 코틀린에서 클래스는 class 키워드를 사용해서 선언한다. class Persion{/* ... *} 클래스 선언은 클래스 이름, 클래스 해더(유명 매개변수, 기본 생성자 및 기타 항목 지정) 및 중괄호로 묶인 클래스 본문으로 구성된다. 헤더와 본문 모두 선택사항이다. 만약 클래스에 본문이 없으면 중과호를 생략할 수 있다. class Empty 생성자(Constructors) 코틀린의 클래스는 기본(primary) 생성자와 하나 이상의 보조(secondary) 생성자를 가질 수 있다. 기본생성자는 클래스 헤더의 한 부분으로 클래스 이름 뒤에 위치한다 class Person constructor(firstName: String){} 기본생성자 뒤에 어노테이션이나 가시성 수식어(접근제어자)가 없으면 ..

    흐름제어

    흐름제어

    if 코틀린에서 if는 expression으로 값을 리턴한다. 그래서 삼항 연산자(condition? then : else)가 없다. 일반 if로 동일하게 할 수 있기 때문이다. 표현(expression)과 상태(statement)의 차이를 아주 간단하게 설명하면 값의 여부이다. 이 둘의 예시는 자바의 if문과 코틀린의 if문을 생각하면 편하다. 자바의 if문은 상태(statement)로 결과를 리턴하지 않고 끝이 난다. 하지만 코틀린의 if문은 표현(expression)으로 대입 연산자를 통해 리턴 값을 받을 수 있다. //전통 var max = a if( a b) max = a else max = b //expression으로..

    타입 체크와 캐스트(is, as)

    타입 체크와 캐스트(is, as)

    is와! is 연산자 is와! is를 사용하는 것은 런타임에서 객체가 주어진 타입을 준수하는지 여부를 식별한다. if (obj is String) { print(obj.length) } if (obj !is String) { // same as !(obj is String) print("Not a String") } else { print(obj.length) } Smart casts is를 사용하는 대부분의 경우 명시적 캐스트 연산자를 사용할 필요 없다. 코틀린 컴파일러가 불변 값에 대한 is 검사 및 명시적 캐스트를 추적하고 필요한 경우 자동으로 (안전한) 캐스트를 삽입한다. class Ma { fun test(x: Any){ //1번 println(x.length) //Unresolved refer..

    기본타입

    기본타입

    정수(Integer) 타입 코틀린에서 모든 것은 객체로서 변수에 대한 멤버 함수나 프로퍼티를 호출할 수 있다. 어떤 타입은 특별한 내부 표현을 갖지만 사용자에게는 일반 클래스처럼 보인다. 숫자(Number) 코틀린은 자바와 유사한 방법으로 숫자를 다루는데 완전히 같지는 않다. 숫자에 대해 넓은 타입으로의 자동 변환이 없고, 어떤 경우에 리터럴도 약간 다르다. 코틀린이 제공하는 숫자 내장 타입은 다음과 같다. 타입 비트 크기 바이트 크기 Long 64 8 Int 32 4 Short 16 2 Byte 8 1 자바와 달리 코틀린에서 문자는 숫자가 아니다. 자바에선 다음과 같이 사용 가능하다. ex) char a = 'a'; System.out.printf("% d", a); -> 97이 출력된다. 명시적인 타..

    기초구문, 이디엄(관용어)

    기초구문, 이디엄(관용어)

    기초 구문 간단히 훑어보는 정도로 생각하면 편하다. 패키지 정의 패키지는 소스파일의 처음에 위치해야 한다. package my.demo import java.util.* 함수 정의 가장 기본적인 형태 fun sum(i: Int, j: Int): Int{ return i+j } expression body를 사용하고 리턴 타입을 추론 fun sum(i: Int, j: Int) = i + j 의미 없는 값을 리턴하는 함수 fun sum(a: Int, b: Int)/*: Unit*/{ println("---") } Unit리턴 타입은 생략 가능하다 로컬 변수 정의 val a: Int = 1 // 특시 할당 (Immutable) val a = 1 // 타입추론 val a: Int //초기화를 하지 않으면 타입 ..

    인터넷 연결 여부 판별하기

    인터넷 연결 여부 판별하기

    private fun checkInternet(): Boolean{ val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val isConnected: Boolean = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val net = cm.getNetworkCapabilities(cm.activeNetwork) if(net != null) { net.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || net.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) } else false } e..

    [FCM] Retrofit2로 API통신하기

    [FCM] Retrofit2로 API통신하기

    [FCM] FirebaseCloudMessaging API 만들기 이번엔 메시지 API를 만들어서 Postman을 통해 토큰과 타이틀, 바디를 보내 폰으로 알림을 받는 과정을 정리해보려 합니다. Firebase프로젝트를 생성하는 과정은 이전 게시글을 참고하시면 됩니다. [F huzit.tistory.com [FCM]Firebase Cloud Messaging 수신하기 Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정 Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보 huzit.tistory.com 메시지 수신과 RestAPI는 이전 게시글에서 볼 수 있습니다. 만들어야 할 것은 ..