코틀린 기초

장똑대·2022년 3월 23일
0

Do it! 코틀린 프로그래밍 <첫째마당, 코틀린 기본 익히기> 학습

✏️1. 코틀린 시작하기✏️

1-1. 코틀린의 특징

  • 안드로이드 공식언어
  • JVM, JS, Native 기반의 프로그래밍이 가능한 멀티 플랫폼 언어
  • 컴파일될 때 자료형을 검사하여 확정하는 정적 언어
    -> 오류를 초기에 발견할 수 있어 프로그램의 안정성⬆️
  • 널 포인터 예외(NPE: NullPointerException) 예방 가능
  • 여러가지 생략된 표현이 가능하여 간결하며 효율적
  • 함수형 프로그래밍과 객체 지향 프로그래밍이 모두 가능
  • 세미콜론(;) 생략

1-2. 코틀린 시작하기

fun main() {
	println("Hello Kotlin!")
}
  • 코틀린 코드는 JVM에서 실행
  • main( ) 함수가 있는 파일 이름을 기준으로 자바 클래스가 자동 생성

1-3. 프로그램의 메모리 영역



✏️2. 변수와 자료형, 연산자✏️

2-1. 코틀린 패키지

  • 프로젝트(Project) = 모듈(Module) + 패키지(Package) + 파일(File)
  • 대규모 프로젝트 진행시 기능을 모듈로 분리하여 관리
  • 패키지를 만들어야 하는 이유
    -> 다수의 프로그래머가 같은 프로젝트를 진행하다 우연히 같은 이름의 클래스가 만들어진 경우 서로 다른 패키지에 들어있다면 오류가 발생하지 않음
  • 패키지명은 웹사이트 도메인을 거꾸로 뒤집은 모양

2-2. 변수와 자료형

  • val (Value) : 최초로 지정한 값으로 초기화하면 더이상 변경할 수 없는 읽기전용(불변) 변수
  • var (Variable) : 최초로 지정한 변수의 초기값이 있더라도 값이 변경 가능한(가변) 변수
  • val로 변수를 선언해 놓고 변경해야 할 때 var로 바꾸는 방법 권장
  • 코틀린은 자료형을 지정하지 않아도 변수에 할당된 값을 보고 자료형을 추론하여 지정
  • 단, 초기값을 할당하지 않으면 자료형을 반드시 지정해 주어야함
  • 코틀린의 자료형은 참조형 자료형을 사용

📌 기본형과 참조형

  • 기본형(Primitive Data Type)
    • 프로그래밍 언어 내에 내장되어있는 가공되지 않은 순수한 자료형
    • java ➡️ int, long, float, double 등..
    • 참조형보다 코드 수행시간이 더 빠름
  • 참조형(Reference Type)
    • 객체를 생성하고 동적 메모리 영역에 데이터를 둔 다음 이것을 참조하는 자료형
    • java ➡️ String, Data 등 ..
    • 참조형으로 선언한 변수는 성능 최적화를 위해 코틀린 컴파일러에서 다시 기본형으로 대체( 코틀린 컴파일러가 자동으로 최적화를 수행)

📌 기본형과 참조형의 동작 원리

int a = 77;
Person person = new Person();


2-3. 부동소수점

  • 무한한 실수의 개수에 비해 유한한 메모리공간의 단점을 극복하기 위하여 실수를 표현할때 사용하는 방식
  • 실수를 가수와 지수로 나누어 표현

2-4. 문자열 자료형(String)

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

📌 문자열 자료형 선언과 저장 방식 이해하기

fun main(){
	var str1: String = "Hello"
    var str2 = "World"
    var str3 = "Hello"
}


2-5. 자료형 검사하고 변환하기

  • 코틀린은 변수를 사용할 때 반드시 값이 할당되어 있어야한다는 원칙이 있음
  • null 상태인 변수를 허용하려면 물음표(?)기호를 사용해 선언해야함
  • 변수에 아예 null을 허용하지 않아 더 안전한 프로그래밍을 할 수 있음

📌 null을 허용한 변수 사용하기

  • 세이프콜(?.)
    • null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전히 호출
    • println("str:1 $str length: ${str?.length}")
      -> str1을 검사한 다음 null이 아니면 length에 접근
      -> 아무것도 들어있지 않다면 null을 출력

  • non-null 단정기호(!!)
    • 변수에 할당된 값이 null이 아님을 단정
    • 컴파일러가 null 검사 없이 무시
    • 따라서 변수에 null이 할당되어 있어도 컴파일은 진행됨. 하지만 실행중 NPE(NullPointerException)발생

📌 세이프콜(?.)과 엘비스 연산자(?:)를 활용해 null을 허용한 변수 더 안전하게 사용하기

  • 엘비스 연산자(?:)
    • 변수가 null인지 아닌지 검사하여 null이 아니라면 왼쪽 식을 그대로 실행하고 null 이라면 오른쪽 식을 실행
    • ${str1?.length ?: -1}
    • if (str != null) str1.length else -1
    • 위와 아래 코드는 동일

2-6. 스마트 캐스트

컴파일러가 자동으로 해주는 형변환

  • Number

    • 대표적으로 스마트 캐스트가 적용되는 자료형
    • var test: Number = 12.2 // test는 Float형으로 스마트 캐스트
  • Any

    • 최상위 기본 클래스
    • 어떤 자료형이라도 될 수 있는 특수한 자료형
    • 언제든 필요한 자료형으로 자동변환 하는것을 묵시적 변환이라고 함
  • is

    • if(num is Int) // num과 Int의 자료형이 같으면 true, 다르면 false를 반환
    • 변수의 자료형을 검사한 다음 그 변수를 해당 자료형으로 변환하는 기능이 있음
      val x: Any
      x = "Hello"
      if(x is String){    //Any형인 x가 String으로 스마트 캐스트
      	print(x.length)
      }
  • as 에 의한 스마트 캐스트

    • val x: String = y as String
    • 형변환이 가능하지 않으면 예외를 발생
profile
장똑대와 안드로이드

0개의 댓글