CS

    6. 코틀린 타입 시스템

    제일 큰 차이는 null를 다루는지 여부. 이것만 알아도 90%는 먹고 들어감 6.1. 널 가능성 어느 타입이 null이 될 수 있으면 ?가 붙고, 명확하게 null이 될 수 없다면 붙지 않는다. 즉, Type? = Type + null 이 되는거 그래서 만약 내가 다루고자 하는 타입이 널이 될 수 있다면 널인지 아닌지 체크해줘야 한다. fun strLenSafe(s: String?): Int = if (s != null) s.length else 0 val x: String? = null println(strLenSafe(x)) // 0 println(strLenSafe("abc")) // 3 그럼 ?가 있을 때마다 이렇게 해야되냐? 그래서 타입 ? 을 만들면서 널을 다루는 전용 연산자들을 만들었다(마..

    5. 람다로 프로그래밍

    가독성을 늘리기 위해 줄임말 문법을 계속 만들다보니 오히려 더 복잡해지는 감이 조금 있는 것 같다. 5.1 람다 식과 멤버 참조 val sum = { x: Int, y: Int -> x + y } println(sum(1, 2)) // 3 그냥 만들어서 바로 실행할거면 인자로 받은 람다를 바로 실행해주는 run 라이브러리 함수를 실행하자. { println(42) }() run { println(42) } val people = listOf(Person("Alice", 29), Person("Bob", 31)) println(people.maxBy(Person::age)) println(people.maxBy({ p: Person -> p.age })) println(people.maxBy() { p: ..

    4. 클래스, 객체, 인터페이스

    다른 언어 쓰느라고 클래스를 거의 쓴 적이 없다. 그래서 이해가 잘 안되서 요약을 잘 못하겠음.. 4.1 클래스 계층 정의 interface Clickable { fun click() fun showOff() = println("I'm clickable!") } interface Focusable { fun setFocus(b: Boolean) = println("I ${if (b) "got" else "lost"} focus.") fun showOff() = println("I'm focusable!") } class Button : Clickable, Focusable { override fun click() = println("I was clicked") override fun showOff() {..

    3. 함수 정의와 호출

    1. 코틀린에서 컬렉션 만들기 코틀린에서 List, Array 같은거 쓰면 자바의 것을 쓴다. 이는 자바로 정의하는게 호환성에 더 유리해서. val set = hashSetOf(1, 7, 53) println(set.javaClass) >>> class java.util.HashSet 거기다 코틀린 자체적으로 확장 함수를 제공. 이건 좀 이따 자세한 설명 해줌 val numbers = listOf(1, 7, 53) println(set.first()) println(set.max()) println(set.last()) 2. 함수를 호출하기 쉽게 만들기 함수에 default 인자 설정 가능(놀랍게도 자바에는 없다). fun joinToString( collection: Collection, separat..

    2. 코틀린 기초

    1. 함수와 변수 코틀린 함수 정의는 다음과 같이 한다 fun max(a: Int, b: Int): Int { return if (a > b) a else b } 주목할 건 코트린에서 if는 문(statement)이 아닌 식(expression)이다. 즉, 값을 내놓는 것. 중괄호가 없다면 중괄호의 마지막 줄을 return한다. val(value)는 한번 초기화하면 끝나고(immutable)(자바의 final), var(variable)은 변경 가능(mutable)한 참조다. 2. 클래스와 프로퍼티 다음 자바의 코드와 코틀린의 코드는 같다. // 자바 public class Person { private final String name; public Person(String name) { this.nam..

    1. 코틀린은 무엇이며, 왜 필요한가

    1. 특징 코틀린은 자바 플랫폼에서도 돌아가는 새로운 프로그래밍 언어다. 그래서 코틀린의 대 전재는 자바와 코틀린을 섞어가면서 써도 전혀 문제 없이 돌아가게 만들었다. 주요 특성은 자바가 실행되는 곳에선 모두 돌아가고 정적 타입 지정 언어(statically typed)라는 것이다. 동적 타입(dynamically typed) 지정 언어는 greet_hi = "hello" one = 1 const greetHi = "hello" const one = 1 와 같이 코드 작성자가 타입에 대해 알 필요 없이 그저 적고, 무슨 타입인지는 실행하면서 알아낸다. JVM에서는 그루비나 JRuby가 대표적인 동적 타입 지정 언어다. 단점은 잘못 입력 시 컴파일 단계에서도 감지하지 못하고 에러를 발생시킨다. 자바는 정적..

    코틀린 인 액션 책 정리 할려고 함

    http://www.yes24.com/Product/Goods/55148593 Kotlin in Action - YES24 코틀린이 안드로이드 공식 언어가 되면서 관심이 커졌다. 이 책은 코틀린 언어를 개발한 젯브레인의 코틀린 컴파일러 개발자들이 직접 쓴 일종의 공식 서적이라 할 수 있다. 코틀린 언어의 가장 www.yes24.com 이 책을 고른 이유는 커뮤니티에 추천 검색했더니 보이고, 코틀린 제작자가 직접 작성한거라 정말 자세히 알고 있으면서 왜 만들었는지와, 개발 철학(소울)을 알 수 있다고 해서 보고 있다(챕터 1만 읽었는데도 좀 알 것 같음). 뭐라도 적지 않으면 정말 머리에서 다 날라갈 것 같다. 요새 너무 찔끔찔금 하다마는게 많은 것 같은데 먹고 살려니 이것저것 하게 된다.. 그래도 얘는 ..

    2. 정보의 표현과 정리

    숫자, 문자를 어떻게 표현하고 어떻게 정리하느냐 하는걸 다루는 챕터다. 앞에만 다루고 뒤에는 산수 계산방법이랑 범위같은걸 수학적으로 증명하고 IEEE 부동소주점 기준.. 다 학사시절에 지겹게 듣던 것들이라 대부분 생략했다. 데이터 타입에 따른 저장 크기. 메모리같은 저장장치에 한 공간 당 1byte크기만큼 저장할 수 있는데(물론 어디에 저장할지 같은 자세한 저장 방식은 나중에 나올듯), 위 예시에서 int는 4byte가 필요해서 연속으로 저장할건데 1byte를 4개로 나눠서 저장해야하니까 순서를 어떻게 할거냐가 문제다. 그래서 빅엔디안, 리틀엔디안 방법이 나온거고. 어떤걸 쓰는지는 CPU마다 다름(대채로 리틀엔디안 쓰는듯). 헷갈린건 주소 크기가 1word인거고, 저장 크기가 1bytge인거다. 1wor..

    1. 컴퓨터 시스템으로의 여행

    #include int main() { printf("hello, world\n"); return 0; } 위와 같은 hello.c 파일이 있다고 하자. 우리한텐 글자로 보이지만 컴퓨터에겐 아스키코드(ASCII) 표준으로 정해진 숫자로 저장되어 있고, 우리에게 보여줄 땐 치환해서 보여주는것 뿐이다. 이 각 C로 이루어진 문장들은 실제 실행이 가능한 저급 인스트럭션으로 번역되어야 그제서야 실행이 된다. gcc 컴파일러가 위 코드를 실행 가능한 바이너리 코드로 변경한다. 물론 그 과정엔 어셈블리로 변경, 기본 라이브러리랑 링크 연결 하는 등의 과정을 거쳐 만들어진다. gcc -o hello hello.c linux> ./hello hello, world linux> 어떻게 작동하는지도 모르는 기본 라이브러리..

    0. 무슨 게시판?

    나에겐 깊이가 있을까? 오랜만에 보는 전공서적 보며 정리할려고 만듬