IOS
[RxSwift + MVVM] - 0. 시작
[RxSwift + MVVM] - 0. 시작
2021.05.02요즘 부쩍 MVVM패턴에 관해서 관심이 많습니다. 회사에서 혼자 iOS 개발을 하고 있는데요, 이게 제가 개발을 하기전에 외주로 개발을 한건데 테스트환경이 전혀 갖춰지지않았고, 제대로 구조화 되지 않아서, 유닛테스트를 활성화시켜서, TDD 개발을 진행하려고 계획을 세워보니, UI와 컨트롤러, 모델들이 상당한 의존성을 가지고 있어서, 제가 생각한 방향으로의 개발이 어려웠습니다. 그래서 어떻게 개발을 시작해야 조금 더 계획적으로, TDD수준까지는 아니더라도 테스트와 개발을 명확하게 나눌수 있을까 고민을 하였고, 아키텍처 패턴을 정하고, 수정을 해야되겠더라구요. 그래서 MVVM에 관하여 알아보다가, 한달가까이 RxSwift를 공부하였습니다. 그리고 대략 1년의 기간을 두고 구조 변경을 해보려고 합니다. 당분간..
Swift에서의 JSON 파싱
Swift에서의 JSON 파싱
2020.11.26실무에서 앱을 개발하면서, 네트워크를 사용하지 않는 앱을 만드는 경우는 드문것 같습니다. 흔히 서버와 통신을 하면서, 요새는 웹 JSON으로 많이 데이터를 받으며, 보통 RestAPI를 이용해서 데이터 전송을 많이 하는데요. 현실적으로 Swift 개발자는 맥이라는 장벽 때문에 다른 언어에서 Swift로 옮겨오는 경우가 많아서, 보통 Java나 C# 좀 더 올라가면 C, C++등등 언어에서 옮겨올텐데요, C#같은 경우에는 요즘 최신 버전이 Json 파싱을 지원해준다고 들었습니다만, 한 3년 전 까지만해도Json.Net 이라는 외부 라이브러리를 많이 이용했던 경험이 생각 납니다. 그래서 Swift를 예전에 처음 공부할 때에도 Json과 통신할 일이 있으면 가장 먼저 Github에서 Json라이브러리를 찾아보..
부스트 코스를 마치며
부스트 코스를 마치며
2018.10.19올해 상반기때 네이버 커넥트 재단에서 운영하는 edWith라는 온라인 교육사이트에서, 부스트코스 에이스라는 프로젝트를 진행했습니다. 간단하게 설명하자면, 프로젝트 진행 위주의 강의를 하고, 자신이 개발한 프로젝트를 제출하여, 리뷰를 받는 시스템입니다. 저도 지인의 소개로 참여를 하게 되었는데요, 대상자는 Swift를 기본적으로 이해하고, iOS 개발을 제대로 배워보고싶은 사람들을 대상으로 진행하였습니다. 기간은 5월부터 9월까지, 5개월이었구요, 진도들이 저조한지 부스트코스 에이스 오프라인 스터디 참가자를 모집하길래, 그 또한 가입했습니다. 팀장을 신청해서 팀장이 되어 스터디를 진행했는데요, 저희 스터디원분들은 비 개발자 한분과 학생 두분이었습니다. 저도 7월전까지는 이직준비를 좀 하느라고 많이 바빠서 ..
guard let과 if let의 차이
guard let과 if let의 차이
2018.07.20새로 나오는 언어들 대부분은 무수히 많이 일어나는 NULL Execption 오류를 피하기 위하여, Optional 에 관한 기법을 지원을 합니다. Swift도 예외는 아닙니다. 가장 대표적으로 if let과 guard let이 있습니다. myClassArray라는 MyClass 배열의 값 하나를 꺼내온다고 쳤을때, 두 문법을 한번 살펴보겠습니다. func getMyClass(myClassArray: [MyClass], index: Int) -> MyClass{ if let myClass = myClassArray[index]{ //블록 안에서만 myClass를 사용 가능 하다 return myClass } else { //nil 오류가 날 시, 빈 myClass를 리턴한다 return myClass()..
7. 후위식으로 이루어진 데이터 배열을 연산하여 결과를 추출
7. 후위식으로 이루어진 데이터 배열을 연산하여 결과를 추출
2017.11.261. 중위식을 전용 데이터 배열로 변환 2. 중위식으로 이루어진 전용 데이터 배열을 후위식으로 이루어진 전용 데이터배열로 변환 3. 후위식으로 이루어진 데이터배열을 연산하여 결과를 추출 후위식으로 이루어진 데이터배열을 연산하는 일만 남았습니다. 개발 계획서에 있지만, 다시한번 원리를 설명드리자면 이렇습니다. 후위식까지 처리가 되었다면 배열에는 다음과 같은 값들이 담겨있습니다. | 값,10 | 값,20 | 덧셈기호,+ | 위의 값이 후위표기이며, 풀어쓰면 다음과 같습니다. 10 20 + 스택을 이용하여 다음처럼 계산합니다. 1. 데큐의 끝까지 반복한다.2. 숫자일경우 스택에 삽입한다.3. 연산자일경우 스택의 두 값들을 뺀다 (차례대로 opr2, opr1이라합시다)* 스택은 후입선출의 구조이기 때문에 opr..
6. 중위식 데이터 배열 -> 후위식 데이터 배열로 변환
6. 중위식 데이터 배열 -> 후위식 데이터 배열로 변환
2017.11.261. 중위식을 전용 데이터 배열로 변환 2. 중위식으로 이루어진 전용 데이터 배열을 후위식으로 이루어진 전용 데이터배열로 변환 3. 후위식으로 이루어진 데이터배열을 연산하여 결과를 추출 이번 포스트에는 2번의 내용을 담습니다. 간단하게 설명을 드리자면 이 로직에는 두가지의 자료구조가 있습니다. 스택과 데큐입니다(데큐는 배열, 큐로 대체가 가능합니다) 처음부터 끝까지 순회 하면서, 조건이 없는 숫자들은 일단 데큐에 넣습니다. 그리고 연산자들은 스택에 넣습니다. 괄호는 왼쪽괄호는 스택에 넣고, 오른쪽 괄호가 나올때까지 스택의 값들을 데큐에 넣습니다. +, - 기호의 경우는 스택이 비거나, 왼쪽 괄호가 나올때까지의 값들을 데큐에 넣은 후 해당 위치의 기호를 스택에 넣습니다. * / 기호의 경우는 스택이 비거나..
5. 중위식 문자열 -> 전용 데이터 배열로 변환(파싱)
5. 중위식 문자열 -> 전용 데이터 배열로 변환(파싱)
2017.11.26자료구조들이 구현 되었으니, 이제 스택을 이용하여 식을 계산하는 함수를 구현하는일이 남았습니다. 우선 간략한 순서는 다음과 같습니다. 1. 중위식을 전용 데이터 배열로 변환 2. 중위식으로 이루어진 전용 데이터 배열을 후위식으로 이루어진 전용 데이터배열로 변환 3. 후위식으로 이루어진 데이터배열을 연산하여 결과를 추출 이 포스트에서는 1. 중위식을 전용 데이터 배열로 변환 하는 부분을 다룹니다. 중위식으로 이루어진 문자열을, 이전 포스트에서 작성하며 설명한 계산기 전용 데이터로 변환하여 배열에 담는과정인데, 설명드리자면 순서는 다음과 같습니다. 1. 문자열 전체를 처음부터 순회합니다1. 해당 위치의 문자의 타입을 판별합니다2. 문자의 타입이 마이너스 기호일 경우에는 유효성 검사를 통해서 음수표시인지, 연..
4. 계산기 함수에 이용하는 열거형과 데이터
4. 계산기 함수에 이용하는 열거형과 데이터
2017.11.26일반적으로 계산기는 문자를 파싱해서 중위표기된 식을 후위표기된 식으로 변환 후 각 문자를 판별해서 연산을 합니다. 제가 만드려는 계산기는 미리 데이터를 정의해서, 그 데이터의 값이 연산자인지, 값인지를 판별하여 후에 있는 수고를 조금 덜어주는 방식으로 만듭니다. 구조는 다음과 같습니다. type -> 값의 타입을 정의합니다.(계산기 열거형)value -> 값을 저장합니다.(문자열) 오직 생성자만 있는 구조체입니다. 계산기 열거형의 종류는 다음과 같습니다. value -> 값입니다. 계산기이므로 수가 들어갑니다.dot -> 점입니다. 소수점인경우입니다.operator -> 순서대로 곱셈,나눗셈,덧셈,뺄셈 기호입니다.Paren -> 왼쪽괄호, 오른쪽 괄호입니다.delimiter -> 구분자입니다etc -> ..
3. 데큐 구조체
3. 데큐 구조체
2017.11.26사실 스택 계산기에 데큐는 크게 필요 없습니다. 다만 개인적으로 배열의 Insert[0] 이게 귀찮기도 하고, 처음에 생각을 잘못해서 일단 구현을하고 조금씩 쓰면서 만들어 두었습니다. 실제로 제가 구현하려는 계산기에 데큐 -> 배열로 100% 치환이 됩니다.(데큐, 배열의 자료구조를 아시는분들은 당연히 아시겠지만, 데큐 -> 배열로 치환은 다 됩니다) 일단 코드는 스택과 크게 차이가 없습니다. Pop할때 앞부분을 뺄지, 뒷부분을 뺄지만 정하게 되어있으며, 앞부분은 큐와 같고 뒷부분은 스택과 같습니다. 삽입은 오직 뒤에서만 이루어집니다. 그리고 추가로, 배열 데큐를 치환하는 연산을 추가했습니다. 12345678910111213141516171819202122232425262728293031323334353..
2. 스택 구조체
2. 스택 구조체
2017.11.23C++에서는 구조체와 클래스의 차이가 거의 없습니다. 구조체는 기본값이 public, 클래스는 기본값이 private인것 외에 차이는 거의 없다고 들었습니다. 그래서 보통 개념적으로만 구분을 했었죠. 클래스는 정말 객체지향의 의미로 하나의 객체의 요구사항들을 정의할때 이용하는것이었고, 구조체는 단순한 값들의 묶음(레코드?)을 이용할때만요(틀릴수도 있겠지만 개인적으론 그렇게 이용했습니다) 하지만 스위프트에서는 조금 다릅니다. 대표적으로 스위프트에서의 클래스는 참조, 구조체는 복사의 의미를 가지고 있습니다. 스위프트 클래스A를 B로 가져오면, B=A가 됩니다. 1234567891011121314151617181920212223242526public Class MyClass{ public var integer..
2. 스택 클래스
2. 스택 클래스
2017.11.22스택은 가장 기본적인 자료구조중 하나입니다. 가장 늦게 삽입한 값이 가장 빨리 나오는 구조로써, 이를 후입선출이라 합니다. A,B,C순서대로 입력을 하고 다시 출력을 하면 C,B,A가 나오는 구조입니다. 스위프트에서 구현할 스택에 필요한것들은 다음과 같습니다. 속성 stack -> 템플릿 배열입니다. 자료를 보관합니다.length -> 스택이 가지고있는 값의 수를 나타냅니다. 사실 Swift에 자체적인 count가 있지만, 개인적으로 따로 만들어 씁니다. 연산 Push -> 스택에 값을 삽입할때 이용합니다. 스택의 크기가 반환됩니다.Pop -> 스택의 맨 마지막 값을 제거하는 동시에 반환합니다.IsEmpty -> 스택이 비어있는지를 확인합니다. 주로 반복작업을 할때 호출합니다.GetLength -> 스택..
1. 개발 계획(수정)
1. 개발 계획(수정)
2017.11.21금일부터 스위프트를 이용한 IOS 앱 개발 스터디를 시작했습니다. 스터디에서 서로의 실력과 페이스를 맞추기 위하여, 연습용 간단한 앱을 선정하여 만들어보기로 했습니다. 제가 잽싸게 계산기를 만들겠다고 선점을 해서 간단한 계산기 프로젝트를 맡았습니다. 개인적으로 언어를 처음 익힐때 예제를 따라하지 않고, 항상 남들 "Hello, World!" 치듯이 저는 기념비적으로 계산기를 만들어 봅니다. 개인적으로 책을 따라하면 재미가 없더라구요.. 본론으로 가보자면 거창하게 코코아 프레임웍까지 공부할 목적은 아니고, (물론 당연히 UI구현하면서 필수적이지만, 계산기 UI는 정말 간단하기에..) 스택을 이용한 계산기 라이브러리를 구현 후 그것을 IOS용 프레임웍인 코코아 프레임웍으로 이식할 생각입니다. 급하지않은 목표..