반응형

코틀린 33

Annotation(어노테이션)?

Annotation은 사전적으로 주석이라는 의미를 가지고 있다. 안드로이드 개발 중 @Deprected, @Override @Throws 등을 볼 수 있는데, 컴파일러에게 정보를 제공하거나, 실행 시 특정 코드를 자동적으로 생성해주도록 하는 역할을 하고 있다. Annotation은 기본적으로 Kotlin/Android에 내장되어있는 built in annotation, Annotation에 대한 정보를 나타내는 meta annotation, 개발자가 직접 만드는 cumstom annotation이 있다. 이번 글에선 Kotlin에서 사용하는 annotation을 몇 가지 알아보자. 1. @JvmName 2. @JvmStatic 3. @JvmField 4. @Throws 5. @JvmOverloads @J..

코틀린 25. 오브젝트

이번 글에서는 오브젝트에 대해서 알아보도록 하겠습니다. 오브젝트 우리가 배웠던 '클래스'는 실체가 아닌 실체를 만들기 위한 '틀'이기 때문에 이를 사용하기 위해서는 실체인 '객체'를 만들어서 사용해야 했습니다. 때문에 하나의 클래스에 여러 개의 객체가 존재할 수 있고, 객체들은 서로 독립적이라고 알아봤었습니다. 그런데, 이렇게 여러 개의 객체가 아닌 하나의 객체만 사용할 때는 오브젝트를 선언하여 사용하는 방법을 쓸 수 있습니다. fun main() { println(A.num) A.exF() } object A{ var num = 10 fun exF(){ println("오브젝트의 함수") } } 오브젝트는 객체를 생성하지 않기 때문에 오브젝트명을 참조하여 멤버에 접근합니다. 위의 코드에선 A라는 오브젝..

코틀린 24. 스코프함수

이번 글에서는 스코프함수에 대해서 알아보도록 하겠습니다. 스코프(Scope) 스코프함수에 대해 알아보기 전에 앞서 스코프가 뭔지 먼저 알아야겠죠? 스코프는 사전 뜻 그대로 범위를 말하는데, 패키지나 클래스, 함수 등의 내부에서 형성되는 범위를 말합니다. 예를 들어 패키지 A가 있다고 생각해보도록 합시다. 이 패키지 안에는 클래스 B와 함수 C가 있는데, 이 둘은 모두 패키지 내부의 하나의 큰 스코프 안에 속합니다. 그리고 클래스 B안에 있는 함수나 변수 등은 또 다른 스코프를 이루고, 함수 C에 있는 멤버들 또한 또 다른 스코프를 이룹니다. 이런 스코프의 특징은 같은 스코프 내의 다른 멤버들에게 자유롭게 접근 가능하다는 점과 상위 스코프의 멤버를 하위 스코프 내에서 재정의하여 사용할 수 있다는 점입니다...

코틀린 23. 고차함수, 람다함수

이번 글에서는 고차함수와 람다함수에 대해서 알아보도록 하겠습니다. 고차함수 고차함수는 어떠한 함수를 다른 함수의 parameter, 즉 argument로 전달하거나 함수를 리턴 시키는 것을 말합니다. 먼저, 함수를 parameter로 받는 법부터 코드로 확인해보도록 합시다. parameter를 선언할 때는 보통 "변수명: 자료형"의 형태로 선언했었는데, 함수의 경우 함수명: (parameter자료형)의 형식으로 받아오려는 함수의 parameter의 자료형들을 적어주고, 끝에 반환형을 적어주시면 됩니다. fun main() { exB(::exA) } fun exA(a: Int, b: Int){ println(a+b) } fun exB(fun1: (Int, Int)-> Unit){ fun1(10, 20) }..

코틀린 22. 맵(Map)

이번 글에서는 map에 대해서 알아보도록 하겠습니다. 맵(Map) map은 list, set과 함께 컬렉션 클래스를 상속받는 클래스입니다. map은 list나 set과는 달리 조금 특이한 녀석인데, 내부에 값만을 넣는 것이 아니고 이 값과 짝을 짓는 Key와 함께 구성되는 클래스입니다. 파이썬을 배우신 분들이라면 dictionary와 같은 개념이라고 생각하시면 됩니다. 예를 들어 "홍길동"이라는 문자열을 map에 저장할 때, name이라는 key와 함께 저장하면 이 key를 사용해 "홍길동"이라는 value를 얻어올 수 있습니다. 이러한 key와 value를 합쳐서 하나의 '쌍'이라고 부릅니다. 또한 하나의 map에서 key는 고유한 값이어야 하며, 중복될 수 없습니다. 따라서 name이라는 key에 다..

코틀린 21. 셋(Set)

이번 글에서는 셋에 대해서 알아보도록 하겠습니다. 셋(Set) Set은 List와 마찬가지로 코틀린의 collection 클래스를 상속받는 세 클래스중 하나입니다. Set은 수학에서의 집합이라고 생각하시면 되는데요. List와는 달리 안에 있는 데이터들 간에 순서가 존재하지 않으며, 중복을 허용하지 않는다는게 특징입니다. 때문에 이전에 Array와 List처럼 인덱스를 사용해 내부의 데이터를 참조할 수는 없으며, 내부에 데이터가 존재하는지 확인하는 용도로 사용됩니다. 그리고 Set은 List처럼 변경 불가능한 그냥 Set과 변경 가능한 MutableSet으로 나뉩니다. 선언 방법은 setOf와 mutableSetOf키워드를 사용하시면 됩니다. fun main() { var se1 = setOf(1, 5,..

코틀린 20. 리스트(List)

이번 글에서는 리스트에 대해서 알아보도록 하겠습니다. 리스트(List) 리스트는 코틀린에서 컬렉션 클래스를 상속받는 세 클래스(List, Set, Map)중 하나입니다. 이전에 배웠던 배열(Array)와 비슷한 개념을 가지고 있는데, 어떤 것인지 자세히 알아봅시다. 리스트는 여러 개의 데이터들을 한 곳에 모아서 관리할 수 있습니다. 리스트를 만들 때에는 그냥 list와 mutableList로 나뉘게 되는데요. list의 경우 최초 생성 시에만 값을 넣을 수 있으며, 이후에 해당 리스트의 값을 변경하거나 추가, 삭제할 수 없습니다. 반면 mutableList는 이러한 값의 변경이 가능한 리스트입니다. 그렇다면 배열과 리스트의 차이는 무엇일까요? 이 주제에 맞는 배열의 가장 큰 특징은 '크기가 정해져 있다'..

코틀린 19. 접근제한자

이번 글에서는 접근제한자에 대해서 알아보도록 하겠습니다. 접근제한자 접근제한자는 해당 패키지나 클래스에 외부에서 접근하려 할 때, 접근을 제어할 수 있는 개념입니다. 접근제한자는 패키지와 클래스에 접근할 때의 두 경우로 나뉘게 됩니다. 패키지의 경우 1. public (생략 시 기본) : 어떤 패키지에서나 접근할 수 있습니다. 2. internal : 같은 모듈 내에서만 접근할 수 있습니다. 3. private : 같은 파일 내에서만 접근할 수 있습니다. 클래스의 경우 1. public (생략 시 기본) : 클래스 외부에서 언제나 접근이 가능합니다. 2. private : 클래스 내부에서만 접근이 가능합니다. 3. protected : 슈퍼클래스와 이를 상속받은 서브클래스에서만 접근이 가능합니다. fun..

코틀린 18. 프로젝트 구조

이번 글에서는 코틀린 프로젝트의 구조에 대해서 알아보도록 하겠습니다. 프로젝트 먼저, 우리가 만드는 코틀린 프로그램은 모두 하나의 프로젝트 안에서 만들어집니다. 프로젝트는 이 구조의 최상위에 위치하고 있으며, 모듈, 패키지, 클래스 등을 포함하고 있습니다. 예를 들어 프로그램 A, B를 만든다고 하면, 총 두 개의 프로젝트를 만들게 되는 겁니다. 우리가 IDE를 사용해서 프로그래밍을 할 때에도, 최상위에 위치한 프로젝트를 가장 먼저 만들게 됩니다. 모듈 모듈은 프로젝트의 바로 하위에 위치한 개념으로, 패키지와 클래스를 포함하고 있습니다. 이 모듈은 우리가 직접 만들어서 사용할 수도 있고, 이미 만들어져 있는 '라이브러리 모듈'을 가져와 사용할 수도 있습니다. 패키지 프로젝트와 모듈이 물리적인 개념이라면,..

코틀린 17. const와 상수

이번 글에서는 const라는 것에 대해서 알아보도록 하겠습니다. 이 카테고리 초기에 변수에 대해서 알아봤을 때, 저희는 변수를 선언하는 방법을 두 가지 알아봤습니다. 언제든 값을 바꿀 수 있는 var과 초기화하면 값을 바꿀 수 없는 val인데요. 이에 이어서 '상수'를 선언하기 위한 const val이라는 키워드가 존재합니다. '상수'란 한 번 초기화하면 내부의 값을 사용할 수는 있지만, 바꿀 수는 없는 것을 말합니다. val이 이에 속한다고 할 수 있는데, 그렇다면 const val과는 뭐가 다른 걸까요? 그것은 '불변성'에 관련한 차이점에 있다고 할 수 있습니다. 먼저, val의 경우를 생각해보도록 합시다. val은 값이 '런타임'시에 결정되는 상수인데, 이는 독립적인 동일한 프로그램 수행 중에 프로..

반응형