본문 바로가기
반응형

전체 글721

[Swift 5.1] 순서가 있는 콜렉션끼리 차이점 비교하기 (SE-0240) SE-0240 Ordered Collection Diffing 프로포절은 제목처럼 컬렉션끼리 비교해서 차이점을 얻기 위한 것으로 Swift 5.1에 구현되었습니다. 단순하게 말하자면 difference()라는 메서드가 Collection에 추가되었다라고도 볼 수 있겠네요. 일단 예제를 봅시다. let alpha1 = ["a", "b", "c"] let alpha2 = ["a", "c", "d"] let diff = alpha1.difference(from: alpha2) for d in diff { print(d) } .difference() 메서드를 이용해 두 컬렉션을 비교할 수 있습니다. 결과는 CollectionDifference라는 타입의 컬렉션으로 돌아오는데 데이터를 가지고 있는 enum 필드들.. 2019. 10. 15.
흥미로웠던 링크들 10월 2주차 애플, macOS 카탈리나 배포 시작 아기다리고기다리던 macOS 카탈리나가 드디어 공식 릴리즈 되었습니다. 원래는 UIKit for macOS 즉 Catalyst를 기다리고 있었지만 SwiftUI가 소개된 이후 이 녀석을 써보기 위해서 카탈리나를 기다려 왔었지요. 그리고 드디어 이 글을 쓰는 지금 감동적인 설치를... 다운로드가 18시간이... 애플 서버 일해라 🙁 기타 iPad를 사이드카를 이용해 서브 모니터로 쓰는 기능과, iTunes가 몇 가지 앱으로 분리가 되는 점, 32비트 지원이 완전히 사라지는 점 등등 다양한 변화가 있습니다. 그래도 메이저 버전 업데이트이니 혹시나 자신이 보수적이라면 다음 마이너 패치 릴리즈를 기다리는 것도 나쁘지는 않은 선택 같습니다. 여담이지만, 정식 버전은 GM과 릴.. 2019. 10. 14.
[Swift 5.1] Self 키워드의 기능 추가 (SE-0068) macOS Catalina 공식 버전 출시 이후로 늦었지만 Swift 5.1의 변화점들에 대해 공부하고 있습니다. 이 글을 시작으로 Swift 5.1에서 뭐가 바뀌었는지 눈에 띄는 것들을 글로 정리해보고자 합니다. 첫 글은 SE-0068 Expanding Swift Self to class members and value types에서 소개된 Self의 기능 확장에 대한 이야기입니다. 뭐 아시겠지만 Self는 원래 자기 자신의 동적 클래스(dynamic class)를 가리키는 키워드입니다. 우선 예제를 살펴봅시다. class MyClass { class var name: String { return "unknown name" } func show() { print("My name is \(MyClass... 2019. 10. 13.
흥미로웠던 링크들 10월 1주차 블로그 글 업데이트가 점점 늦어지고 있다는 것에 좀 압박감을 느끼고 있다. 이대로 묻히는 것은 안 좋을 것 같고, 글 쓰는 게 오래 걸리는 만큼 좀 더 가벼운 주제의 글로 빈 공간을 메꿔보고자 하는 생각이 들었다. 그래서 한 주 단위로 링크를 정리하는 글을 종종 써보려고 한다. 이 글은 이 시리즈의 첫 글이다. Commits - hlissener/doom-emacs Doom Emacs는 Spacemacs와 함께 Emacs 커뮤니티 드리븐 설정 프로젝트의 양대 산맥 중 하나이다. 뭔가 하면, 이맥스의 방대한 패키지들의 설정을 한데 모아서 좀 더 설정하기 쉽게 만든 프로젝트, 좀 더 단순하게 말해서 그냥 이맥스 설정 덩어리다. 둘 다 특징으로 Vim 키맵 확장인 evil을 기반으로 만들어졌다는 점이 특징이긴.. 2019. 10. 7.
연산자(Operators) | JS & ES6 공부 노트 #6 연산자의 정의를 어디까지 볼 것인가에 대한 객관적인 기준은 없는 것 같습니다. 이 노트에서는 연산자의 범위를 대체로 '영단어가 아닌 문자' 중에서만 발췌합니다. 그리고 연산자 하나하나의 기능을 살펴보기보다는 그저 훑고 지나가는 수준으로만 정리합니다. 불성실한(?) 글 미리 죄송하다는 말씀드립니다. 😏 유명한 연산자들 굳이 설명이 필요 없을 것 같은 연산자들도 많은 것 같습니다. 왜냐하면 대부분의 언어에서 거의 동일하게 사용되기 때문이지요. 대표적으로 다음과 같은 산술 연산자들이 있습니다. + - * / 곱하기(*)와 나누기(/)는 교과과정의 산수나 수학에서 쓰이는 기호와는 좀 다른데, 오히려 프로그래밍 언어에서는 이 두 연산자가 더 유명하므로 굳이 설득(?) 하지 않아도 될 것 같습니다. 그리고 + 연산.. 2019. 8. 21.
electron-vue에서 process를 못 찾는 문제 Javascript랑 ES6 공부 겸 일렉트론(elecron)으로 앱을 한번 만들어보고자 했습니다. 거기다 기왕 하는 김에 회사에서 사용하는 vue도 같이 사용해보면 좋을 것 같았습니다. 그래서 찾아보니 electron-vue라는 프로젝트 보일러 플레이트 생성해 주는 프로젝트를 발견했습니다. 목적에 맞는 게 있으니 당장 써보면 좋겠지요. 우선 아래처럼 프로젝트를 만들어 봤습니다. $ npm i vue-cli -g $ npm i yarn $ vue init simulatedgreg/electron-vue my-project 이것저것 귀찮게 물어오네요. vue-cli 쓸 때랑 묻는 게 비슷한 걸로 봐서 vue를 쓰면 어쩔 수 없는 숙명 같은 것일까요? yarn은 이 단계에서 꼭 필요한 건 아니지만 미리 설채.. 2019. 8. 3.
Docker에서 macOS 호스트 포트에 접근하기 개인적으로 삽질했던 도커(Docker) 관련 경험을 하나 풀어서 메모해본다. 내용은 도커 컨테이너에서 macOS의 호스트에 열려있는 포트에 접근하는 방법에 대한 것이다. 하려는 것 회사 보안 정책 상 그냥은 접근할 수 없는 여러 서버들이 있다. 개발 중인 프로그램에서 정식으로 배포하지 않고 개발 서버로 이 서버에 접속하려면 VPN을 활성화 한 다음 SSH 터널링을 이용해 호스트에 포트를 열고 이 포트를 직접 접속하는 수밖에 없다. 도커를 쓰지 않고 이렇게 터널링으로 뚫어놓은 포트에 접근하는 것은 사실 아무 문제도 없다. 편하게 막 쓰면 된다. 그런데 도커를 사용하게 되면 문제가 발생한다. 컨테이너 내부에서는 당연히 호스트의 포트 상황을 전혀 모르기 때문에 어떻게든 알려줘야 한다. 그런데 컨테이너를 띄울 .. 2019. 7. 19.
python2가 없는(?) 내 컴퓨터 회사 프로젝트 때문에 npm으로 hiredis를 설치하는 도중 아래와 같은 에러를 만났다. > hiredis@0.5.0 install /foo/bar/develop/project/node_modules/hiredis > node-gyp rebuild gyp ERR! configure error gyp ERR! stack Error: Command failed: /foo/bar/.pyenv/shims/python2 -c import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack pyenv: python2: command not found gyp ERR! stack gyp ERR! stack The `python2' command exists i.. 2019. 7. 12.
타입(Types) | Javascript & ES6 공부 노트 #5 자바스크립트의 기본 타입과 ES6에서 추가된 타입에 대해 간단히 정리하는 글입니다. Boolean 논리식에서 가장 직접적으로 사용되는 데이터를 표현하는 단위인 Boolean 즉 이진 타입은 거의 모든 언어에서도 지원되는 유명한 타입입니다. 자바스크립트에서도 동일한 이름의 타입으로 지원됩니다. var trueCondition = true if (trueCondition) { console.log('This is true!') } 가질 수 있는 값은 true(참), false(거짓) 뿐입니다. 그리고 이 값은 if 등의 논리 구문에 그대로 활용됩니다. Number 숫자를 표현하는 타입입니다. 숫자를 보관하고 이 숫자들을 이용해 사칙연산, 즉 더하기(+), 빼기(-), 곱하기(*), 나누기(/)를 사용해 연산.. 2019. 7. 11.
유튜브는 짧은 영상에 대한 배려가 필요하다 유튜브가 대세다. 약간 늙어 보이는(?) 말투로 유튜브 춘추전국 시대다. 구글에서 검색을 해도 유튜브 동영상이 상위로 올라올 정도다. 이제 텍스트 정보보다 유튜브 영상 정보가 더 많이 생산된다고 느껴질 정도다. 과연 이런 현상은 좋게 봐야 하는 것일까? 적어도 나 개인에겐 문제가 있다. 뭐가 문제냐고? 동영상은 보는 데 시간이 걸리잖아? 글자와 동영상 중에 뭘 선호하느냐고 묻느냐면 개인적으로는 텍스트(글자)라고 답한다. 당연히 글자는 빠르게 훑어볼 수 있고 자세히 보고 싶은 부분을 찾아서 읽을 수 있다. 그래서 필요한 정보인지 혹은 관계가 없는지 스팸인지 여부로 빠르게 판단할 수 있다. 거기다 글자는 음성보다 더 정확한 정보 전달이 가능하다. 검색 결과 면에서도 당연히 텍스트 정보가 압도적으로 유리하고 .. 2019. 7. 6.
처음으로 사본 USB C타입-라이트닝 케이블 기존에 쓰던 업무용 맥북프로가 오래되어서 2018 맥북프로로 교체하게 되었다. 그런데 새 맥북프로는 USB 포트가 모조리 C 타입이다. 망할... 것 까진 아니고 위아래 구분이 없고 작아서 포트 자체는 마음에 든다. 하지만 새로운 USB 포트들이 문제가 없는 것은 아니다. 기존에 쓰던 아이폰 충전 겸 데이터 케이블이 몽땅 USB A타입이다 보니 새 맥북에서 쓸 수가 없었다는 것이 가장 큰 문제다. 특히 아이폰을 충전할 수가 없다는 것이 치명적이었다. 이 문제를 해결하기 위해 여러 방법을 찾아봤다. 그나마 가장 나아 보이는 해결책은 통합 허브를 이용하는 것이다. 모양도 그럭저럭 이쁘고 다양한 USB 포트도 있고 메모리카드나 HDMI 소켓도 있는 등 아주 다양하고 만능인 제품을 찾을 수 있었다. 물론 가격이.. 2019. 6. 14.
변수와 상수 | Javascript & ES6 공부 노트 #4 언어를 공부할 때 가장 먼저 익혀야 할 개념은 변수(variable)라고 생각합니다. 데이터를 담을 수 있는 메모리 공간을 할당하고, 여기에 데이터를 넣고, 데이터를 바꾸어서 넣을 수 있다는 점은 논리적인 사고에서 가장 필수적으로 알아야 할 내용이니깐요. 그런 의미로 정말 기초적이지만 중요한 이 변수, 그리고 변수가 나오면 같이 등장하는 상수, 그리고 변수와 상수를 다루는데 필요한 연산자에 대해 간략히 알아보겠습니다. 동적 타이핑(Dynamic Typing) 우선 동적타이핑 개념을 알아야 할 것 같습니다. 자바스크립트는 동적 타이핑 변수 시스템(?)을 가지고 있는 언어입니다. 동적 타이핑은 타입이 유동적이다라는 의미이며, 쉽게 말해서 변수에 아무 타입의 데이터를 넣거나 비교해도 된다는 의미입니다. 예를 .. 2019. 4. 11.
주석과 세미콜론 | Javascript & ES6 공부 노트 #3 참 뜬금없는 주제이긴 합니다만, 이번 글에서는 주석(Comment)과 세미콜론(Semicolon)에 대해 이야기하고자 합니다. 다른 언어들에서도 상당히 공통적인 이슈이니 아마도 알고 있을 법한 내용일 가능성이 큽니다. 주석문 주석은 실행되지 않는 글자로 코드 자체에 아무런 영향을 끼치지 않는 기능입니다. 왜 이런 게 있는지 이해가 안 되시나요? 보통은 코드의 용도나 사용 방법 등을 주석으로 적습니다. 만약 혼자서 작업하는 게 아니거나 혹은 다른 사람도 이 코드를 쓸 수 있게 한다면 설명 없이는 여러분의 코드의 의도를 제대로 이해하기 어려울 수도 있습니다. 이럴 때 주석은 정말 큰 힘을 발휘합니다. 이 외에도 주석으로는 누가 만들었니, 간혹 잘 돌아가지만 뭔진 모르겠다거나(?) 농담을 적거나 혹은 개발자들.. 2019. 4. 11.
Swift 5에서는 뭐가 바뀌었을까? Swift 5가 지원되는 Xcode 10.2가 정식으로 릴리즈 되었습니다. 이에 발맞춰 (그리고 공부 삼아) Swift 5의 변경점을 정리해 보는 글입니다. 이 글은 공식 블로그의 Swift 5 릴리즈 소식을 기준으로 작성합니다. ABI Stability Swift 5는 ABI Stability, 즉 바이너리 레벨의 API 호환성을 드디어 안정화시킨 버전입니다. 이제 사용하는 프레임워크나 라이브러리가 Swift 5 이상으로 빌드했다면 컴파일러가 버전 다르다고 투덜거리는 것을 볼 확률이 많이 없어진다는 말입니다. Raw Text SE-0200 Enhancing String Literals Delimiters to Support Raw Text 이스케이프(escape) 등 문자열 대치(String Inter.. 2019. 4. 7.
콘솔에 뭔가를 찍어보자 | Javascript & ES6 공부 노트 #2 프로그래밍 언어를 하나 이상 공부해 봤다면 샘플 코드가 항상 무엇으로 시작하는지 다들 알고 있을 것입니다. "Hello World"를 찍는 예제 코드 말이죠. 이 코드가 중요한 이유는 출력에 해당하는 가장 원초적이면서도 핵심적인 기능을 사용하기 때문입니다. ES6에서는 Javascript와 같이 console.log를 이용해 콘솔에 내용을 인쇄할 수 있습니다. console.log('Hello World!') Javascript와는 다르게 끝에 세미콜론이 없는데 이는 ES6의 특징입니다. ES6에서는 줄 끝의 세미콜론을 생략할 수 있습니다. 개인적으로 Swift를 좋아하기 때문에 이와 비슷하게 세미콜론을 안 써도 되는 점을 굉장히 좋아합니다. 하지만 생략해도 된다는 것뿐인지라 만약 팀에서 세미콜론을 사용.. 2019. 3. 31.
시작하기 위해 개발환경을 만들다 | Javascript & ES6 공부 노트 #1 ES6는 어떤 한 언어 이름의 약자와 버전이 합쳐진 이름입니다. 그리고 ES2015라 불리는 언어 스펙의 다른 이름이기도 합니다. 그리고 ES는 ECMAScript를 줄여서 부르는 이름이지요. 그냥 쉽게 말해서 ECMAScript 2015년 버전이 ES6입니다. 이 언어는 Javascript(자바스크립트)를 보완 혹은 대체하기 위해 나온 언어라고 볼 수 있습니다. ES는 Javascript와 비슷합니다. 하지만 같지는 않습니다. 하지만 아무리 ECMAScript와 Javascript가 다르다고 이야기해도, ES가 Javascript 토대에서 만들어진 것 같다는 느낌이 너무 강하게 들기 때문에 완전히 다르다고 하기에도 어렵다고 생각됩니다. 다만 이 글 타래는 Javascript와 ES6 모두를 공부하기 위.. 2019. 3. 28.
728x90
반응형