코틀린

코틀린

    인터페이스

    인터페이스

    코틀린의 인터페이스는 자바 8 인터페이스와 매우 유사하다. 추상 메서드를 선언할 수 있고 또한 메서드 구현을 포함할 수 있다 추상 클래스와 비슷하다고 생각할 수 있지만 선언 시 사용되는 키워드부터 해서 몇 가지 다른 점이 있다. 인터페이스는 상태를 가질 수 없다. 다중 상속이 가능하다 open 키워드를 일일이 붙일 필요 없다. 인터페이스는 interface 키워드를 사용하여 정의할 수 있다. interface MyInterface{ fun bar() fun foo(){ //optional body } } 인터페이스 구현 클래스나 객체는 한 개 이상의 인터페이스를 구현할 수 있다. class Child : MyInterface{ override fun foo(){ // body } } 인터페이스의 속성(P..

    프로퍼티와 필드

    프로퍼티와 필드

    속성(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 //초기화를 하지 않으면 타입 ..

    스코프 함수

    스코프 함수

    스코프란? 번역하면 '범위'입니다. 프로그래밍에서 범위를 표시하고 있는 것의 대표적인 예가 중괄호입니다. 그렇다면 중괄호 안에서 범위에 제한되는 것은 어떤 게 있을까? 대표적으로 변수가 있습니다. 이를 종합해보면 컴퓨터 프로그래밍에선 스코프를 변수 영역이라고 부르는 것을 알 수 있습니다. 그런데 range나 extent, area 등과 같은 범위를 나타내는 영어는 많은데 왜 하필 scope일까? 스코프의 어원은 그리스 어로 '겨누는 곳' 따라서 변수를 겨누는 범위를 나타내야 하므로 scope를 사용했다고 볼 수 있습니다. 스코프(변수 영역)의 종류 전역 소스 코드 상의 모든 곳에서 사용할 수 있는 변수 영역입니다. 예시로 전역변수가 있습니다. 함수 영역 함수 내에서만 유효한 변수영역입니다. 대부분의 프로..