본문 바로가기
개린이 이야기

With Calendar 프로젝트를 하면서

by iOS 개린이 2023. 1. 9.

With Calendar 

 

간단소개

-나의 일정,  기억하고 싶은 메모 등을 기록하는 스케쥴 서비스 어플

-개발자 공부를 하면서 "기억보다 기록" 해야한다는 말을 몸소 깨닫고 실천에 옮길 수 있도록 도와주는 앱을 만들면 좋지 않을까 라는 생각에 프로젝트를 시작했다.

 

주요 기능

1. 달력

2. 공유 달력

3. 간단 메모

 

1-1 달력기능 안에 구체적인 기능들

1. 달력

-라이브러리를 사용하지 않고 Swift에서 제공하는 Date, Calendar 등을 이용해서 달력을 만듬.

 

2. 달력 안에 기록한 일정을 보여주는 기능으로 하루 일정과 기간 일정

-솔직히 이 기능이 제일 까다로웠음.

-달력을 컬렉션뷰로 구성했고, 각 컬렉션 셀 안에 테이블 뷰가 있음. 

컬렉션 셀마다 2022-01-30 이런식으로 날짜 데이터가 들어가있음. 

일정을 저장하면 일정 날짜에 맞는 셀을 찾아서 index를 알아내고 그 index에 맞는 셀에 데이터를 넣어줌.

기간일정은 저장소에서 가장 먼저 가져와야 하고, 기간 일정이 들어갈 때 각 테이블뷰의 몇 번 index에 들어가는 지 파악, 그리고 그 기간에 맞게 index를 모두 넣어주어야 함. 

-간단하게 말했지만.. 이외에도 정말 많다..

 

3. 일정 컬러

-내가 저장한 컬러로 보여주기. 이것은 hexString 전환 라이브러리를 사용하여 만듬

alpha값을 담을 공간을 제공해주는 라이브러리를 사용해야 한다.

RGBA와 ARGB인 애들이 있는데, RGBA로 알파값을 마지막에 넣어주는 라이브러리를 사용함.

ex) #000000FF

 

-Color Picker 이용해서 유저가 직접 컬러도 선택할 수 있도록 했는데 

배경색과 반전되는 텍스트 컬러를 넣어주어야 하는 문제가 생겼다.

예를 들어 내가 노란색 배경 컬러를 넣어주었으면 배경 안에 텍스트 컬러는 똑같이 밝은 색을 넣어주면 안되기 때문에 자동으로 반전 컬러를 넣어주어야 함.

이것 또한 Chameleon 라이브러리 사용해서 해결.

 

4. 공휴일 기능 

-공공데이터 포털에서 데이터를 가져왔다. 이 기능을 구현하기 위해 URL Session, JSON pasing에 대해서 공부해봄.

-데이터를 가져오는 것은 문제가 아니었다.. 이 데이터를 나의 달력 구조에 어떻게 가져와야 할까에 대한 고민을 많이 해보았다. 

해결책: 회원가입과 동시에 달력이 생성되고, 이 달력안에 바로 공휴일 데이터를 넣어줌.

 

5. 음력 기능

-이것 또한 공공데이터 포털에서 데이터를 가져왔다. 근데 이 데이터는 JSON이 아니라 XML로 되어 있어서 약간 흠칫했지만 "나는 할 수 있다" 5번 외치고 천천히 공부하면서 해보니 역시 할 수 있었다.

 

6. 알림 기능

-내가 적은 일정에 알림을 설정하는 기능이다.

Notification에 대해 공부해서 구현했다.

 

2-1 공유달력 기능 안에 구체적인 기능들

1. 데이터 구조

-가장 중요한 점은 개인 달력일 때와 공유 달력일 때를 구별해서 달력에 표시해야 하는 것.

왜냐하면 내가 보고싶은, 필요한 달력을 편리하게 스위칭 해야 하기 때문이다.

그래서 구조가 더 어렵게 다가왔다. 그래서 포기했다.. 그래서 Social Calendar 기능으로 바꿨다..

하지만 마지막에 "내가 이런 것도 못해서 무슨 개발자냐" 라는 생각이 들어서 결국 Share Calendar 해냈다.

 

 

3-1 간단메모 기능 안에 구체적인 기능들

1. 메모기능

 

2. 고정 핀 기능

-중요하다고 생각되는 메모는 고정핀을 눌러서 맨 위에, 내가 원하는 컬러로 표시되도록 하는 기능

 

 

 

이 프로젝트를 하면서 배운 점

-URL Session, JSON Pasing, XML Pasing

-Date 구조체에 대해 빠삭해짐.

-데이터를 내가 구성한 구조에 맞게 동기화 시키는 것

-다크모드와 라이트모드 구현

-UIColor와 hexString 등에 대해서 알게되었다.

-각종 애니메이션과 UI를 알차고 이쁘게 구성하는 방법에 대해 조금은 터득을 했다..

 

 

 

이 프로젝트를 하면서 느낀 점

1. 어떤 기술을 구현할 때 이론에 대해 먼저 공부하고, 실무에 적용해보는 것이 적절하게 이루어져야 빠른 습득이 가능하다는 것을 느꼈다. 

 

2. 문제가 생기면 가장 먼저 문제의 원인을 분석하고 문제에 접근해야 한다. 문제가 생기면 무턱대로 이것 저것 코드부터 붙이면 효율적, 효과적인 공부가 안댐.

 

3. 프로젝트를 하는 목적에 대해서 명확하게 하고 가야한다.

초보는 개인 프로젝트를 할 때 새로운 기술들을 많이 접해보고, 공부해보는 것이 중요하다.

근데 나는 뷰 만드는 것에 너무 치중하다보니.. 시간을 효율적으로 사용하지 못했다.

 

4. 어렵다고 생각하지 말자.

어려운 것이 아니라 잘 모르는 것일 뿐이다. 

차근차근 하나씩 공부해나가면 안되는 것은 없다.

 

5. 오늘은 불가능해도 내일은 가능할 수 있다. 

처음 생각했을 때 불 가능하다고 포기하지말고, 다음 날도 생각해보고, 또 다음 날도 생각해보면 결국 해결함.

 

6. 프로젝트에만 치중하지말고, 이론 공부도 같이 해주기.

하루 10시간을 모두 프로젝트 코딩하는 데 쓰지말자.

프로젝트도 결국 공부를 위한 것이다. 

코딩도하고,

이론을 공부해서 기술 블로그에 올리고,

책 읽어보고,

강의도 보면서 새로운 기능 알아보자.

 

7. 구조에 대해서도 생각하자.

 

7-1. 데이터 구조

-업데이트 버전을 내보면서 처음 짜놓은 데이터 구조를 바꿔야 하는 경우가 많았는데, 이 때마다 유저들의 데이터들도 다시 새로 갱신해주어야 하는 문제가 생겼었다. 처음부터 데이터 구조에 대해서 잘 고려하자.

 

7-2. 코드 구조

-개발자는 혼자 코드를 짜는 것이 아니라 협업을 해야 한다. 어떻게 하면 코드를 이해하기 쉽게 짜는지에 대해서 고려해보자.

-구현하는 것도 중요하지만, 구현은 결국 시간만 많이 준다면 어떻게든 할 수 있기 때문에 현업에서는 구조에 와 구현 모두 가져가는 개발자가 중요하다.

-중첩되는 메소드는 묶어서 public으로 만들어보고, MVVM, MVC 패턴 등에 대해서 공부 

 

'개린이 이야기' 카테고리의 다른 글

Custom Splash 화면  (0) 2023.01.17
Google AdMob(애드몹)에 관하여  (0) 2023.01.15
Local Notification(로컬 푸쉬 알림)  (0) 2022.12.07
URLSession에 관하여  (0) 2022.11.25
함수형 프로그래밍에 관하여  (0) 2022.10.09