---
# System prepended metadata

title: '일기장[STEP1]'
tags: [Comment]

---

# 일기장[STEP1] PR

---

## 첫 번째 코멘트
![](https://hackmd.io/_uploads/HJXG-Gm03.png)

### 🙋‍♂️ 첫 번째 코멘트 답변
- 네 알겠습니다, 다음 PR에 수정하겠습니다 감사합니다 😆

---

## 두 번째 코멘트
![](https://hackmd.io/_uploads/ByNSZGXCh.png)

### 🙋‍♂️ 두 번째 코멘트 답변
- 첫 번째 이유는 저희 둘 만의 코드 컨벤션을 정했습니다. 🙌
- 두 번째 이유는 추후에 옵션을 추가할 일을 대비하여 클로저로 생성하였습니다. 🙌

---

## 세 번째 코멘트
![](https://hackmd.io/_uploads/HJqjZz7Rn.png)
![](https://hackmd.io/_uploads/BJRnWzmA2.png)

### 🙋‍♂️ 세 번째 코멘트 답변
- 감사합니다. 조금 더 깔끔하고 좋은 코드를 만들기 위해 신경쓰겠습니다. 코드는 수정하도록 하겠습니다. 😀

---

## 네 번째 코멘트
![](https://hackmd.io/_uploads/HyOJzMm02.png)

### 🙋‍♂️ 네 번째 코멘트 답변

- `becomeFirstResponser()`는 `textView` 객체를 해당 `window`의 첫 번째 응답자(`first responder`)로 만들도록 `UIKit`에 요청하는 역할을 합니다.
    - 객체가 첫 번째 응답자가 되기를 원할 때 이 메서드를 호출합니다.
    - 응답자가 `UITextField`, `UITextView` 또는 `UIKeyInput` 프로토콜을 구현하는 텍스트 뷰인 경우 뷰의 `root window`가 `key window`인 경우에만 소프트웨어 키보드가 표시될 것으로 예상합니다.

> key window란?</br>
> 키보드 및 기타 비터치 관련(non-touch-related) 이벤트를 수신합니다. 한 번에 하나의 window만 key window가 될 수 있습니다.

- [🍎 becomeFirstResponder()](https://developer.apple.com/documentation/uikit/uiresponder/1621113-becomefirstresponder)
- [🍎 keyWindow](https://developer.apple.com/documentation/uikit/uiwindow/1621612-keywindow)
- [🍎 UIWindow](https://developer.apple.com/documentation/uikit/uiwindow)

---

## 다섯 번째 코멘트
![](https://hackmd.io/_uploads/SyYKMMXA3.png)


### 🙋‍♂️ 다섯 번째 코멘트 답변
- 첫 번째 이유는 저희 둘 만의 코드 컨벤션을 정했습니다. 🙌
- 두 번째 이유는 추후에 옵션을 추가할 일을 대비하여 클로저로 생성하였습니다. 🙌

---

## 여섯 번째 코멘트
![](https://hackmd.io/_uploads/BkP2GfmC2.png)


### 🙋‍♂️ 여섯 번째 코멘트 답변
- 다음과 같은 방법을 사용하려 합니다 :)

```swift!
extension Array {
    subscript(safe index: Int) -> Element? {
        return indices ~= index ? self[index] : nil
    }
}

let list = [1,2,3]
list[safe: 4] // nil
list[safe: 2] // 3
```
---

## 일곱 번째 코멘트
![](https://hackmd.io/_uploads/Bku0fzXR3.png)

### 🙋‍♂️ 일곱 번째 코멘트 답변
 - 따봉으로 답변
---

## 여덟 번째 코멘트
![](https://hackmd.io/_uploads/S1hg7Mm02.png)

### 🙋‍♂️ 여덟 번째 코멘트 답변
- 저희가 정한 컨밴션은 `return`을 한 줄 개행하기로 약속했습니다. 그로 인하여 68번째 줄을 개행하였습니다.

---

## 아홉 번째 코멘트
![](https://hackmd.io/_uploads/SkKr7G7C2.png)

### 🙋‍♂️ 아홉 번째 코멘트 답변

- 아래와 같이 분기 처리를 하여 15.0 버전 이상 인 경우와 미만인 경우 버전 대응을 위한 분기를 구현해보도록 하겠습니다.

```swift!
if #available(iOS 15, *) {
   // [iOS 15.0 버전 이상 인 경우 분기 처리 내용]
}
else {
   // [iOS 15.0 버전 미만 인 경우 분기 처리 내용]
}
```

---

## 열 번째 코멘트
![](https://hackmd.io/_uploads/B1r5QzmC3.png)

### 🙋‍♂️ 열 번째 코멘트 답변
- `NSCoding` 프로토콜이 `init?(coder:)`를 명세하고 있기 때문에 구현해야 합니다.
- `DiaryTableViewCell`에서 새로운 `init`을 만들지 않을 경우 상속받은 `UITableViewCell`에 이미 구현되어 있어 구현할 필요가 없습니다. 하지만 `init`을 오버라이드했기 때문에 `required init?`을 구현해야 합니다.
- [🍎 Required Initializers](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/initialization/#Required-Initializers)


---

## 열한 번째 코멘트
![](https://hackmd.io/_uploads/BJLJEzm02.png)

### 🙋‍♂️ 열한 번째 코멘트 답변
- 저희가 알아본 결과 `IDEWorkspacechecks.plist` 파일은 작업 중인 Xcode workspace와 관련된 버전 확인 및 다른 일반적인 체크를 저장한다고 합니다.
    - 이 파일의 주요 목적으로는 여러 버전의 `Xcode`를 사용하여 프로젝트나 워크스페이스를 공유할 때 발생할 수 있는 문제를 방지하기 위함입니다.
    - 예를 들어, Kobe가 최신 버전의 `Xcode`에서 작업을하고 Moon이 이전 버전의 `Xcode`에서 작업을 하는 경우 발생할 수 있는 문제점을 알려줄 수 있습니다.

**✅ 따라서 이 파일을 git에 포함시키는 것이 좋다는 것이 저희의 의견입니다. 이를 통해 저희 둘이 동일한 경고나 메시지를 볼 수 있기 때문입니다.**
- 또한 이 파일의 내용은 `Xcode`가 자동으로 관리하기 때문에 저희가 수정할 필요도 없어서 git에 포함하는 것이 좋다고 생각합니다.

**혹시 이 부분에 대하여 다른 조언해주실 부분이 있으시다면 조언 부탁드리겠습니다 🙏**

---

## 열두 번째 코멘트
![](https://hackmd.io/_uploads/Bk9W4GmR3.png)

### 🙋‍♂️ 열두 번째 코멘트 답변
- IdentifierGenerator를 채택하는 타입이 UITableViewCell일 때만 사용할 수 있도록 제한했습니다.

---

## 열세 번째 코멘트
![](https://hackmd.io/_uploads/H1amNfQC2.png)

### 🙋‍♂️ 열두 번째 코멘트 답변

- 감사합니다 따봉

---

## 열네 번째 코멘트
![](https://hackmd.io/_uploads/S1XPNfmCh.png)

### 🙋‍♂️ 열네 번째 코멘트 답변
- 쌍따봉

---