수행 내용

  • 활동학습
    • 캠프에 임하는 자세에 대하여
    • Type / Property / Method
  • 쥬스메이커 프로젝트 Step 1 PR

학습 내용

캠프에 임하는 자세에 대하여

나의 생각: It's all about mindset.

당장 빠르게 지식을 습득하는 것보다 조금 느리더라도 학습에 임하는 자세를 똑바로 잡고 올바른 방향으로 나아가는게 맞다고 생각한다. 당장 활용할 문법적 지식, 적용할 수 있는 프로토콜 같은 학습거리들을 미루게 되더라도 올바른 마인드셋을 가지도록 나를 다잡자.

오늘의 쓴소리 Pick

  • 캠프 중 좁게는 모둠원과, 넓게는 캠퍼 전원과 활동을 함께하며 설명을 하고, 듣는 기회를 최대한으로 살려야 한다.
  • 조금 늦게 가는 것은 괜찮다. 하지만 허투루 가는 것은 후에 큰 문제가 된다.
    • 빨리 끝내고 나아가려고 하면 잘 할 것 같지만 좋은 결과를 내기 힘들다. 오히려 더 늦게 진행하게 되는 결과를 만들 것이다.
    • PR을 못 보내서 자괴감 든다는 이야기를 할 필요가 없다. 더 많이 배우고 있는 것이다. 오히려 아무렇게나 작성한 코드를 제출하는 것보다 훨씬 낫다 (왜 적은 Step 수와 많지 않은 기능 명세로 2주 프로젝트를 진행하는지 생각해볼 것. 2주 간 모둠원과 같은 수준의 문법적 지식을 가질 수 있게끔 도움 받고, 도와주자).
    • 리뷰어의 리뷰를 받는 것도 중요하지만 그까지의 과정도 중요하다.
  • 동료를 끌어주고 동료에게 끌려가는 경험을 할 수 있다. 해야 한다. 아직 출발점이다. 서로 기회를 잡아야 한다.
    • 내 실력이 모자라서 방해되는 것 같다는 생각을 접어두자.
    • 이직할 때도 레퍼런스 체크를 꼭 한다. 나를 위해서라도 동료를 도와주자. 지금 옆에 있는 사람에게 최선을 다해야 한다.
  • 특정 개념을 한 마디로 설명할 수 없으면 다시 공부해야 한다.
  • 협동과 기본기, 그것이 필요한 역량이다.

TIL과 회고

TIL동료들과 지식을 나누고 잘못된 점을 서로 확인해주기 위해 작성하는 것이다.
회고리더 및 매니저와 소통을 위한 창구이다.

Type / Property / Method

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 데이터를 디코딩한 결과를 사용자 정의 데이터 타입으로 받을 수 없을까? 예를 들어, JSON에 특정 쥬스를 만들기 위한 재료가 적혀있으면 쥬스를 만들기 위한 과일을 받아오는 과정에서 과일의 이름을 String 타입이 아니라 프로젝트에서 정의한 Fruit 타입으로 받을 수 없냐는 것이다. 3월 10일 TIL에서는 단순히 각 사용자 지정 타입에 Codable 프로토콜을 채택하면 컴파일이 된다는 내용을 기술하였지만, 오늘 빌드하여 실행해보니 JSONDecoder().decode() 메서드의 try? 구문에서 nil을 반환하여 받아오는 데이터 타입을 Fruit에서 String으로 변경하여야 했다. 이렇게 하면 JSON의 자료형을 맞춰주기 위해 열거형으로 정의한 Fruit 타입에 rawValueString으로 정의하여 일일히 rawValue를 호출하여 JSON에서 가져온 데이터와 비교해야하는 번거로움이 있다. 이 과정에서 가독성을 해칠 수 있다는 추가적인 단점도 있다.

해결 방법

  • 아직까지.. 없다..!

기타

  • 강경에게 항상 고맙다 말하지만 정말 정말 고맙다.
  • 카훗 4등했다 헤헿 그런데 배경음악이 잊혀지지가 않는다..
profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글