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"
c = 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}, 10, 20)
}
//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 |
댓글