2022/01/07 코틀린정리

6306 단어 코틀린코틀린

4학년 현장실습을 하면서 안드로이드 스튜디오를 이용하고 Java를 이용한 앱개발을 하게 되었다. 하지만 많은 소스코드들을 찾아보면서 요즘 앱개발 대세는 Kotlin을 사용한 앱개발로 변경되고 있고 구글에서도 Koltilin을 밀어주기? 때문에 Kotlin에 대해서 공부를 해야겠다라고 생각했다. 그래서 다양한 블로그나 자료들을 찾아보니까 Koltin이라는 언어가 누구나 쉽게 접근하게 쉽게 만들어 졌다 라고 생각했다. 그래서 코틀린에 대해서 공부를 해볼려고 한다! 내가 좀더 성장하고 전문적이지 않지만 내가 공부한것들을 적어 둘려고한다.

변수와 자료형 연산자

코틀린 프로젝트는 모듈(Module), 패키지(Package),파일로 구성되어 있다. 코틀린 프로젝트는 모듈이 있고 모듈은 다시 패키지로 구성되어 있다.

변수와 자료형

변수란 값을 넣을 수 있는 상자 정도로 생각하면 된다.
자료형 : 값의 성질

변수를 선언하고 자료형 추출

변수는 val, var이라는 키워드를 이용하여 선언할 수 있다. 이것이 Java와 Kotlin의 차이점중 하나라고 느꼈다.

  • val: 최초로 지정한 변수의 값으로 초기화하고 더이상 바꿀수 없는 읽기 전용 변수가 됨
  • var: 최초로 지정한 변수의 초깃값이 있더라도 값을 바꿀 수 있다.

즉 변수값을 변경되지 않게 하려면 val, 변수값이 변경되어야 한다면 var이다.

코틀린은 변수에 할당된 값을 보고 자료형을 추출할 수 있는 가장 큰 특징이있다.

ex) val userName="Kildong" // 코틀린이 "Kildong"자료형을 추론하여 자료형을 String으로 지정한다.

  • 단, 자료형을 지정하지 않은 변수는 반드시 자료형을 추론할 값을 지정해야한다.
  • 값을 할당하지 않고 변수 선언 시 자료형은 반드시 필요하다.

코틀린의 자료형은 참조형 자료형을 사용

코틀린은 참조형 자료형을 사용한다.
기본형(Primitive Data Type)은 가공되지않은 순수한 자료형
참조형(Reference Type)은 객체를 생성하고 동적 메모리 영역에 데이터를 둔 다음 이것을 참조하는 자료형이다.
참조형으로 선언한 변수는 성능최적화를 위해 코틀린 컴파일러에서 다시 기본형으로 대체된다.

기본형과 참조형 동작 원리

기본형으로 선언한 변수는 스택(임시메모리)에 저장되며 값이 저장된 메모리의 크기도 고정되어 있다. 참조형은 스택에 값이 아닌 참조 주소가 있다. 참조형의 실제 객체는 동적 메모리인 힙에 저장된다.

정수자료형

  • Long 8바이트(64비트) -2^63 ~ 2^63-1
  • Int 4바이트(32비트) -2^31 ~ 2^31-1
  • Short 2바이트 (16비트) -2^15 ~ 2^15-1
  • Byte 1바이트( 8비트) -2^7 ~ 2^7

부호가 없는 자료형

정수자료형: 양수만 표현할 수 있는, 즉 부호가 없는(unsigned)정수 자료형은 부호가 있는 자료형과 2배 많은 양수를 표현할 수있는 장점이 있다.
-> 코틀린에서 사용할 수 있는 부호가 없는 정수자료형

  • ULong 8바이트(64비트) 0~2^64-1
  • UInt 4바이트(32비트) 0~2^32-1
  • UShort 2바이트(16비트) 0~2^16-1
  • UByte 1바이트(8비트) 0~2^8-1

실수 자료형

  • Double 8바이트(64비트) 약 4.9E-324~1.7E+308
  • Float 4바이트(32비트) 약 1.4E-215~3.4E+38

논리 자료형

  • boolean 1비트 true, false

문자 자료형

문자 자료형의 값은 작은 따옴표(')로 감싸서 표현

  • Char 2바이트(16비트) 0~ 2^14-1

만약 정수 자료형을 이용하여 문자자료형을 선언한다면 toChar()을 이용해 문자 자료형을 선언할 수 있다.

문자열 자료형

문자열 자료형은 기본형에 속하지 않는 배열형태로 되어있는 특수한 자료형

표현식과 $기호를 사용하여 문자열출력하기

변수의 값이나 표현식을 문자열안에 넣어 출력하려면 달러($)기호와 함께 변수나 표현식을 사용한다.

var a = 1
var s1 ="a is $a" //String 자료형인 s1을 선언하고 초기화

변수가 아니라 표현식을 문자열에 포함시키려면 중괄호를 사용하면 된다.
중괄호를 사용해도 큰따옴표나 $로 표현할 수 있다.

  • 문자열안에 ${' '}를 이용해 큰 따옴표나 $기호를 이용할 수 있다 .

    형식화된 다중 문자열 사용

    문자열에 줄바꿈문자, 탭등 특수문자가 포함된 문자열을 포함해서 출력하려면 """" 기호를 사용하면된다.

    자료형에 별명 붙이기

    변수와 자료형이 복잡한 구조를 가지면 자료형에 별명을 붙일 수 있다.
    자료형에 별명을 붙이려면 typealias라는 키워드사용
    고차함수와 람다식으로 typealias를 많이 사용하므로 이 방법을 주의깊게 공부해야한다.

    typealias Username=String //String을 Username이라는 별명으로 대체
    val user : Username="Kildong"

-> 특정 자료형이나 클래스등의 별명을 붙이면 좀 더 명확하게 용도를 나타낼 수 있따.

자료형 검사하고 변환하기

코틀린은 위에서 적었듯이 변수 사용시 반드시 값이 할당되어 있어야하는 원칙이 있다.
만약 값이 할당되어 있지 않은 변수를 사용하면 오류가 발생한다.

코틀린에서 null 상태인 변수를 허용하려면 물음표(?) 기호를 사용해 선언해야함

물론 null을 허용하는 변수를 사용하려면 null검사하고 처리하는 방법까지 고려해야한다.
또한 필요하면 자료형을 변환할 수 있다

null을 허용한 변수 검사하기

프로그램이 실행되는 도중에 값이 null인 변수에 접근하려면 NullPointerException(NPE)예외 오류가 발생한다 하지만 코틀린은 변수에 아예 null을 허용하지 않아 이 문제를 미리 방지할 수 있다.

변수의 null 허용 여부에 따라 String과 String? 이 서로 다른 자료형이 임을 알 수 있다.

세이프콜과 non-null 단정기호를 활용하여 null을 허용한 변수 사용하기

String? 형에서는 세이프콜 (?.) 이나 non-null 단정기호(!!.)만 허용한다.

  • 세이프콜(?.): null 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법
  • non-null 단정기호(!!.): 변수에 할당된값이 null이 아님을 단정하므로 컴파일러가 null 검사없이 무시

세이프콜과 엘비스연산자를 활용해 null허용한 변수 더 안전하게 사용하기

  • 세이프콜:(?.)
  • 엘비스(Elvis)연산자:(?:):
    변수가 null인지 아닌지 검사하여 null이아니라면 왼쪽식 실행하고 null이라면 오른쪽 식을 실행

    str1?.length?:-1 == if(str1!=null)str1.length else -1
    즉 str1이 null이 아니면 str1.length를 반환 null이면 -1을 반환

세이프콜과 엘비스 연산자를 사용하면 null인 경우 반환값을 특정값으로 대체하므로 null발생을 대비할 수 있다. -> 코드를 한줄에 표현할 수있기때문에 가독성이 좋아짐.

자료형 변환

코틀린에서 자료형이 다른 변수에 재할당하면 자동 형변환이 되지않고 자료형 불일치 오류(Type Mismatch)가 발생!

  • 자료형 변환 메서드
  • toByte : Byte
  • toLong : Long
  • toShort : Short
  • toInt : Int
  • toFloat : Float
  • toDouble : Double
  • toChar : Char

기본형과 참조형 자료형의 비교원리

단순히 값만 비교 할 때는 이중 등호(==) 참조 주소를 비교하려면 삼중등호(===)를 사용

  • 이중 등호 -> 참조상관없이 값이 동일하면 true , 값이 다르면 false를 반환
  • 삼중 등호 -> 값과 상관없이 참조가 동일하면 true 반환 ,값이 동일하더라도 참조가 다르면 false 반환

스마트 캐스트

어떤값이 정수일수도 있고 실수일수도 있을때 컴파일러가 자동으로 형변환을 하는 스마트캐스트를 사용하는게 편하다.
스마트캐스트가 적용되는 자료형은 Number형이다.

자료형 검사하기

  • is 키워드
    : is는 왼쪽 항의 변수가 오른쪽 항의 자료형과 같으면 true, 다르면 false 반환
    Any형은 코틀린 최상위 기본 클래스로 어떤 자료형이라도 될수 있는 특수한 자료형

as에 의한 스마트 캐스트

as로 스마트 캐스트를 할수 있다.
as는 형변환이 가능하지 않으면 예외를 발생시킨다. ]

묵시적 변환

Any형은 자료형이 특별히 정해지지 않은 경우에 사용
Any형은 모든 클래스의 뿌리이다.
즉, 코틀린의 모든 클래스는 Any형이라는 슈퍼클래스를 가진다.

fun main() {
var a :Any=1 //Any형 a는 1로 초기화될때 Int형이됨
a=20L //Int형인 a가 20L에 의해 Long형이 된다.
println("a:atype:a type:{a.javaClass}")}
실행결과 a는 20 type은 Long이 된다.

  

좋은 웹페이지 즐겨찾기