분류 전체보기 56

[Alarm] 2. 알람 섹션 분리 및 정렬

개발 일자 : 2022. 1. 11 AlarmListVC 에서 섹션 분리 기존 알람 앱과 다르게 켜져 있는 알람과 꺼져있는 알람을 분리했다. 뭔가 켜져있는 것과 꺼져있는 것이 구분되어 있는 것이 보기 더 편하지 않을까 싶어서,, 그렇기 때문에 전체적으로 수정을 했는데, 헤더와 관련된 설정이 추가되었고, 그로 인해서 단순히 alarm 데이터를 받을 때, 단순히 인덱스 값을 받는 것이 더 번거롭다는 생각이 들어 indexPath 를 그대로 넘기기로 했다. AlarmManager 에서도 약간의 변화가 생겼는데 alarms 변수를 이차원 배열로 만들었고 (켜진 알람과 꺼진 알람을 구분하기 위함) sectionCount 속성과 특정 섹션의 항목 개수를 반환하는 함수를 추가했다. 알람 설정과 관련된 함수들의 인자를..

[Clean Code] 6장. 객체와 자료 구조

변수를 비공개로 정의하는 이유 → 남들이 변수에 의존하지 않게 하기 위해 자료 추상화 // 목록 6-1(p.118) : 구체적인 클래스 public class Point { public double x; public double y; } // 목록 6-2 : 추상적인 클래스 public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 목록 6-1 → 확실하게 직표좌표계를 사용한다는 것을 알 수 있음 → 변수를 private 으로 선언한다 하더라도 조회(get) 함수와..

[Clean Code] 5장. 형식 맞추기

형식을 맞추는 목적 코드 형식은 의사소통의 일환이다 구현한 기능은 언제든 바뀔 가능성이 있지만 코드의 가독성은 앞으로의 코드 품질에 많은 영향을 미침 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 원래 코드는 사라질지라도 개발자의 스타일과 규율을 사라지지 않는다. 적절한 행 길이를 유지하기 ‘소스 코드는 얼마나 길어야 적당할까’ 에 대한 의문에 그림 5-1(p. 97)에서는 “500줄을 넘지 않고 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다” 고 말함 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하기 아주 좋은 신문 기사를 떠올려보라. 독자는 위에서 아래로 기사를 읽는다. 최상단에 기사를 몇 마디로 요약하는 표제..

[Alarm] #+4. 알람 끄기 화면 구현

개발 일자 : 2022. 2. 15 조금 오랜만에 다시 개발을 시작하는데,, 굉장히 당황스럽게도 지난번에 레이블 옵션 화면을 만들었는데 키보드가 안올라온다…????? 그래서 혹시나 싶어서 핸드폰에 연결해서 실행했더니 정상적으로 동작함,, 검색해도 뭘 체크하라는데 그렇게 해도 안나와서,, 알고봤더니 키보드가 그냥 꺼져있었던것같은데,, 시뮬레이터 새로 열면 키보드가 꺼져있는건가,, 암튼 cmd + K 로 Toggle 을 켜주었음 (이게 버튼으로는 안눌림,,ㅜ 왜지…..) 그리고 또 핸드폰 연결해서 실행하니까, 원하는 노래가 안울리고 진동만 울리길래 또 왜 안되지 생각해봤더니 무음모드가 꺼져있어야 함 ㅋㅋㅋㅋㅋ;; 역시 실제로 사용할 수 있을만한 알람앱 만들기 위해서는 백그라운드에서 뭔가 사운드가 동작할 수 ..

[Alarm] #+3. 알람 레이블 화면 추가

개발 일자 : 2022. 2. 4 알람 레이블 옵션 기능 추가하기~ 방식은 사운드 옵션 화면과 거의 유사하다 일단 레이블 화면(AlarmLabelVC)을 만들어 줌 Segue 연결도 해주고 이름은 AlarmLabelSegue 라고 했음 AlarmDetailVC 에서 해당 segue 를 위해 prepare 함수에 해야할 일을 추가해줬고 해당 셀이 선택될 때 연결된 segue 를 실행하도록 추가하였음 (나중에 각각 상수값들은 따로 정의해야할 것 같다) if~else 구문보다 switch 문이 깔끔할 것 같아서 구조도 변경해주었음 Alarm 구조체에 label 프로퍼티를 추가해서 viewDidLoad() 에서 configure() 할 때 전달된 값을 alarmOptions 항목에 적용하도록 수정하였음 priv..

[Alarm] 1. 기본 알람 목록 및 추가화면 구현, AlarmManager, 삭제 기능 추가

개발 일자 : 2022. 1. 10 알람 앱을 만들기 시작한 이유는 다른 앱을 만드는 중이었는데,, 그 앱에 알람 기능을 넣는 방식을 고민하는 것이 넘 복잡하기도 하고 좀 더 한 기능에만 몰입해서 개발을 하고 싶어서 종종 그런 것들이 생길 때마다 MySamples 프로젝트에 추가하기 위해 만들기 시작했다. 알람이라는 기능이 단순히 말 그대로 ‘알람’ 앱에만 사용되지는 않는다. 생각보다 많은 앱들에서 ‘알림’을 주어야 하는 상황이 존재하고 그 방식이 비슷하겠다라는 생각이 들었다. 이 알람 앱은 가장 기본적인 ‘알람’ 앱을 구현해보고자 시작한 프로젝트이다. 이미 비슷한 화면들을 구현해왔기 때문에 첫날 구현한 화면들과 기능은 빠르게 추가된 것들이다 알람 목록 및 추가화면 구현 AlarmListVC 우선 간단하..

[Clean Code] 4장. 주석

나쁜 코드에 주석을 달지 마라. 새로 짜라. — 브라이언 W. 커니핸, P. J. 플라우거 - 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면, 주석은 거의 필요하지 않으리라. - 우리는 코드로 의도를 표현하지 못해, 그러니까 실패를 만회하기 위해 주석을 사용한다. - 때때로 주석 없이는 자신을 표현할 방법을 찾지 못해 할 수 없이 주석을 사용한다. - 그러므로 주석이 필요한 상황에 처하면 곰곰이 생각하기 바란다. 상황을 역전해 코드로 의도를 표현할 방법은 없을까? 코드로 의도를 표현할 때마다 스스로를 칭찬해준다. - 주석은 오래될수록 코드에서 멀어진다. 이유는 단순하다. 프로그래머들이 주석을 유지하고 보수하기란 현실적으로 불가능하니까. - 나라면 코드를 깔끔하게 정리하고 표현력을 강화하는..

[Clean Code] 3장. 함수

— 함수를 만드는 규칙 작게 만들기 함수는 최대한 작게 만들자! 그렇다면 얼마나 작아야 할까? 블록과 들여쓰기 if 문/ else 문/ while 문 등에 들어가는 블록은 한 줄이어야 함 → 바깥을 감싸는 함수 enclosing function 가 작아지며 → 블록 내에 들어가는 함수 이름을 적절히 짓는다면, 코드를 이해하기가 쉬워짐 이 것은 중첩 구조가 생길만큼 함수가 커져서는 안 된다는 의미 → 들여쓰기 수준은 1단이나 2단을 넘어서지 않게 작성하기 한 가지만 하기 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 목록 3-3(p. 43) 을 보면 세 가지 작업을 한다고 할 수도 있지 않은가? 하지만 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한..

UITableView 편집 모드와 관련된 속성들

setEditing(_:animated:) func setEditing(_ editing: Bool, animated: Bool) : 테이블 뷰의 편집 모드 전환 및 해제 Parameters editing : true 이면 편집 모드로 전환, false 이면 편집 모드 해제. 기본 값은 false animate : true 이면 애니메이션과 함께 전환, false 이면 즉시 전환 editing 값이 true 로 설정된 채로 호출하면 테이블 뷰는 보여지는 각 UITableViewCell 객체에 setEditing(_:animated:) 를 호출하여 편집 모드로 전환함 editing 값이 false 로 설정된 채로 호출하면 편집 모드가 해제됨 편집 모드에서 테이블의 셀은 셀의 구성 방법에 따라 각 셀의 왼쪽..

[Alarm] #+2. 상세 화면에서 알람 삭제 기능 및 알람 시간 텍스트 표시 수정

개발 일자 : 2022. 2. 3 상세 화면에서 알람 삭제 기능 구현 지금까지는 알람 목록 화면에서 알람 삭제 기능만 구현해뒀는데 알람 상세 화면에서 삭제 셀을 선택했을 때, 알람 삭제 기능이 동작하도록 하기 위해 이전 AlarmSaving 프로토콜에 deleteAlarm() 을 추가했음 deleteAlarm() 을 추가하고 나니 AlarmSaving 이라는 이름이 좀 애매한 것 같아서 AlarmEditingDelegate 로 변경하였고 tableView(didSelectRowAt:) 메서드에 해당 셀이 선택된 경우 deleteAlarm() 을 호출하도록 하였음 첨에 이상한 값이 삭제되길래 봤더니 해당 메서드의 인자로 오는 indexPath 를 넘기고 있었다,, protocol AlarmEditingDe..