Uknow's Lab.
article thumbnail
[코파기 3부] 8. 코틀린과 컬렉션 프레임워크 (2) : Map

Map 자료구조 Map은 Key, Value(키 - 값)를 정의할 때 쓰이는 자료구조입니다. 파이썬의 딕셔너리, JSON을 떠올리면 쉬울 텐데요. Key를 통해 Value에 접근하거나 검색, 수정, 삭제 등 접근을 할 수 있으며, Key를 통해 접근하므로, Key는 중복이 불가능하며, Value는 중복이 가능합니다. Map 사용법 fun main() { val map = mapOf("키1" to "값1", "키2" to "값2", "키3" to "값3") map["키1"] = "값2" // 에러 발생 val map2 = mutableMapOf("키1" to "값1", "키2" to "값2", "키3" to "값3") map2["키1"] = "값2" // 가능 // MapOf로 생성 시, 자료형 생략 가능..

article thumbnail
[코파기 3부] 7. 코틀린과 컬렉션 프레임워크 (1) : Set

코틀린에서는 자주 사용하는 자료구조들을 모아 정의해놓은 컬렉션 프레임워크(Collection Framework)를 지원합니다. 자바 프로그래머들에겐 굉장히 익숙한 녀석이죠? 처음 들어보시나요? 사실 이 시리즈를 따라오신 분들이라면 이미 사용해본 경험이 있으실 겁니다. List, ArrayList, LinkedList 등의 List도 컬렉션 프레임워크의 일종이거든요. List는 이미 한 번 다뤄봤으니, 컬렉션 삼형제의 다른 녀석들인 Set과 Map을 한 번 볼까요? 집합 (Set) Set은 집합입니다. 수학시간때 배운 기억을 더듬더듬 꺼내봅시다… 집합은 일반적으로 중복을 허용하지 않으며, 순서가 없습니다. List의 경우, 중복을 허용하며 순서 역시 유의미한데 비해, Set의 경우는 집합이며, 중복을 허용..

article thumbnail
[코파기 3부] 6. 코틀린과 함수형 프로그래밍 (2) : 람다식

익명 함수 (Anonymous Functions) 익명 함수란, 이름처럼 익명, 즉 이름을 가지지 않는 함수를 의미합니다. // 익명함수 val sum = fun(x: Int, y: Int): Int { return x + y } fun main() { println(sum(1, 2)) } // 출력 >>> 3 익명함수는 위와 같이 이름없이 정의되는 함수입니다. 앞서 (1)편에서 언급했듯이, 함수는 일급객체이기 때문에 변수에 할당이 가능합니다. 자바스크립트에서 많이 본 형태이죠? 저는 JS를 별로 안다뤄본 탓에 익숙해지는데 조금 걸렸습니다. fun main() { val testP2 = ::testPrintln testP2() } fun testPrintln() { println("Hello World!..

article thumbnail
[코파기 3부] 5. 코틀린과 함수형 프로그래밍 (1) : 함수형 프로그래밍이란?

함수형 프로그래밍 (Functional Programming) 함수형 프로그래밍이란? 데이터 처리를 위해 수학적 함수의 계산으로 취급하고, 가변 데이터를 멀리하며 부수효과를 줄인 일종의 프로그래밍 패러다임이다. 이러한 함수형 프로그래밍은 무엇을 하는지 선언하는 형식에 가깝다 하여 선언형 프로그래밍이라고도 합니다. 기존의 절차적/객체지향 프로그래밍은 무엇을 할 지 명령한다 하여 명령형 프로그래밍이라고 하죠. 함수형 프로그래밍은 과정보다는 결과를, 어떻게(How) 할 지 보다는, 무엇(What)을 할 지에 포커스를 둡니다. 최신의 언어들 (Scala, Swift, Python)은 함수형 프로그래밍을 지원하며, Kotlin 역시 함수형 프로그래밍을 지원합니다. 자바는 자바 8버전부터 함수형 프로그래밍을 지원하..

article thumbnail
[코파기 3부] 4. 코틀린과 스코프 함수 : apply, run, with, also, let

스코프 함수 (Scope Function) 스코프 함수(Scope Function)란, 객체의 컨텍스트 내에서 코드 블록을 실행하는 것이 유일한 목적인 여러 함수들 입니다. 개체에서 스코프 함수를 호출하면 람다식으로 임시 범위(스코프)가 형성되며, 이 범위에서는 개체 이름 없이 개체에 액세스할 수 있습니다. 스코프 함수의 종류에는 let, run, with, apply, also가 있습니다. 무슨 말인지 잘 모르겠죠? 사실 저도 첫 문단을 어떻게 작성해야 하나 고민하다가, The Kotlin standard library contains several functions whose sole purpose is to execute a block of code within the context of an ob..

article thumbnail
[코파기 3부] 3. 코틀린과 예외처리 : try - catch, finally

오류(Error) 오류는 프로그래밍을 하다 보면 정말 수도 없이 마주칩니다. 예기치 못한 동작을 하거나, 의도하지 않게 동작하거나, 심지어 프로그램이 아에 종료될 수도 있습니다. 대표적인 오류 상황이 뭐가 있을까요? 길이가 3인 배열의 10번째 원소를 접근한다면? fun main() { val arr = arrayOf(1, 2, 3) arr[10] = 12345 } // 에러 메시지 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3 at PracticeKt.main(Practice.kt:7) at PracticeKt.main(Practice.kt) 길이가 3인 배열이지..

article thumbnail
[코파기 3부] 2. 코틀린과 infix 함수

Infix? infix... 뭔가 많이 들어본 단어죠? prefix, infix, postfix... 전위 표기법, 중위 표기법, 후위 표기법을 떠올리셨나요? 아주 훌륭합니다! A + B라는 식을 표기할 때, prefix -> +AB infix -> A+B postifx -> AB+ 와 같이, 연산자와 피연산자의 위치에 따라 전위(prefix), 중위 (infix), 후위 (postfix)로 나눕니다. 우리가 일상생활에서 자주 쓰는 표기법은 중위(infix)죠? 연산자가 중간에 오는 infix와 같이, infix 함수는 두 피연산자 사이 함수가 들어가는 형태입니다. infix 함수 정의 infix fun Int.plus(n: Int): Int { return this + n } fun main() { p..

article thumbnail
[코파기 3부] 1. 코틀린과 확장함수 (Extension Functions)

코파기 3부는 기초편에서 다루지 않는 코틀린의 요소들을 다룰 생각입니다. 딱히 별 마무리 짓지 않고 생각나는 대로 계속 추가할 것 같네요. 코틀린과 확장함수 (Extension Functions) 확장함수(Extension Functions)이란, 클래스에 새 매소드를 추가하는 기능입니다. 엥? 그거 걍 클래스 안에 새 메소드 넣으면 되는거 아니에요? 맞습니다. 본인이 만든 클래스라면 굳이 확장함수를 쓸 이유 없이 클래스 내 메소드를 정의하면 됩니다. 하지만, 코틀린 표준 라이브러리라면? 서드 파티 라이브러리라면? 클래스 내 새 메소드를 추가하는 건 그닥 쉬운 일이 아닙니다. 코틀린의 표준 라이브러리중 하나인 String은 많은 메소드를 지원합니다. 그리고, 저는 여기에 String 내 대문자가 몇개인지..

article thumbnail
[코파기 2부] 9. 코틀린과 정적 (Object/Companion Object)

정적(static) ? 정적이란, 고정되어 있다는 의미입니다. 동적(Dynamic)과 상반된 의미를 갖고 있죠. 정적 변수란, 해당 클래스의 모든 객체가 하나의 데이터를 공유한다는 특성이 있습니다. 자바 코드를 예시로 들어보겠습니다. // 자바 코드 class Test { static int a = 0; // 정적(static)으로 생성 int b = 0; } public class Main { public static void main(String[] args) { Test test1 = new Test(); Test test2 = new Test(); test1.a = 1; test1.b = 1; test2.a = 2; test2.b = 2; System.out.println("test1 a : " ..

article thumbnail
[코틀린 2부] 8. 코틀린과 상수 Const

상수 (Constant) 상수(Constant)란 변하지 않는 수를 뜻합니다. 이는 변하눈 수인 변수(variable)과 반대되는 의미입니다. 사실 객체지향과는 큰 연관이 없어 1부에서 다루려고 했는데, 클래스, 객체, 커스텀 getter 등 1부에서 다루지 않은 내용이 많이 튀어나와 2부에서 다루기로 했습니다... 상수의 사용 const val MAX_VALUE = 1000000000 fun main() { MAX_VALUE = 45643453 // 변경 불가! } 상수는 constant의 줄임말인 const에 val을 붙여 사용할 수 있으며, 한 번 초기화하면 절대 값을 바꿀 수 없습니다. 앞의 내용을 잘 따라오신 분들이라면, 한 가지 의문이 드실 수 있습니다. 엥? 굳이 const 안써도 그냥 va..