일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- weak
- 연산자
- 백준
- View
- 차이
- RxSwift
- 스위프트
- 리스트뷰
- 안드로이드
- rx
- observable
- 생명주기
- 프래그먼트
- 알고리즘
- 테스크
- Subject
- 해시
- Self
- 클로저
- 프로그래머스
- async
- Swift
- ios
- 자바
- 이스케이핑
- 풀이
- concurrency
- 구조체
- 옵셔널
- 서브스크립트
- Today
- Total
목록전체 글 (177)
study record
옵셔널 체이닝 옵셔널 체이닝은 옵셔널에 속해있는 nil일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정이다. 옵셔널을 반복 사용하여 옵셔널이 자전거 체인처럼 서로 꼬리를 물고 있는 모양이기 때문에 옵셔널 체이닝이라고 부른다. 중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 결과적으로 nil을 반환한다. 옵셔널 체이닝은 프로퍼티나 메서드, 서브스크립트를 호출하고 싶은 옵셔널 변수나 상수 뒤에 물음표를 붙여 표현한다. 옵셔널이 nil이 아니라면 정상적으로 호출될 것이고, nil이라면 nil을 반환할 것이다. let yagom: Person = Person(name: "yagom") if let roomNumber: Int = yagom.address?.b..
접근제어 접근제어는 코드끼리 상호작용을 할 때 파일 간, 모듈 간에 접근을 제한할 수 있는 기능이다. 접근제어를 통해 코드의 상세 구현은 숨기고, 허용된 기능만 사용하는 인터페이스를 제공할 수 있다. 접근제어의 필요성 객체지향 프로그래밍 패러다임에서 캡슐화, 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안 되는 코드가 있기 때문이다. 불필요한 접근으로 의도치 않은 결과를 초래하거나 꼭 필요한 부분만 제공해야 하는데 전체 코드가 노출될 가능성이 있을 때 접근제어를 이용한다. 모듈과 소스파일 스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계되었다. 모듈은 배포할 코드의 묶음 단위이다. 하나의 프레임워크나 라이브러리, 애플리케이션이 모듈 단위가 될 수 있다. import 키워드를 통해 불러온다. 소스..
클로저 Closure 클로저를 잘 이해해야 스위프트의 함수형 프로그래밍 패러다임 스타일을 좀 더 명확하게 이해할 수 있다. 스위프트의 클로저는 다른 프로그래밍 언어의 람다와 유사하다. 클로저는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다. 클로저는 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있다. 이를 변수나 상수의 클로징이라고 하며 여기서 클로저가 착안되었다. 클로저의 몇 가지 모양 중 하나가 함수이다. 클로저는 세가지 형태가 있다. 이름이 있으면서 어떤 값도 획득하지 않는 전역함수의 형태 이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수의 형태 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성한 형태 클로저의 다양한 표현방법 클로..
인스턴스 생성 초기화 과정은 새로운 인스턴스를 사용하기 위하여 저장 프로퍼티의 초깃값을 설정하는 등의 일을 한다. 이니셜라이저를 정의하면 초기화 과정을 직접 구현할 수 있다. 이렇게 구현된 이니셜라이저는 새로운 인스턴스를 생성할 수 있는 특별한 메서드가 된다. 스위프트의 이니셜라이저는 반환 값이 없다. 그저 초기화하는 용도이다. 이니셜라이저는 func 키워드를 사용하지 않고 오로지 init 키워드를 사용하여 이니셜라이저 메서드임을 표현한다. init 메서드는 클래스, 구조체, 열거형 등의 구현부에 위치한다. 다만 클래스의 지정 이니셜라이저는 익스텐션에서 구현해줄 수 없다. class SomeClass { init() { // 초기화할 때 필요한 코드 } } struct SomeStruct { init()..