Cute Apple
본문 바로가기
개발/Kotlin

[Kotlin] 코틀린이란?

by 미댕댕 2022. 7. 25.

Kotlin 으로 Android 공부를 하면서 실질적으로 Kotoin 언어에 대한 공부가 부족하다는 생각이 들어서 코틀린 카테고리를 만들게 되었다. 앞으로 꾸준히 업로드할 예정!!

 

이 글은 FastCampus 의 30개 프로젝트로 배우는 Android 앱 개발 with Kotlin 초격차 패키지 Online.   를 참고함

 

 

코틀린이란?
코틀린( Kotlin )은 2011년 7월 JetBrains사가 공개한 JVM에서 동작하는 프로그래밍 언어

 

요약

  • JetBrains 사에서 만든 언어
  • Java 를 보안하기 위해서 만든 언어
  • 2017 Google IO 에서 공식언어로 채택
  • 2019 Android First 언어로 채택

 

문법

1
2
3
4
5
6
7
8
9
10
11
12
13
// Java
int sum(int a , int b){
    return a+b;
}
 
//객체
public final class MainClass {
    public static void main(String[] args) {
        Person person = new Person("name"20);
        System.out.println(person);
    }
}
 
cs
1
2
3
4
5
6
7
8
// Kotlin
fun sum(a : Int, b : Int) : a + b
 
//객체
fun main(args: Array<String>) {
    val person = Person("name"20)
    println(person)
}
cs

 

특징

1. statically typed(정저적 타입) 지정 언어

  • 모든 프로그램 구성요소의 타입을 컴파일 시점에 알수 있음
  • 실행 시점에 어떤 메소드를 호출할 지 알아내는 과정이 없어 메소드 호출이 빠름

 

2. type inference

  • 변수 타입을 프로그래머가 직접 명시할 필요 없음
  • 코틀린 컴파일러가 문맥으로부터 변수타입 자동유추
1
2
var a =1 //Int => 가변
val b = 1.3 //Double​=> 불변
cs

 

3. nullable type

  • null 여부를 지정함에따라 NPE 발생을 줄일 수 있음 (신뢰성)
1
2
3
4
5
6
//null 가능
var a: String= null
 
// null 불가능
var b: String = "abc"
= null  // compile error ( Null can not be a value of a non-null type String )
cs

 

4. 함수형 프로그래밍

객체지향은 동작하는 부분을 캡슐화하여 이해할 수 있게 하고, 함수형 프로그래밍은 동작하는 부분을 최소화해서 코드 이해를 돕는다.
- 마이클 페더스. 레거시 코드 활용 전략中

 

함수형 프로그래밍 특징

  • 순수함수(Pure function)
    • 동일한 입력에 항상 같은 값 반환
    • 함수 실행이 프로그램 실행에 영향을 미치지 않아야 함
    • 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없는 것
1
2
3
4
5
6
7
//비순수 함수
var num = 1;
fun add(a : Int) = a+num
 
 
//순수함수
fun add(a : Int, b : Int) = a+b
cs

 

  • 참조 투명성(Referential transparency)
    • 프로그램의 변경 없이 어떤 표현식을 값으로 대체할 수 있다는 의미

 

  • 불변성(Immutable)
    • 함수 외부에서 데이터를 수정하지 않음
    • 함수의 계산을 수행하는 동안 변수에 할당된 값들이 절대로 변하지 않음
    • 데이터의 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어서 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행
  • 일급 객체(First object, First class citizen)
    • 1급 함수라고도 함
    • 변수나 자료 구조안에 삽입 가능
    • 파라미터로 전달 가능
    • 동적으로 property 할당 가능
    • 리턴 값으로 사용 가능
1
2
3
4
5
6
//람다식
val multi: (Int, Int) -> Int = {x: Int, y: Int -> x * y }
val multi = {x: Int, y: Int -> x * y }
val multi: (Int, Int) -> Int = {x, y -> x * y }
 
val sample: () -> Unit = { println("sample") }
cs

 

  • 고차함수(High-order Function)
    • 함수를 인자로 사용하거나 함수를 결과값으로 반환하는 함수
1
2
3
4
5
6
fun main(){
    //람다식 함수를 인자로 넘김
    println(highFunc({x, y -> x + y}, 1020)
}
//sum 매개변수는 함수
fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a,b)


cs

 

 

✔ 함수형 프로그래밍 vs 객체지향 프로그래밍 ❓❗

함수형 

"순수 함수"를 사용해, 상태를 제어하기보단, 빨리 처리하는데 초점을 둔 방법
실행 순서를 지정할 필요가 없기 때문에 비절차형 언어

 

객체지향

모든 데이터를 "객체(Object)" 취급하고,
객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 사용해 처리하는 방법

 

 

 

 

👇 마지막으로

kotlin 문법및 코틀린스러운 코딩은 프로젝트를 하면서 좀더 공부할 예정!

반응형

'개발 > Kotlin' 카테고리의 다른 글

[Kotlin] Serializable vs Parcelable  (0) 2022.09.07
[Kotlin] Data class 와 copy()  (0) 2022.08.03
[Kotlin] lateinit vs by lazy  (0) 2022.07.30
[Kotlin] Scope Function  (0) 2022.07.27

댓글