전체 글 82

[THINK] Good Developers VS Bad Developers

미디엄 글 Good Developers VS Bad Developers 를 보고 느낀 점을 정리한 글입니다. Codementor 광고하기 위해 쓴 글인 것 같지만.. 그래도 저에게는 많이 찔리는게 있어 정리해보았습니다. Bad Developers 1. 카우보이 코더 - 코드를 매우 빨리 작성합니다. 평균적인 개발자보다 훨씬 빠르게 새로운 기능을 만들 수 있으며, 코드를 모르는 사람들은 이러한 빠른 코드 작성자가 멋지다고 생각 할 것입니다. (이는 카우보이의 자존심을 더욱 부추깁니다.) 그러나 이러한 카우보이는 향후 유지보수 가능성을 염두에 두지 않고 코딩합니다. 어느것이든지.. - 지저분하고 읽을 수 없는 코드 (스파케티 코드) 신속하게 구축 된 프로젝트의 코드 디자인은 완전히 혼란 스럽습니다. 이러한 ..

Life/Writing 2019.06.12

[iOS] 개발에 사용하는 라이브러리 정리 & 추천

프로젝트를 하면서 가장 많이 사용하는 라이브러리를 정리 및 추천해볼까 합니다. 어디까지나 주관적인 생각이며, 이 글은 개발하는데 어느정도 참고로만 보시면 좋을 것 같습니다. (2020.08.06 내용 보충 하였습니다.) Framework - ReactorKit (https://github.com/ReactorKit/ReactorKit) ReactorKit은 전수열님이라는 유명한 개발자님이 만드신 프레임워크입니다. MVP와 MVVM에서 혼란을 겪다가 (무엇보다 개발자마다 각자 철학으로 인해 여러가지 스타일이 있었고, State 관리가 싶지 않았음), RxSwift 오픈체팅 방에서 알게 되었습니다. - 정해진 템플릿이 있다는 점 - State 관리가 굉장히 편하다는 점 - RxSwift랑 잘 어울리는점 (R..

Programer/iOS 2019.05.30

[Fastlane] iOS App 자동 배포 해보기

대부분 App을 배포할 때 2~3개 정도의 버전을 배포하는데 (Develope, Production, etc..) 아카이빙하고, 앱스토어에 올리는 일이 여간 귀찮은 일이 아니었다. 예전에 Fastlane을 알게되어 적용을 해보려고 했는데, 프로젝트도 어느 정도 마무리되어 시간이 남아 적용해보게 되었다. 1. 설치 # RubyGems를 이용하는 방법 $ sudo gem install fastlane -NV # Homebrew를 이용하는 방법 $ brew cask install fastlane 커맨드 창에 입력만 하면 된다. 나는 Homebrew를 통해 설치하였다. (설치후, fastlane 명령어를 전역에서 사용할 수있도록 profile 세팅 방법을 알려주는데, 필요시 추가해주면 된다.) 2. Fastla..

Programer/iOS 2019.04.10

[회고] H프로젝트(iOS) 2018.11 ~ 2019.3

작년 11월 부터 H프로젝트(iOS)를 시작했는데, 처음으로 SI를 해본 느낀 점과 생각을 정리하기 위해 회고록을 작성해 보았다. 1. 잘한 점- RxSwift / ReactorKit정말 적용을 할지 말지 고민을 많이 했다. 개인 프로젝트 하면서 조금 공부를 해보았지만 실제 프로젝트에 사용을 해도 괜찮을까? 라는 많은 고민이 되었다.같이 협업하는 개발자 분도 처음에는 일정이 너무 빡빡해서 힘들지 않겠냐고 했지만, 지금 하지 않으면 못한다는 생각이 들어서 강행을 하게되었다.처음엔 MVVM패턴으로 구조를 잡다가 중간에 ReactorKit으로 적용하게 되었다. 아직 구조가 부족한 부분이 있고 일부는 Rx를 사용하지 않은 부분도 있었지만, 같이 협업했던 개발자분이 실력이 뛰어난 분이라 덕분에 나도 같이 많이 배..

Life/Memoirs 2019.03.04

[UI] TableView에서 이미지 크기에 따라 Cell 크기 조정하기

서버에 있는 여러 크기의 이미지를 받아 각각 TableView Cell에 넣을 때, Aspect Fit으로 처리해도 공백이 남는 경우가 있다. 이런 경우는 다음과 같은 방법으로 해결하라고 한다. internal var aspectConstraint : NSLayoutConstraint? { didSet { if oldValue != nil { contentsImageView.removeConstraint(oldValue!) } if aspectConstraint != nil { contentsImageView.addConstraint(aspectConstraint!) } } } override func setSelected(_ selected: Bool, animated: Bool) { super.set..

Programer/iOS 2019.01.18

[회고] 2018 회고록

2017 회고를 한지 얼마 안된거 같은데 벌써 2018가 끝나고 있다니 믿겨지지 않는다.iOS 개발을 2015년 부터 했으니 이제 5년차를 앞두고 있다. 전체 개발 경력은 6년차.. 그리고 지금은 4번째 회사를 다니고 있다. 기존 다니고 있던 회사에서 안드로이드 개발자가 퇴사하면서, 자연스럽게 업무는 나에게로 왔고, 4~5개월 간 iOS와 안드로이드 경험을 할 수 있었다. 대부분 작은 기능 추가, Analytics 추적코드를 심는 수준이었지만 안드로이드의 구조를 알 수 있는 기간들이었다. - Java를 다시 공부하게 됨- Android 기본적인 구조을 알게됨- Firebase Analytics, Facebook Analytics 이용해서 기획과 마케팅 업무를 협업할 수 있었다. 6월 말, 회사 사정이 어..

Life/Memoirs 2018.12.19

[Swift] StoryBoard 로컬라이즈(지역화) 쉽게하기

0. 들어가기 전에.. 기본적인 로컬라이즈(지역화) 방법은 아래 블로그를 참고하시면 쉽게 설정할 수 있습니다. http://trend21c.tistory.com/1689 1. 스토리보드 로컬라이즈스토리보드 로컬라이즈를 할 때, 일일히 Outlet를 바꿔줘야 하는 이슈가 있습니다. 저같은 경우는 스토리보드나 Nib 를 많이 사용하므로 로컬라이즈 할 때 꽤나 난감했습니다. 스토리보드에 있는 Outlet을 코드로 연결해줄수 없을까 했는데 다음과 같은 방법을 사용했습니다. protocol StroyBoardLocalizable { var LocalizerKey: String? { get set }} 일단, Label, Button, TextField 등 아웃렛에 사용할 프로토콜을 선언해주고.. extension..

Programer/iOS 2018.08.24

[FP] Imperative -> Declarative 예제를 통해 바꿔보기 (FizzBuzz)

예전 포스팅 중 Imperative -> Declarative 예제를 좀 더 진행해보려고 합니다.아래는 전에 보여드렸던 Imperative vs Declarative 예제입니다. let fizz: (Int) -> String = { i in i % 3 == 0 ? "fizz" : "" }let buzz: (Int) -> String = { i in i % 5 == 0 ? "buzz" : ""}let fizzbuzz = { i in { $0.isEmpty ? "\(i)": $0}(fizz(i) + buzz(i)) }let output = { print($0) } (1...100).map(fizzbuzz).forEach(output) 1. fizz(i) + buzz(i) 부분을 개선하고자 아래와 같이 + 함..

Programer/iOS 2018.07.16

[FP] 함수 & 고차함수 vs 클로저

1. 함수는 무엇인가요?기본적으로 Input 값이 있고 연산 후 Output이 있는 것을 함수라고 합니다. //두개의 Input값을 받아 더한 값을 Output값을 리턴 하는 함수 func addNumber(n1: Int, n2: Int) -> Int { return n1 + n2 } 추가로, Output 값만 있는 함수는 Generator, Input 값만 있는 함수는 Consumer 라고 부릅니다. 2. 고차함수는 무엇인가요?다른 함수를 전달인자로 받거나 함수 실행 결과를 함수로 리턴하는 함수를 고차함수라고 합니다. //실행 결과를 inc 함수로 리턴하는 makeInc 고차함수 func makeInc(_ n: Int) -> (Int) -> Int { func inc(_ x: Int) -> Int { ..

Programer/iOS 2018.07.12

[FP] Functional Programing 용어 정리

1. Immutable Datalet foo = "bar"한번 데이터를 넣으면 그 데이터를 바꾸지 마라.(= 새로운 데이터를 사용하고 싶으면 새로 선언해서 사용해라) 2. Pure Function함수 밖에 있는 변수를 바꾸지 말고, 안에서 변수를 만들어서 사용해라.(같은 Input 에서 같은 Output을 내보내는 것) 3. Fuction as First-Class CitizenFunction을 일급 객체로 사용해라 (Swift에서 지원) 4. Lazy Evaluationfunc heavyJob() -> String { return "This is heavy job" } func Log(_ mesage: String) {#if DEBUGprint(message)#endif}func Log(_ mesage..

Programer/iOS 2018.07.10