나의 생각: It's all about mindset.
당장 빠르게 지식을 습득하는 것보다 조금 느리더라도 학습에 임하는 자세를 똑바로 잡고 올바른 방향으로 나아가는게 맞다고 생각한다. 당장 활용할 문법적 지식, 적용할 수 있는 프로토콜 같은 학습거리들을 미루게 되더라도 올바른
마인드셋
을 가지도록 나를 다잡자.
설명을 하고, 듣는 기회를 최대한으로 살려야 한다.
조금 늦게 가는 것은 괜찮다. 하지만 허투루 가는 것은 후에 큰 문제가 된다.
리뷰를 받는 것
도 중요하지만 그까지의 과정도 중요하다.
동료를 끌어주고 동료에게 끌려가는 경험을 할 수 있다.
해야 한다. 아직 출발점이다. 서로 기회를 잡아야 한다.
내 실력이 모자라서 방해되는 것 같다는 생각을 접어두자.
지금 옆에 있는 사람에게 최선을 다해야 한다.
특정 개념을 한 마디로 설명할 수 없으면 다시 공부해야 한다.
협동과 기본기
, 그것이 필요한 역량이다.TIL
은 동료들과 지식을 나누고 잘못된 점을 서로 확인해주기 위해 작성하는 것
이다.
회고
는 리더 및 매니저와 소통을 위한 창구
이다.
Data Type
In computer science and computer programming, a data type or simply type is an attribute of data which tells the compiler or interpreter how the programmer intends to use the data. - Wikipedia
데이터 타입은 프로그램 내에서 다루어지는 데이터의 종류
를 이르는 것이다. Swift에서는 표준 라이브러리를 통해 Int
, String
, Double
등과 같은 기본 데이터 타입부터 Array
, Dictionary
, Set
과 같은 Collection
, Tuple
, Enumeration (열거형)
과 같은 고급 데이터 타입까지 다양한 데이터 타입을 지원하며 프로그래머는 Structure (구조체)
, Class (클래스)
, Enumeration
을 통해 데이터와 기능을 구조화하여 사용자 정의 데이터 타입을 설계할 수 있다.
Note:
- Swift에는 구조체로 설계된 타입이 많으며 익스텐션으로 기능을 추가한 경우를 빈번하게 접할 수 있다. 표준 라이브러리에서 지원하여 흔히 사용하고 있는
Int
,String
과 같은 타입도 구조체로 정의되어 있다.Optional
타입은 열거형으로 정의되어 있는데, 이 특징으로 인해Optional
변수는switch
구문을 통해 값의 유무를 확인할 수 있다.
상기 언급한 바와 같이 사용자 정의 타입으로 데이터와 기능을 구조화할 수 있는데, 이 중 구조체와 클래스는 특히 인스턴스를 생성할 수 있는 설계도를 만들 수 있다. 인스턴스(instance)
란 일을 수행하는 실체, 형체를 이르는 것이다. 설계도는 말 그대로 실체화가 되기 전이므로 실체화가 될 때 다른 특성을 가질 수 있다.
아래 구조체를 통해 속성 (프로퍼티)
과 할 수 있는 일 (기능, 메서드)
을 설계해보자. Person
구조체는 String
타입의 이름과 Int
타입의 금전을 가질 수 있으며 심부름과 돈 버리기(...)를 할 수 있다.
Note: 접근제어
open
,public
,internal
,fileprivate
,private
접근 수준이 있으며, 기본 접근 수준은internal
이다.internal
접근 수준은import
단위인 프레임워크, 라이브러리와 같은모듈
단위까지 접근이 가능하다. 별도의 포스팅을 통해 깊게 알아보도록 하고, 여기에서는 아래 예시를 통해 용례를 알아보자.
struct Person {
var name: String
private var money: Int // private 접근수준으로 인해 해당 코드 블럭을 벗어나면 접근할 수 없다.
// private(set) 접근 수준을 지정하면 읽기 전용 (get)으로 접근이 가능하다.
func simburum(to: String, by: Person, item: String) {
print("\(name)이/가 \(to)로 \(by.name)가 시켜서 \(item)을 사러 심부름을 갑니다")
}
private mutating func dropMoney() {
money = 0
}
}
// instance - 설계도는 같아도 실체화할 때의 특성 (프로퍼티)은 다르게 지정할 수 있다.
/// jimmy -> Person의 인스턴스
var jimmy: Person = Person(name: "찌미", money: 0)
yagom.simburum(to: "점빵", by: jimmy, item: "88한갑")
jimmy.simburum(to: "이케아", by: yagom, item: "소파")
//yagom.money = 0 // 접근수준이 private으로 설정되어 있으므로 외부에서 접근이 불가능하다.
//yagom.dropMoney() // 마찬가지로 돈 버리기를 본인이 아닌 외부에서 시킬 수 있다면 큰 일일 것이다. 접근제어를 걸어주자.
JSON
데이터를 디코딩한 결과를 사용자 정의 데이터 타입으로 받을 수 없을까? 예를 들어, JSON
에 특정 쥬스를 만들기 위한 재료가 적혀있으면 쥬스를 만들기 위한 과일을 받아오는 과정에서 과일의 이름을 String
타입이 아니라 프로젝트에서 정의한 Fruit
타입으로 받을 수 없냐는 것이다. 3월 10일 TIL에서는 단순히 각 사용자 지정 타입에 Codable
프로토콜을 채택하면 컴파일이 된다는 내용을 기술하였지만, 오늘 빌드하여 실행해보니 JSONDecoder().decode()
메서드의 try?
구문에서 nil
을 반환하여 받아오는 데이터 타입을 Fruit
에서 String
으로 변경하여야 했다. 이렇게 하면 JSON
의 자료형을 맞춰주기 위해 열거형으로 정의한 Fruit
타입에 rawValue
를 String
으로 정의하여 일일히 rawValue
를 호출하여 JSON
에서 가져온 데이터와 비교해야하는 번거로움이 있다. 이 과정에서 가독성을 해칠 수 있다는 추가적인 단점도 있다.