Swift 26

[Swift] 모나드, 옵셔널 !

모나드에 대한 자세한 설명 [Swift] 모나드 : 컨텍스트, 함수객체, 모나드 💡함수형 프로그래밍에서의 모나드? - 순서가 있는 연산을 처리할 때 자주 활용하는 디자인 패턴 💡프로그래밍에서 모나드가 갖춰야 할 조건 1. 타입을 인자로 받는 타입(특정 타입의 값을 포 yexjinitlog.tistory.com 이전에 모나드에 대해 자세히 설명을 했었다! 근데 저건 그냥 책에 있는 내용을 정리한 것이고 정확히 옵셔널과 모나드와의 관계에 대해 쉽게 써놓지 못한 거 같아 다시 정리해보고자 한다. 모나드? - 함수와 더불어 순서가 있는 연산을 처리할 때 자주 활용되는 디자인 패턴 및 자료구조 - 함수객체 자체이며, 값이 있을 수도 있고 없을 수도 있는 상태를 포함한 개념 📌 값이 있을 수도 있고 없을 수도 있다..

Swift 2022.09.17

[Swift] Extension

Extension - 구조체, 열거형, 클래스, 프로토콜 타입에 기능을 추가할 수 있는 기능 - 기능 추가는 가능하나, 기존 기능들은 재정의는 불가능 📌 추가할 기능 정의 extension 확장할타입이름 { } 기존에 존재하는 타입이 추가적으로 다른 프로토콜들을 채택할 수 있게도 정의 가능 extension 확장할타입이름: 프로토콜1, 프로토콜2, 프로토콜3... { /* 프로토콜 요구사항 구현 */ } 🚀 Extension 구현하기 1) Int 타입에 두개의 연산 프로퍼티 추가 (isOdd, isEven) extension Int { var isEven: Bool { return self % 2 == 10 } var isOdd: Bool { return self % 2 == 1 } } print(1.i..

Swift 2022.08.24

[Swift] Protocol

Protocol? - 특정 역할을 수행하기 위한 method, property, initializer 등의 요구사항을 정의한다. 📌 Protocol 정의 protocol 프로토콜이름 { } 📌 Protocol 구현 protocol Talk { // 1) 프로퍼티 요구 var topic: String { get set } var language: String { get } // 2) 매서드 요구 func talk() // 3) 이니셜라이저 요구 init(topic: String, language: String) } → 프로퍼티 요구에서, 꼭 var 키워드로 선언되어야 하며 get은 읽기 전용, get과 set이 함께 쓰일 경우 읽기+쓰기 모두 가능한 프로퍼티 여야한다. 💡 Protocol 을 채택한다 ? ..

Swift 2022.08.24

[Swift] lazy?

저번 스터디에 참여하면서 스터디장님이 내주신 문제가 있었는데 7. 몬스터를 클래스로 추상화하려고 한다. MARK: 몬스터는 다음과 같은 속성들과 특징을 가지고 있다. - hp, mp, atk, level, damage - hp는 level * 50의 값을 가지고 있다. MARK: (Hint : lazy) - 각 속성들은 생성된 인스턴스에서 접근할 수 없다. - damage는 atk * level의 값을 반환하는 읽기 전용 변수이다. MARK: 몬스터는 다음과 같은 스킬을 가지고 있다. - attack(enemy: Monster) - enemy에게 damage를 입힌다. - checkMyHp() - 객체의 hp를 출력한다. - getDamage(damage: Int) - 받은 damage만큼 체력이 감소된..

Swift 2022.08.21

[Swift] Any / AnyObject

전 포스팅인 타입캐스팅에 이어서 Any / AnyObject 에 대한 포스팅을 해보겠다악 악 이전 포스팅 [Swift] 타입캐스팅 : is, as 💡 타입캐스팅? - 인스턴스의 타입을 확인하거나 인스턴스를 같은 계층(hierachy)에 있는 다른 superclass나 subclass로 취급하는 방법 is Checking Type 말 그대로, 특정 인스턴스의 타입을 확인할 수 있는 yexjinitlog.tistory.com 타입캐스팅은 일반적으로 상속관계에 있는 클래스끼리 가능하지만, Any / AnyObject 타입을 이용할 경우, 상속관계에 상관없이 타입캐스팅이 가능하다 1️⃣ Any - 모든 타입을 저장할 수 있게 해주는 타입 var anyThings: [Any] = [] anyThings.appen..

Swift 2022.08.14

[Swift] 타입캐스팅 : is, as

💡 타입캐스팅? - 인스턴스의 타입을 확인하거나 인스턴스를 같은 계층(hierachy)에 있는 다른 superclass나 subclass로 취급하는 방법 is Checking Type 말 그대로, 특정 인스턴스의 타입을 확인할 수 있는 키워드 런타임 시점에 실제 체크가 이뤄짐 반환 형은 Bool let exChar: Character = "A" print(exChar is Character)// true print(exChar is Int)// false → 이렇게 간단하게 타입을 확인할 수 있고 import Foundation class Human { } class Student: Human { } let yejin: Student = .init() print(yejin is Student)// tru..

Swift 2022.08.13

[Swift] 서브스크립트

💡서브스크립트(Subscript)? 클래스, 구조체, 열거형에서 컬렉션, 리스트, 시퀀스 등 타입의 요소에 접근하기 위한 문법 서브스크립트를 사용하면, 추가적인 메소드 없이 특정값을 가져오거나 할당할 수 있다. ➰ 서브스크립트 문법 subscript(index: Int) -> Int { get { // 적절한 Return Value } set(newValue) { // 적절한 Set Action } } 근데 그냥 아래처럼 subscript(index: Int) -> Int { // 적절한 반환 값 } get, set 아무것도 없이 설정할 경우, get으로 동작하게 되서 읽기 전용으로 선언된다. 🚫 get-only는 가능하지만, set-only는 불가능 예제코드로 서브스크립트의 getter와 setter의..

Swift 2022.08.13

[Swift] 상속

Swift 에서의 상속 프로토콜, 클래스에서 사용 가능 열거형, 구조체에서는 사용 불가 다중상속 지원 X 클래스에서의 상속에 대해 알아보자! 1️⃣ 상속 정의 class 이름 : 상속받을 클래스 이름 { // 구현 } 2️⃣ 메소드 키워드 정리 class Person{ var name: String = "" func selfIntroduce() { print("저는 \(name) 입니다.") } // final 키워드 : 재정의 방지 final func sayHello() { print("hello") } // 타입메서드 // 재정의 불가 타입 메서드 : static static func typeMethod() { print("type method - static") } // 재정의 가능 타입 메서드 :..

Swift 2022.08.02

[Swift] 백준 : 10814 (구조체)

구조체를 공부를 위해 좋은 문제라고 생각되는 10814! 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 여러 변수를 보고 구조체를 생각해 낸 후, 배열에 구조체를 저장한 후 특정 프로퍼티의 정렬순서에 맞게 출력하는게 핵심이라고 생각한다👀 순서를 정리해보자면, name, age를 담은 Member 구조체 생성 구조체를 저장하기 위한 배열 memArr 생성 입력받은 데이터를 Member 구조체의 프로퍼티에 맞게 지정후, memArr에 append! memArr을 age 오름차순으로 정렬 후, sortedArr에 저장 ..

Swift 2022.08.02

[Swift] zip(_:_:)

zip(_:_:) - 두개의 시퀀스를 가지고 하나의 시퀀스 쌍을 만들어냄 let words = ["one", "two", "three", "four"] let numbers = 1...4 for (word, number) in zip(words, numbers) { print("\(word): \(number)") } // Prints "one: 1" // Prints "two: 2 // Prints "three: 3" // Prints "four: 4" 배열의 짝을 맞추는 데에 사용될 수 있음 예를 들어 arr1 = [[3, 4], [5, 6]] arr2 = [[3, 4], [5, 6]] arr3 = [[6, 8], [10, 12]] 이렇게 arr1, arr2의 각 원소를 더해 arr3를 만들어보자 i..

Swift 2022.07.27