Kotlin

ttomy·2022년 8월 23일
0

1.코틀린의 특징

특징

  • 여러 플랫폼,자바 언어와의 호환성
    -> 자바 라이브러리를 그대로 이용가능.
  • 정적타입 언어
  • null타입 체크 지원
  • 함수형 프로그래밍 지원
  • 타입추론 지원
  • 언어 차원에서 getter.setter/toString 등의 구현을 지원함
    ->프로퍼티/data클래스

코틀린 응용

  • 서버 프로그래밍
  • dsl기능->영속성exposed
  • 안드로이드 api에 대한 어댑터 지원(안코)

간결성

  • 게터,세터,생성자 등의 준비코드 묵시적 지원
  • 람다 지원-> 코드 블록을 함수에 쉽게 전달

안정성

  • null타입에 대한 안정성
  • 타입 검사를 하면 별도의 캐스팅 없이 그 타입의 함수를 사용가능.
    -> 타입검사와 캐스팅이 한 연산자에 의 해 이뤄짐

2.코틀린 기초

hello world!

fun main(args:Array<String>){
	println("Hello world!")
}
  • func 키워드로 함수 생성
  • 파라미터 이름 뒤에 파라미터의 타입을 기입.
  • 함수를 클래스 안에 작성하지 않아도 됨-> 최상위 수준에서도 함수 정의 가능
  • 세미콜론이 구문마다 필수적이지는 않음.

식이 본문인 함수

fun max(a:Int,b:Int)=if(a>b) a else b

위와 같이 식이 본문인 경우 함수에서 반환타입을 지정하지 않아도 식을 분석해서 반환타입을 지정할 수 있다.

변수 선언- val/var

val name="ttomy"
//
val name:String
//
val name:String="ttomy"
  • 타입 선언이나 변수의 초기화 둘 중 하나는 반드시 해야 한다. 아니면 타입추론을 할 수가 없다.

  • val의 참조 그자체는 불변이지만 val이 참조하는 객체의 내부는 변경될 수 있다.

문자열 템플릿

  • 변수를 문자열 안에 사용가능하다. -> $
fun main(args:Array<String>){
	val name="ttomy"
    println("Hello, ${name} ")
}
  • {}중괄호가 없어도 되지만 한글과 영문을 혼합해서 사용하는 경우 구분이 필요하기에 변수명을 중괄호로 감싸는 습관은 좋다.

2.2 클래스와 프로퍼티

프로퍼티

프로퍼티란?
필드와 접근자를 한데 묶어 프로퍼티라 함

코틀린에서는 프로퍼티로써 선언이 되면 게터,세터가 없어도 필드명으로 접근이 가능하다.

  • 자바와의 비교
class person{

    private final String name;
    
    public void person(String name){
        this.name=name;
    }
    
    //getter
}
  • 코틀린
data class Person(val name:String)

-> 프로퍼티의 선언은 val or var을 사용.

클래스의 사용

class Person(
	val name:String,
    var isMarried: Boolean
)
val person=Person("hum",false)
println(person.name)

커스텀 접근자

프로퍼티의 접근자를 직접 작성할 수도 있다.

enum클래스

enum class Color(
	val r:Int,val g:Int,val b:Int
){
	RED(255,0,0), YELLOW(255,255,0),BLUE(0,0,255);
    //상수목록과 메소드 정의 사이에 세미콜론 사용 필수
    func rgb()=(r*256+g)*256+b
}

when

스마트 캐스트

  • is를 이용해 변수 타입 검사
  • 명시적 캐스팅: as

이터레이션

for


for(i in 1..100 ){
	println(i)
}

..는 범위의 끝 값을 포함함 ->위에서는 100도 프린트

  • 증가값
    step
for(i in 1..100 step 2 ){
	println(i)
}
//1 3 5 7 9...

함수 정의와 호출

컬렉션

함수호출

  • 인자명 명시 가능
  • 디폴트 파라미터값
  • 최상위 함수,프로퍼티

확장함수,확장 프로퍼티- 메소드를 추가

컬렉션 처리

문자열,정규식

로컬함수와 확장

4.클래스,객체,인터페이스

상속 변경자

  • interface
  • override //오버라이드할 경우 필수
  • class는 기본적으로 final 상속 허용하려면 open을 붙임
  • abstract class

가시성 변경자

  • 기본적으로 공개(public)
  • 패키지 내 가시성 허용(internal)

중첩 클래스

sealed

주생성자,부생성자,초기화 블록

data 클래스

object키워드

동반객체

6.타입 시스템

널이 될 수 있는 타입


안전한 호출 연산자 ?.

foo.?bar() 과 같이 호출하면 호출값이 null이면 호출이 무시되고 결과값이 null이 된다. null이 아니라면 일반 메소드 호출처럼 bar()이 리턴이 결과값이 된다.

나중에 초기화할 프로퍼티

  • lateinit

플랫폼 타입

플랫폼 타입은 코틀린이 널 관련 정보를 알 수 없는 타입을 말한다.

코틀린의 원시타입

컬렉션

배열

10.애노테이션, 리플렉션

11.dsl

0개의 댓글