일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- property wrapper
- WWDC16
- ios
- SWiFT
- CoreLocation
- firebase
- Choosing Between Structures and Classes
- 트레일링 클로저
- DispatchQueue
- 원격 푸시
- IBOutletCollection
- OperationQueue
- RunLoop
- for-in
- userdefaults
- 후행 클로저
- AppTransportSecurity
- weak
- 연산 프로퍼티
- Understanding Swift Performance
- 진입점
- entrypoint
- uikit
- UIButton
- Remot Push
- tableViewCell
- viewcontroller
- 동시성프로그래밍
- TableView
- IBOutlet
- Today
- Total
목록분류 전체보기 (72)
iOS 공부하는 감자
객체지향 프로그래밍 프로그래밍에는 코드를 더 효율적으로 만들고 작성하기 위한 다양한 패러다임이 존재한다. 절차지향, 객체지향, 함수형 등이 있는데, Swift에서는 객체지향 프로그래밍과 함수형 프로그래밍 패러다임을 채택하여 사용한다. Swift에서는 객체라는 표현을 실제로 잘 사용하진 않는다. (인스턴스라고 부름: 이유는 후술) 객체지향 프로그래밍에서는 각 객체가 서로 메시지를 주고 받으며 데이터를 처리한다. 즉, 프로그램 실행의 주된 요소가 객체이다. 객체 객체지향 프로그래밍에서 객체는 상태와 상태(프로퍼티)와 행위(메서드)로 이루어진 것을 말한다. 즉, 관련있는 변수나 상수와 메서드를 모아서 한번에 관리하기 위해 만들어진다. Swift에서 객체는 클래스의 인스턴스를 의미한다. 객체 vs 인스턴스 객체..
타입캐스팅 인스턴스의 타입을 확인하거나, 해당 인스턴스의 타입을 부모 클래스나 자식 클래스로 취급하는 방법이다. 타입캐스팅을 사용하여 인스턴스의 타입이 프로토콜에 적합한지 여부도 확인 가능하다. is, as 키워드를 사용한다. 클래스의 인스턴스에서 자주 사용한다. 딕셔너리나 Any, AnyObject같은 타입을 많이 사용하면 유용하다. is 인스턴스 is 타입이름 // -> bool 인스턴스의 타입을 확인하는 연산자로, 런타임 시점에 체크가 이루어진다. 확인할 인스턴스가 타입의 서브 클래스(자식 클래스)를 사용한 인스턴스여도 true를 반환한다. class Person { let name: String = "" } class Student: Person { var age: Int = 25 } let do..
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. "지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다. 암호화된 배열은 지도의 각 가로..
옵셔널 타입 이름 뒤에 ? 키워드를 붙여서 표현한다. 변수나 상수의 값이 nil일 수도 있다는 것을 의미한다. (값이 있을수도 없을수도 있다는 뜻) 값이 존재하지 않을 경우에 발생 가능한 오류(런타임오류)를 방지하기 위해 사용된다. (불확실성을 방지) 옵셔널을 사용하는 이유 함수에 전달되는 매개변수 값이 잘못된 경우, 제대로 처리되지 못했음을 nil 반환으로 표현 함수의 매개변수가 필수적이지 않을 때 해당 매개변수의 타입을 옵셔널로 정의 nil 가능성을 문서화하지 않고, 코드만으로 표현 가능 (ex-this value can be nil 같은 주석이 필요하지 않음) 예외 상황을 최소화하는 안전한 코딩이 가능함 옵셔널 정의 옵셔널은 열거형으로 정의되어 있다. public enum Optional : Exp..
프로토콜 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 프로토콜의 요구사항을 구현할 수 있다. 특정 프로토콜의 요구사항을 모두 따르는 타입은 그 '프로토콜을 준수한다(Conform)고 표현한다. 프로토콜을 준수하려면 프로토콜이 제시하는 기능을 모두 구현해야 한다. protocol 프로토콜 이름 { 기능 정의 } // 프로토콜 작성 예시 protocol Talkable { // 프로퍼티 요구 // 프로퍼티 요구는 항상 var 키워드를 사용 // get만 사용: 읽기만 가능해도 상관없다. // get, set 모두 명시 : 읽기와 쓰기 모두 가능한 프로퍼티로 구현해야 한다. var topic: String ..
문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 a b result 5 24 "TUE" 내 풀이 (2.xx)ms func solution(_ a:Int, _ b:Int) -> String { let dateForm..
상속 상속은 클래스에서만 사용이 가능하다. 단일 상속만 허용한다. (다중 상속 불가) Super Class(부모 클래스) : 상속하는 클래스 Sub Class (자식 클래스) : 상속받는 클래스 클래스는 부모 클래스로부터 물려받은 프로퍼티, 메서드에 접근할 수 있고, 새롭게 재정의도 가능하다. 연산 프로퍼티를 정의한 클래스에서는 연산 프로퍼티에 프로퍼티 감시자를 구현할 수 없지만, 자식 클래스에서는 부모 클래스에서 정의한 연산, 저장 프로퍼티에 프로퍼티 감시자를 구현할 수 있다. 기반 클래스(Base Class) 아무 클래스도 상속받지 않는 클래스 class Person { let name: String? var age: Int? } 서브 클래싱(subclassing) 기반 클래스를 통해 새로운 클래스를..
문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를..
메서드 함수 vs 메서드 함수 : 모듈 전체에서 전역적으로 사용하는 함수 메서드 : 클래스, 구조체, 열거형 등 특정 타입과 연관되어 사용되는 함수 메서드의 종류 인스턴스 메서드 : 인스턴스와 연관된 메서드 / 인스턴스가 생성되어야 호출이 가능하다. 타입 메서드 : 타입과 연관된 메서드 / 인스턴스 생성 유무와 관계없이 타입 자체를 사용하여 호출 가능하다. 인스턴스 메서드 타입 내부에서 다른 수식어 없이 func로 시작하는 메서드 인스턴스를 생성 후 .(dot)문법을 통해 호출 가능하다. 인스턴스 메서드에서 타입 이름에 .(dot)문법을 사용하면 타입 프로퍼티, 타입 메서드에 접근이 가능하다. struct Person { // 인스턴스 메서드 func sayHello() { print("Hello!!")..
모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성..