swift 기본 문법 중 기존에 알고 있던 것을 제외하고 중요하다고 생각되는 것들 위주로 정리하고 간략하게 핵심만 간추려 보고자 한다.
Property - Stored Property(상수 선언, 변수 선언), Computed Property(var를 이용한 선언)
다양한 데이터 묶음 형식 - Tuple(튜플)은 관련된 값을 단순히 묶은 묶음에 가깝다. Any는 배열로 있으며 어떤 데이터 타입도 넣을 수 있지만사용할 때 꼭 형 변환을 해줘야 한다
Enum(열거형) - 관련된 값으로 이뤄진 그룹을 같은 타입으로 선언해서 type-safety를 보장
고차함수
변형시키고 싶은 데이터.map {}
let 변수(새로운 컨테이너) = 기존 컨테이너.filter { 만족해야하는 조건 }
옵셔널
값이 없을 수도 있는 상황(nil)에서 옵셔널을 사용하며 물음표로 나타낸다. 옵셔널은 박스와 같다. 옵셔널로 포장한(wrapping)한 값을 언래핑(unwrapping)하여 해당값에 접근할 수 있다. 하지만 또 박스를 열어보면 값이 없을 수도 있는 것이다!(nil의 경우)
변수에 nil을 할당하면 값이 없는 상태의 옵셔널 프로퍼티를 만들 수 있다
옵셔널 바인딩은 옵셔널 값이 nil인지 검사한 후 값이 존재하는 경우에 그 값을 다른 변수에 대입시켜서 바인딩하는 것이다/강제 언래핑보다는 빈 값을 체크하는 것이 훨씬 안전하다.(강제 언래핑의 경우 어플이 강제종류 될 가능성을 높인다)
-> 그렇지만 꼭 강제 언래핑이 나쁜 것만은 아니라는 튜터님도 계셨다. 필요에 의해 사용될 수 있기에 잘 생각해서 사용하자.
옵셔널 체이닝은 옵셔널을 연쇄적으로 사용하는 것으로 '.'을 통해 내부 프로퍼티나 메서드에 옵셔널 값이 있는 경우 옵셔널 체이닝을 이용해 연속적으로 접근한다.
객체 지향 프로그래밍의 특성
객체간의 관계를 설계하는 프로그래밍 방법론으로 각 객체들이 메세지를 주고 받으며 데이터를 처리할 수 있다.
클래스는 속성(property)과 행위(method)를 정의한 것으로, class 자체가 사용자가 정의한 데이터형(data type)이 된다고 할 수 있다. 클래스는 Initializer를 통해 초기값을 설정할 수 있는데 property에 기본 값이 없는 경우 이니셜라이저를 필수로 구현해야 한다.
클래스는 상속이 가능하다.(method, property 등등) 부모 클래스를 superclass라고 부르고 부모클래스를 상속한 클래스는 subclass라고 부른다. 부모 클래스의 요소에 접근하기 위해 'super'라는 키워드를 사용해서 접근가능
다른 클래스의 코드를 재사용할 목적으로 상속을 사용하는 경우, 서브 클래스는 슈퍼 클래스의 특성 외에 자기 자신의 프로퍼티, 메서드 등을 추가할 수 있다.
서브 클래스에서 overriding 키워드를 사용해 슈퍼 클래스에서 상속받은 것을 재정의 할 수 있다. 이를 막고 싶다면 부모 클래스에서 final로 method를 정의하면 된다.