본문 바로가기
반응형

분류 전체보기870

[Swift 5.1] Static Subscript (SE-0254) 이 글은 Swift 5.1에 제안된 SE-0254 Static and class subscripts 업데이트를 살펴보는 글입니다. 결론부터 말해서 이제 subscript를 static 하게 쓸 수 있습니다. 이번에도 다짜고짜 예제로 살펴봅시다. struct HTTPStatus { private static var map = [Int: String]() static subscript(_ code: Int) -> String? { get { map[code] } set { map[code] = newValue } } } 위 예제에서 subscript가 static으로 선언되어 있습니다. 따라서 이제 인스턴스화 시키지 않고도 아래처럼 접근할 수 있습니다. HTTPStatus[200] = "Ok" HTTPSta.. 2019. 10. 31.
[Swift 5.1] 키 패스를 이용한 동적 멤버 찾아보기 (SE-0252) 이 글은 SE-0252 Key Path Member Lookup 제안을 통해 Swift 5.1에서 확장된 동적 멤버 찾아보기(dynamic member lookup) 기능을 간략히 살펴보는 글입니다. 이 업데이트는 Swift 4.2에서 추가된 @dynamicMemberLookup의 기능을 좀 더 확장시킵니다. 일단 다짜고짜 기존(?) 예제부터 봅시다. @dynamicMemberLookup struct SomeInfo { let properties: [String : String] = [ "name": "James", "city": "LA" ] subscript(dynamicMember string: String) -> String { return properties[string]! } } let info.. 2019. 10. 30.
흥미로운 링크들 10월 4주차 짧은 휴가를 다녀왔더니 링크 개수도 덩달아 줄어버렸네요. ☺️개발자를 위한 OS X(>= Catalina) 설정개발자를 위한 macOS 환경 설정, iTerm 설정, 터미널 환경 등 다양한 추천 설정을 정리한 링크입니다. 일부는 제가 선호하는 것과 동일하네요. 하지만 그렇다고 모두가 똑같이 사용하는 것도 아니니 오해도 하지 맙시다. 😏멋진 모션그래픽을 위한 팁모션 그래픽 팁을 애니메이션으로 설명한 트윗들을 모은 모먼트입니다. 게임 개발이든 영상 편집이든 여러 분야에서 참고할 수 있는 좋은 자료 같습니다.Firefox 70.0, See All New Features, Updates and Fixes파이어폭스 70버전의 릴리즈 노트입니다. 크롬의 버전업을 따라잡아버린 버저닝이 경이롭습니다.파폭도 얼른 퍼포.. 2019. 10. 28.
[Swift 5.1] 초기화 없는 배열 생성하기 (SE-0245) 이 뜬금없는 제목의 변화는 SE-0245 Add an Array Initializer with Access to Uninitialized Storage 프로포절에서 제시된 내용입니다. 일반적으로 Swift에서 Array를 특정 개수의 배열로 만들기 위해서는 반드시 데이터를 채워 넣어야 합니다. 예를 들어 5개 크기의 배열을 만든다면 아래와 같은 식이죠. let list = [0, 0, 0, 0, 0] 물론 이것 말고로 몇 가지 단순화된 방법이 있긴 하지만 아마도 이게 가장 흔한 예제일 것 같습니다. 그런데 굳이 초기화 값이 꼭 필요한 것이 아니라면 Swift 5.1부터는 아래와 같은 식으로도 만들 수 있게 됩니다. let list = [Int](unsafeUninitializedCapacity: 5) {.. 2019. 10. 24.
흥미로원던 링크들 10월 3주차 Convert curl syntax to Python, Ansible URI, Node.js, R, PHP, Strest, Go, Dart, JSON, Rustcurl 커맨드를 입력하면 이를 여러 언어로 구현한 코드를 알려주는 사이트입니다. 여러 용도가 있겠지만 이런 코드를 빠르게 작성할 때 도움이 되는 것 같습니다.다만 대상 언어에 Swift가 없다는 점은 큰 단점이군요. 🙁AbleMedium과 비슷한 블로깅 사이트입니다. 다만 개발자 친화적인 사이트 구조를 가지고 있습니다. Medium과는 다른 유료 모델을 가지고 있다는데 그냥 보기만 하는데 지장이 없다면 일단 Medium보다 좋은 점수를 줄 수 있겠네요. Medium은 조금만 읽어도 돈 안 내면 화면을 가려버리니 참 답답하더군요.그런데 Topic.. 2019. 10. 21.
[Swift 5.1] Opaque Result Types 그리고 some (SE-0244) 이번 글은 아마도 Swift 5.1 업데이트 내역 중 제가 가장 이해하기 힘들었던 변화 같습니다. SE-0244 Opaque Result Types에서 소개된 불투명한 결과 타입(Opaque Result Types)을 위한 some이라는 키워드 도입에 관한 내용입니다. 말로 설명하기 어려우니 예제를 봅시다. 아래 코드는 어떤 컬렉션을 만족하는 인스턴스를 돌려주는 함수를 구현하고 있습니다. func someList() -> Collection { return [1, 2, 3] } 안타깝게도 위 코드는 아래와 같은 빌드 에러를 발생시킵니다. Protocol 'Collection' can only be used as a generic constraint because it has Self or associat.. 2019. 10. 18.
[Swift 5.1] 구조체 생성자에 기본값 지원 (SE-0242) SE-0242 Synthesize default values for the memberwise initializer에서 소개된 프로포절이 5.1에서 구현되었습니다. 워낙 간단한 변화이고 내용도 쉬운 편이라 예제를 프로포절의 것 그대로 옮겨봅니다. struct Dog { var age: Int = 0 var name: String } 위 코드에서 주의 깊게 봐야 할 점은 age 프로퍼티에 초기값이 부여되어 있다는 점입니다. 그럼에도 기존 Swift 버전의 경우 생성되는 기본 생성자는 age와 name 두 파라미터 모두 초기값이 필요하게 생성되었습니다. 5.1부터는 이제 "초기값이 있는 프로퍼티는 굳이 생성할 때 값을 입력받을 필요가 없지 않냐"라는 요구가 받아들여져서 아래와 같이 사용할 수 있는 기본 생성.. 2019. 10. 17.
[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-emacsDoom 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 터널링을 이용해 호스트에 포트를 열고 이 포트를 직접 접속하는 수밖에 없다.도커를 쓰지 않고 이렇게 터널링으로 뚫어놓은 포트에 접근하는 것은 사실 아무 문제도 없다. 편하게 막 쓰면 된다.그런데 도커를 사용하게 되면 문제가 발생한다. 컨테이너 내부에서는 당연히 호스트의 포트 상황을 전혀 모르기 때문에 어떻게든 알려줘야 한다. 그런데 컨테이너를 띄울 때 -p.. 2019. 7. 19.
python2가 없는(?) 내 컴퓨터 회사 프로젝트 때문에 npm으로 hiredis를 설치하는 도중 아래와 같은 에러를 만났다.> hiredis@0.5.0 install /foo/bar/develop/project/node_modules/hiredis> node-gyp rebuildgyp 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 foundgyp ERR! stack gyp ERR! stack The `python2' command exists in the.. 2019. 7. 12.
타입(Types) | Javascript & ES6 공부 노트 #5 자바스크립트의 기본 타입과 ES6에서 추가된 타입에 대해 간단히 정리하는 글입니다.Boolean논리식에서 가장 직접적으로 사용되는 데이터를 표현하는 단위인 Boolean 즉 이진 타입은 거의 모든 언어에서도 지원되는 유명한 타입입니다. 자바스크립트에서도 동일한 이름의 타입으로 지원됩니다.var trueCondition = trueif (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.
728x90
반응형