Closure란 무엇인가?
·
Kotlin
Closure?사실 Closure를 처음 들었을 때, 도대체 뭘 뜻하는 것인지 감이 잘 오지 않았다. 이러한 일을 겪을 땐 우선 사전적 의미를 먼저 찾아보곤 한다. 대강 동작이 중지된, 닫힌 상태를 나타내는 것으로 보인다. 그러고 보니, 수학 시간에 Closure라는 의미를 들어봤던 것 같았다. 이에 관련하여 찾아보니, 다행히도 내 기억이 맞았다. 수학시간에서의 Closure는 다른 집합에 속하지 않을 가능성이 닫혀있다? 라는 의미로 생각했던 것 같다. 프로그래밍에서는 뭔데?원래 이정도 찾아봤으면 대충 뭐하는 친구인지 예상이 가기 마련이었는데, 이번엔 감이 잘 안잡혔다.일단 정의를 찾아봤다Lexical?, Lexical scope? (나에게 매우)어려운 단어가 나왔지만, 일단 first-class fu..
[우테코 8기 모바일 안드로이드] 레벨 1 회고
·
우아한테크코스
저번 주에 레벨 1이 끝이 났다.. 이제 내일이면 레벨 2의 첫 날이다. 뭔가 굉장히 허겁지겁 지나간 느낌이 들어, 글쓰기 한번에 전부 내 생각을 정리할 수 있으리라는 생각은 들지 않는다. 생각나는 대로 돌아와서 글을 추가해야겠다. 우선은 레벨 1을 마무리하면서, 당장 생각나는 것들을 돌아보려고 한다. 인간은 적응의 동물이다처음에 6시 반에 기상해야 한다는 사실이 조금 부담이 되기도 했다. 실제로 레벨 1을 시작하고 며칠동안은 아침에 굉장히 피로했다, 하지만 레벨 1을 돌아보면서 아침 일찍 일어나는 것이 크게 부담이 되었다는 생각은 들지 않았다. 뿐만 아니라 차 멀미를 굉장히 많이하는 체질인데, 이 역시 버스를 매일 3시간 정도 타니까 거의 좋아졌다. 때문에 할일이 매우 많은 날에는 버스에서 노트북..
[우테코 8기 모바일 안드로이드] [잡소리] 회고 쉬었음 청년, 글쓰기는 코딩이다
·
우아한테크코스
회고 쉬었음 청년사실 나는 매 미션이 끝나고 회고를 쓸 수 있을 줄 알았다.. 실제로 제미나이 웹앱 미션은 회고를 작성했었다하지만 칸반보드 미션에 들어가면서, "아 이거 안되겠다." 라는 생각과 함께 회고를 멈춰버렸다 ㅎㅎ 역시 내게 병행은 꽤나 힘들다... 평소 가볍게 즐기던 게임들도 우테코 레벨 1 시작과 함께 올스톱 해버렸다. 그렇지만, 회고 작성 어려움에 대한 이유와, 나름대로의 해결방법을 찾을 수 있어, 오히려 좋았던 것 같다. 글쓰기, 회고에 대한 내 생각을 간단히 정리해보려고 한다. 지금 까지 내 생각: 이왕 하는 김에.. 우선 첫 번째 이유는, 지금까지의 내 마인드셋을 생각해보면, "이왕 한번 할 때, 잘 하는 것이 맞다." 라는 생각이 있었다. 때문에 글쓰기를 할 때도, 자연히 적용되었고..
[우테코 8기 모바일 안드로이드] 레벨 1 미션 🚀 사용자가 있는 Gemini 웹앱 출시하기 회고
·
우아한테크코스
좋은 문서란 무엇일까? 오티에서 "좋은 문서는 글이 적게 있다" 라는 이야기를 들었다.사실 세세하게 작성된 문서, 특히 공식적인 문서에서는 웬만큼 많은 것이 아니면 다다익선이지 않을까? 라는 생각이 있었다. 그러한 관점에서 이는 굉장히 새로운 시각이었다! 제미나이 캔버스의 공식 문서 읽어보기https://gemini.google/kr/overview/canvas/?hl=ko제미나이 캔버스의 공식 문서가 위에 언급한 "글이 적은 문서"의 예시라고 할 수 있을 것 같다. 추가적인 사용사례 설명 항목이 더 있지만, Canvas 자체에 대한 설명은 이게 다이다. 이러한 문서는 이와 관련된 전문가들이 어떻게 함축할지, 표현할지 고심하여 선정한 단어이기 때문에 자세히 뜯어보는 것이 참 좋다고 하였다. 빠르게 훑었..
[우테코 8기 모바일 안드로이드] 오리엔테이션 회고
·
우아한테크코스
첫 출근?길우선 첫날은 정말 설렘 반 걱정 반으로 갔던 것 같다. 사실 2시간 정도 걸리기 때문에 이동시간에 독서라도 꾸준히 할 생각으로 책을 준비해뒀었으나.. 역시 멀미 이슈로 못읽었다... 판교 첫 인상사실 이전에 서울에 갈 때 환승목적으로 잠시 들렸던 적은 있었으나 이렇게까지 본격적으로 온 적은 처음이었다. 버스에 내리고서, 육교를 건너 지나가니 건물들에 유명한 기업명들이 적혀있었다! 역시 대단한 동네구나 라는 생각이 들면서도 뭔가 친숙한 기분이 들었다. 셔틀버스계획은 8:50 셔틀을 타려고 했으나, 아슬아슬하게 못 탄다는 것을 깨달았다! 그래도 9:30 셔틀이 있어서 정말 다행이었다..탑승 장소 옆에있는 버스정류장에서 기다리고 있었는데 한분 두분씩 이쪽으로 오시는 것을 보고 다른 크루분들인가 싶..
[우테코 8기 모바일 안드로이드] 레벨 0 4주차 회고
·
Kotlin
서론어느덧 레벨 0의 마지막 회고를 작성하고 있다는 사실이 잘 실감나지 않는다. 목표를 달성했던 하지 못했건, 레벨 0은 코틀린이라는 언어에 대해 깊게 공부해볼 수 있는 좋은 기회였다고 생각한다. 이제 내일이면 드디어 직접 오프라인에서 우테코에 참여하게 된다는게 떨리기도 하지만 한편으로는 정말 기대되고 재밌겠다라는 생각이 든다. 오늘 회고록에는 What + KPT 회고에 더해 추가적으로 레벨 0에 대한 전체적인 회고, 그리고 우테코 오리엔테이션을 앞둔 내 생각을 정리해보려고 한다. What(무엇을 했는가?)이번 주는 Kotlin in action 2/e의 고차함수, 어노테이션과 리플렉션, DSL(일부), 코루틴(일부)에 대해 학습했다, Kotlin in action 2/e: 고차함수: 람다를 파라미터와..
Kotlin in action 2/e: 코루틴(1) 코루틴이란 무엇인가?
·
Kotlin
동시성 프로그래밍의 필요성책에서는 다음과 같이 설명하며 나 또한 그렇다고 생각한다.현대 프로그램들이 한 번에 한 가지 일만 하는 경우는 드물다... 이를 위해서는 특정 작업이 시작된 후 완료를 기다리지 않고 일단 다음 일을 하는 비동기(Asynchronous)가 필요하다고 할 수 있겠다. 모든 작업을 물리적으로 함께 실행하지 않아도 동시성을 실현할 수 있다. 운영체제와 관련하여 생각해본다면 위 문장에 대해 감이 올 것이라고 생각된다. 예를 들어 각 작업을 시분할 하고, 라운드로빈 방식으로 번갈아 실행한다면 싱글 코어 CPU 환경의 사용자 입장에서는 완전히 동시적으로 실행되는 것 처럼 보인다. 진짜 물리적으로 동시에 작업을 수행하는 병렬성현대에는 대부분의 CPU가 멀티코어이기 때문에 멀티코어 CPU를..
Kotlin in action 2/e: DSL 만들기(1) DSL이란 무엇인가?
·
Kotlin
DSL 이란 무엇인가?https://en.wikipedia.org/wiki/Domain-specific_languageDSL은 Domain Specific Language 즉 도메인 특화 언어의 약자이다. 사실 이 책을 보기 전에는 DSL에 대해 공부해본 적이 없었다. 일단 말 그대로의 뜻으로 생각해봤다. 특정 도메인에 특화된 언어. 간단하게 조사하고 생각해봤을때 객체와 DB를 자동으로 매핑해주는 ORM이 떠올랐다. 어쨌던 예시를 들어 이해해보면 프로그래밍 언어에서의 DB 조작을 쉽게 해주는 기능이 사실 원래는 프로그래밍 코드에서 DB등을 조작하려면 여러 API를 조합하거나, 쿼리문을 이용해야 하지만, DSL을 잘 설계하면 이러한 번거로움을 덜 수 있게 해준다. 정도로 이해해봤다. 훌륭한 API란 ..
Kotlin in action 2/e: 어노테이션과 리플렉션(1) 코틀린의 어노테이션
·
Kotlin
어노테이션을 적용하면 선언에 표지를 남길 수 있다. 코틀린에서는 @과 어노테이션 이름을 선언 앞에 넣어서 어노테이션을 적용할 수 있다. 책의 예제에서도 처음에 등장하지만, 나 또한 이를 보고, JUnit의 @Test가 생각이 났다. import kotlin.test.*class MyTest { @Test fun testTrue() { assertTrue(1 + 1 == 2) }} 다음과 같이 함수 선언 위에 @Test 어노테이션을 붙여주게 되면, JUnit 프레임워크에게 이 메서드를 테스트로 호출하라고 지시하게 된다. @Deprecated 어노테이션상당히 흥미로운 어노테이션이라고 할 수 있겠다. 해당 어노테이션은 선언이 더이상 쓰이지 않게 될 이유를 사용자에게 제공해줄 수..
Kotlin in action 2/e: 고차함수: 람다를 파라미터와 반환값으로 사용(2) 인라인 함수, 코틀린 표준 라이브러리의 인라이닝
·
Kotlin
코틀린에서 람다를 사용하는 구현은 똑같은 코드를 직접 실행하는 것보다 덜 효율적이다. 코틀린 컴파일러는 람다는 익명 클래스로 컴파일되어 사용된다. 그러므로 람다식마다 새로운 클래스가 생기고 람다가 변수를 캡처하면 람다 정의가 포함된 코드를 호출하는 시점마다 새로운 객체가 생긴다.. 결론적으로 람다를 사용하는 구현은 똑같은 코드를 직접 실행하는 함수보다 덜 효율적이라고 할 수 있다. 인라인 함수를 통해 람다의 부가 비용 없애기책에서는 이러한 문제를 인라인 함수를 통해 부가 비용을 없앨 수 있다고 소개한다. 인라인 함수를 사용하면 반복되는 코드를 뺴내되, 직접 실행될 만큼 효울적인 코드를 컴파일러가 생성하게 할 수 있다고 설명하고 있다. 그런데 인라인 함수를 사용해야 하면, 람다의 장점은 간결함인데,..