들어가기에 앞서... Swift는 객체지향 프로그래밍 언어이자, 프로토콜지향 프로그래밍언어이며, 함수형프로그래밍 언어다. 클래스와 구조체 단원을 정리하며 객체지향임을 알 수 있었고, 프로토콜 단원을 공부하며, 프로토콜 지향 언어인 것도 알 수 있었다. 이제는 클로저(Closure)를 공부하며 Swift가 함수형 프로그래밍 언어임에 대해 이해해볼 차례다. 물론 초반부에서 함수에 대한 설명을 했지만, 클로저를 알아야 함수형 프로그래밍 패러다임 스타일을 더 명확하게 이해할 수 있다. 개인적으로 Swift를 공부하면서 가장 낯설고, 어려웠던 부분이다. 기본 클로저 표기 문법들은 연습하면 금방 익숙해지지만, 메모리관리와 참조에 관한 부분이 섞여있어 한번에 이해하기엔 무리가 있는 개념이다. 하지만 너무나 중요한 부..
작년에 배운 경험이 있으나, 깊이있게 해보지 않고 겉핥기식으로 각 자료구조의 코드 구현 - 백준으로 PS만 대강해보며 넘겼었다. 곧 개강후 전공으로 C로하는 자료구조가 있기에 이번 기회에 윤성우의 열혈 자료구조 책을 참조해 제대로 다져보고자 한다. (앞으로의 그림 자료들 역시 이 책을 참조하였다) https://search.shopping.naver.com/book/catalog/32441031922 윤성우의 열혈 자료구조 : 네이버 도서 네이버 도서 상세정보를 제공합니다. search.shopping.naver.com 1. 알고리즘 성능 평가요소 1. 시간 복잡도(Time Complexity): 얼마나 빠르게 결과를 출력 하는가?, 연산횟수는 얼마나 되는가? 2. 공간 복잡도(Space Complexi..
INDEX 1. 프로토콜의 확장(Extension) 2. 프로토콜 확장의 제한 3.선택적인 요구사항(Optional Protocols Requirements) 4. 프로토콜 지향 프로그래밍이란? 5. 마무리 1. 프로토콜의 확장(Extension) 프로토콜의 확장(Protocol Extension) 프로토콜의 확장에서는, 프로토콜의 선언에서 요구하는 필수요구 사항 메서드의 기본적인 디폴트 구현 제공 (귀찮은 방식으로) 프로토콜을 채택한 모든 타입에서, 동일 구현을 계속적으로 반복해야하는 불편함을 덜기 위해 "프로토콜 확장"을 제공해서 메서드의 디폴트 구현을 제공함 (코드의 중복을 피한다.) protocol Remote { func turnOn() func turnOff() } // 채택 ===> 실제구현..
INDEX 1. 프로토콜(Protocol)이란? 2. 프로토콜의 요구사항(Protocol Requirements) 3. 타입으로서의 프로토콜(Protocols as Types) 4. 기타 프로토콜 문법들 5. 마무리 1. 프로토콜(Protocol)이란? 프로토콜 (Protocols) 클래스의 상속의 단점을 보완하는 자격증의 개념 어떤 클래스, 구조체, 열거형에서나 채택가능하며 최소한의 요구사항만을 구현하면 해당 프로토콜의 기능을 사용가능 // 정의 protocol SomeProtocol { // 요구사항을 정의 (자격증의 필수 능력만 정의) func playPiano() //내부구현은 하지 않는다! } // 채택 및 구현 // 구조체에서 채택 struct MyStruct: SomeProtocol { //..
INDEX 1. 확장(Extension)이란? 2. 확장 가능 멤버 (6가지) 3. UIKit에서의 확장(Extension) 4. 마무리 1. 확장(Extension)이란? 상속(Inheritence) VS 확장(Extension) (상속 - 수직적 개념) 성격이 비슷한 "타입을 새로"만들어, 데이터를 추가하고, 기능(메서드)을 변형시켜 사용하려는 것 (확장 - 수평적 개념): "현재 존재하는 타입"에 기능(메서드)을 추가하여 사용하려는 것 확장이란 기존타입에 기능을 추가 하는 것으로 1)클래스, 2)구조체, 3)열거형 (그리고 프로토콜) 타입에 확장(새로운 기능 추가) 가능 단, 새 기능을 추가 할 수는 있지만 기존 기능(메서드)의 재정의(overriding) 불가. 기존 타입의 소스코드에 접근 권한이..
INDEX 1. Any 2. AnyObject 3. 옵셔널 값의 Any 4. 다형성(polymorphism)을 통한 타입캐스팅 복습 5. 마무리 이번 포스팅은 쉬어가는 느낌? 짧고 간단하다. Any는 원래 익숙하며, AnyObject는 class에만 한정된 타입으로 타입캐스팅만 알고있다면 금방 이해할 수 있다. 1. Any Any타입은 기본타입(Int, string, Double...), 클래스, 구조체, 열거형, 함수, 옵셔널타입까지 포함하여 어떤 타입의 인스턴스도 표현 가능한 타입을 뜻한다. var some: Any = "Swift" some = 10 some = 3.2 some = "String!!" 단점은 저장된 타입의 메모리구조를 알 수 없기에, 항상 타입캐스팅을 해서 사용해야한다. Any타입의..
INDEX 1. 타입 캐스팅(Type Casting) 2. is연산자 3. ⭐️ as연산자⭐️ 4. Bridging 5. 마무리 1. 타입 캐스팅(Type Casting) 타입캐스팅(Type Casting)이란 인스턴스의 타입을 확인(is)하거나, 해당 인스턴스를 해당 인스턴스의 클래스내의 상위클래스나, 하위클래스로 취급(as?)받을 수 있는 방법을 의미한다. 타입캐스팅은 실제로 인스턴스를 수정하거나 내부 속성값을 변경하는게 아니라(인스턴스 내부 속성 자체는 불변) 컴퓨터에게 어떤 타입으로 인스턴스에게 접근할지를 명령하는 것이다. => (as연산자까지 보면 무슨말인지 알 것이다.) Swift에서 타입캐스팅은 is연산자와 as연산자로 구현된다. is연산자를 통해 인스턴스의 타입을 확인하고, as연산자를 통..
INDEX 1. 필수 생성자(required Initializers) 2. 실패가능 생성자(Failable Initializer) 3. 소멸자(Deinitializer) 4. 마무리 마지막 이니셜라이저들. 어려운 개념이 아니며, 지정 생성자(Designated Initializers), 편의생성자(Convenience Initializer)가 코어 개념이었기에, 2부때보다는 가볍게 다룬다. (이니셜라이저를 줄여서 생성자로 불렀습니다) 1. 필수 생성자(required Initializers) 필수생성자(required Initializers)란 class앞에 required 키워드를 붙여 만들며, 필수생성자를 선언한 클래스를 상속받는 서브클래스는 무조건 상위의 필수 생성자를 구현해줘야 한다. 상속을 받을..