본문 바로가기

Full Stack 교육 회고록

11/18 - Kotlin,

728x90
SMALL

[Kotlin이란?]

코틀린은(Kotlin)은 IntelliJIDEA라는 통합 개발 환경을 제작한 JetBrains에서 만든 프로그래밍 언어

넷플릭스,아마존,구글은 코틀린으로 개발이 되었습니다.

코틀린으로 개발된 어플들

코틀린 장점

1) 자료형 오류를 미리 잡을 수 있는 정적 언어 -> 자료형 추론해준다

2) NPE(Null Pointer Exception)으로 인한 프로그램의 중단 예방

3) 아주 간결하고 효율적 언어

4) 함수형 프로그래밍과 객체 지향 프로그래밍이 모두 가능(다중 패러다임 언어)

5) ; (세미콜론) 생략가능

 

ex 01 Variable

package ex20221118

fun main() {
    //IntelliJ에서 실행시킬 코드는 main 함수 안에 작성
    println("Hello~ Full Stack")
    //실행 단축키 : shift +F10

    // 변수 (Variable)
    // 사전적 의미: 변하는 수, 변할 수 있는 수
    // 프로그래밍 : 값(데이터)을 저장할 수 있는 공간

    // 1. 변수 선언하는 방법
    // 1) 상수인지, 변수인지 결정해주기
    // val(상수: value), var(변수: variable)
    // val/var 변수명 : 자료형 = 데이터 값
    var age: Int = 20
    var name : String = "유혜원"

    //- 코틀린이 자료형을 추론하여 변수의 자료형을 생략가능
    var num = 2022
    // 자료형 확인 단축키 :ctrl +shift+ p
    // * 자료형을 생략할 수 없는 경우 *
    // 값이 할당(초기화)되어 있지 않으면 자료형을 생략할 수 없다
    var str : String
    str = "문자열"

    // 2. 상수 선언하기
    val empno = "20221118"
    // empno = "123456"
}

ex 02 Variable

package ex20221118

fun main() {

    // Kotlin --> Java ---> 바이트코드
    // 변수명 작성 규칙
    // 1) 변수명은 첫번째 글자가 숫자이면 안 된다.
    // 2) 변수명은 코틀린에서 사용되는 키워드는 쓸 수 없다.
    // 3) 변수명은 의미있는 단어를 사용하여 만드는 것을 지향한다.
    // 4) 변수명은 카멜표기법, 클래스명 파스칼표기법
    // 카멜 표기법 : numOfApple
    // 파스칼 표기법 : NumOfApple

    // + 변수를 사용할 때 반드시 값이 할당되어 있어야 한다는게 원칙!
    // Null 값을 처리하는 3가지 방법

}

ex 03 Null

package ex20221118

fun main() {

    // null 값을 그냥 넣을 수는 없다!!
    val name:String? = null
    // Int? , Double? ... : 물음표가 붙은 자료형은 null 값을 넣을 수 있다.

    // String vs String?
    // String : 기본자료형
    // String? : 참조형데이터타입


}

ex 04 Null

package ex20221118

fun main() {

    // null 값을 허용하는 변수 name1을 선언(String?)
    var name1: String? = null
    // null 값을 허용하지 않은 변수 name2를 선언(String)
    var name2: String = "조자연"

    // name1, name2의 문자열 길이(.length)를 출력해보자
    println(name1?.length)
    // ?(null 값을 허용)가 붙은 변수들은 사용하려면
    // 뒤쪽에서 계속 관리를 해줘야한다. (? : 세이프 콜)
    println(name2.length)

    // name1에 오류 발생
    // 원인 : null은 길이가 null 이므로 NPE가 발생
    // 오류 해결 방법: String? 형에서는 세이프콜(?.)
    // 이나 non-null 단정기호(!!.)을 사용해서 출력할 수 있다

    // !!. 거의 사용하지 않는다.
    // 반드시 null 값이 아니라고 판단되는 변수에만 사용가능
    // !! 사용할 경우 주석으로 사용한 이유/ 경위를 기록해야함!

    // 조건문을 활용해서 null을 허용한 변수 검사
    // 엘비스 연순자 (Elvis)  ?:

}

ex 05 자료형

package ex20221118

fun main() {

    // Kotlin의 기본 자료형
    // 참조 자료형으로 선언할 수 있다. (기본 자료형은 눈에 안보임)
    // 저장할 때 (실행) 기본자료형인지 아닌지를 추론
    // : 참조 자료형만 사용가능하지만 컴파일 과정에서
    // 코틀린 컴파일러가 참조 자료형을 기본 자료형으로 대체하면서 최적화를 진행한다. (추론)

    // Java에서는 기본 자료형과 참조 자료형이 구별하여 사용된다.
    // int, double, char, float
    // Integar, Double, Char..

    // * 개념 ( 면접 기술 질문 )
    // 정적 메모리 (기본 자료형) : static
    // byte(2), short(4), int, double, char ...
    // 저장하기 전에 필요한 메모리 공간 크기를 지정해놓고 할당
    // 동적 메모리 ( 참조 자료형 ) : heap
    // 실행 중에 필요한 만큼 메모리를 할당하는 기법

    // 논리형, 정수형, 실수형, 문자형
    // 1. 논리 자료형 ( Boolean)
    // true/ false
    var b1: Boolean = true
    var b2: Boolean = false

    // 2. 정수 자료형 (Byte, Short, Int, Long)
    var num1: Int = 129
    var num4: Short = 128

    // 3. 실수 자료형 (Float, Double)
    var num2: Double = 3.14
    var num3: Float = 3.14f
    // 숫자에 빨간줄이 뜨는 이유!
    // : 손실 값이 발생할 수 있다 ( Double이 기본 자료형으로 사용 )

    // 4. 문자 자료형 (Char, String)
    var firstName: Char = '조' // ''
    var lastName: String = "자연" // ""


}

ex 06 형변환

package ex20221118

fun main() {

    // Kotlin에서는 자료형이 서로 다른 변수를 비교하거나 연산할 수 없다
    // Kotlin에서는 자료형이 서로 다른 변수를 같은 자료형으로 만들어줘야 한다.

    // 형변환 (Cast)
    // 1. 자료형을 확인하는 방법
    // 1-1) println(변수명 :: class.java.simpleName)
    // 1-2) is : 자료형 체크하는 연산자
    // instanceof랑 같은 역할: 객체타입을 확인하는 역할

    // 2. 자료형 변환하는 방법
    // 2-1) to자료형 : 기본타입 형변환

    val num = 256
    println(num::class.java.simpleName)

    val str = num.toString()
    println(str::class.java.simpleName)
}

ex 07 SmartCast

package ex20221118

fun main() {

    // 만약에 어떤 값이 정수일 수도 있고 실수일 수도 있다면 어떻게 해야할까?
    // 스마트 캐스트: 컴파일러가 자동으로 형변환

    // Number
    var test: Number = 12.34
    println("test의 값은 $test")
    println(test::class.java.simpleName)

    test = 12
    println(test::class.java.simpleName)// Int

    // Any : Object랑 비슷
}

ex 08

package ex20221118

fun main() {
    // 연산자, 제어문 (if, when)

    // 항, 연산자 -> 식

    // 1) 산술 연산자 : +, -, *, /, %
    // 2) 대입 연산자(복합대입연산자) : =, +=, -=, /=, *=, %=
    // 3) 증감 연산자: ++, -- (전치, 후치)
    // 4) 비교 연산자: <, >, >= ... ===, !==
    // 5) 논리 연산자: &&, ||, !

    // when ** (조건문)

}
728x90
LIST