iOS
-
오늘 알아볼것은 옵셔널 타입입니다. 옵셔널(Optional)이란? 래핑된 값이나 값이 없다는것을 알려주는 타입이라고 나와있습니다. 이게 무슨 쓸모가 있나라는 생각을 하실수도 있는데요왜 옵셔널이 생기게 되었는지 알아가봅시다 옵셔널의 탄생배경 프로그램이 실행될때 운영체제가우리가 작성한 코드를 바탕으로 메모리에 공간을 할당합니다. var x: Int = 1var y: Intprint(x)print(y) 위와같은 코드가 포함된 프로그램을 실행한다면y에 대한값에 접근할때 에러가 발생하여프로그램이 죽게됩니다. 왜냐하면 y에 값이 없기 때문이죠. 이와같은 상황은 언어에 상관없이 공통적으로 발생하는 문제입니다. 프로그램이 작을때는 발견이쉬워서 수정이 가능하지만 프로그램이 점점 거대해져코드가 점점 많아진다면 프로그..
[Swift] Optional(옵셔널)오늘 알아볼것은 옵셔널 타입입니다. 옵셔널(Optional)이란? 래핑된 값이나 값이 없다는것을 알려주는 타입이라고 나와있습니다. 이게 무슨 쓸모가 있나라는 생각을 하실수도 있는데요왜 옵셔널이 생기게 되었는지 알아가봅시다 옵셔널의 탄생배경 프로그램이 실행될때 운영체제가우리가 작성한 코드를 바탕으로 메모리에 공간을 할당합니다. var x: Int = 1var y: Intprint(x)print(y) 위와같은 코드가 포함된 프로그램을 실행한다면y에 대한값에 접근할때 에러가 발생하여프로그램이 죽게됩니다. 왜냐하면 y에 값이 없기 때문이죠. 이와같은 상황은 언어에 상관없이 공통적으로 발생하는 문제입니다. 프로그램이 작을때는 발견이쉬워서 수정이 가능하지만 프로그램이 점점 거대해져코드가 점점 많아진다면 프로그..
2023.06.11 -
오늘 알아볼것은 제네릭(Generics) 문법이다. 제네릭(Generics)이란 ? 공식문서를 보면 다양한 타입에 실행되는 코드를 작성하고 해당 유형의 요구사항을 지정한다고 나와있다. 왜 제네릭 문법이 필요한지 알아보자. 제네릭의 필요성 Int타입의 배열을 출력해주는 함수가 있다. 해당함수는 Int 타입의 배열을 출력가능하지만String 타입의 배열을 출력이 불가하다 String 배열을 출력하기 위해선 매개변수의 타입을 String타입으로 변경한 함수가 필요하다. 하지만 다른 타입의 변수가 생긴다면 또 다시해당 타입에 맞는 함수를 다시 작성해주어야 한다 이때 드는 생각은타입만 다르고 구현내용은 완전히 동일한데굳이 코드를 반복할 필요가 있을까타입을 매개변수로 받아서 타입만 변경하면 되지 않을까..
[Swift] Generics(제네릭)오늘 알아볼것은 제네릭(Generics) 문법이다. 제네릭(Generics)이란 ? 공식문서를 보면 다양한 타입에 실행되는 코드를 작성하고 해당 유형의 요구사항을 지정한다고 나와있다. 왜 제네릭 문법이 필요한지 알아보자. 제네릭의 필요성 Int타입의 배열을 출력해주는 함수가 있다. 해당함수는 Int 타입의 배열을 출력가능하지만String 타입의 배열을 출력이 불가하다 String 배열을 출력하기 위해선 매개변수의 타입을 String타입으로 변경한 함수가 필요하다. 하지만 다른 타입의 변수가 생긴다면 또 다시해당 타입에 맞는 함수를 다시 작성해주어야 한다 이때 드는 생각은타입만 다르고 구현내용은 완전히 동일한데굳이 코드를 반복할 필요가 있을까타입을 매개변수로 받아서 타입만 변경하면 되지 않을까..
2023.06.10 -
연관값(Associated Value) 열거형의 원시값의 단점은모든 case가 동일한 타입의 원시값을 가져야 하고case 별로 미리 지정된 하나의 값만을 가질 수 있다는 것입니다. 이게 왜 단점이라고 생각하시는 분들을 위해 애플제품으로 예시를 보여드리겠습니다. enum AppleProduct: String { case iPad = "Pro, 256GB" case iPhone = "Pro, 128GB" case mac = "Pro, 512GB"} 애플 제품들은 수많은 라인업이 있습니다.하지만 원시값으로 String을 채택하고 있기 때문에 하나의 제품의 정보만 나열 할 수 있죠그럼 새로운 제품이 나올떄마다 case를 추가해야할까요 ?? enum AppleProduct: String { ..
[Swift] 열거형의 연관값 (Associated Value) - Enum 3/3연관값(Associated Value) 열거형의 원시값의 단점은모든 case가 동일한 타입의 원시값을 가져야 하고case 별로 미리 지정된 하나의 값만을 가질 수 있다는 것입니다. 이게 왜 단점이라고 생각하시는 분들을 위해 애플제품으로 예시를 보여드리겠습니다. enum AppleProduct: String { case iPad = "Pro, 256GB" case iPhone = "Pro, 128GB" case mac = "Pro, 512GB"} 애플 제품들은 수많은 라인업이 있습니다.하지만 원시값으로 String을 채택하고 있기 때문에 하나의 제품의 정보만 나열 할 수 있죠그럼 새로운 제품이 나올떄마다 case를 추가해야할까요 ?? enum AppleProduct: String { ..
2023.06.09 -
원시값(Raw Value) 열거형은 원시값을 가질 수 있는데열거형을 선언할때 원시값으로 사용할 타입을 채택해주고각 case에 알맞은 원시값을 할당해주면 됩니다.case의 .rawValue를 통해 원시값을 사용할 수 있습니다. enum Weekday: String { case 월요일 = "월요일" case 화요일 = "화요일" case 수요일 = "수요일" case 목요일 = "목요일" case 금요일 = "금요일" case 토요일 = "토요일" case 일요일 = "일요일"}// 금요일Weekday.금요일// 원시값 "금요일"Weekday.금요일.rawValue// 둘은 다른 타입의 값이다. Swift에선 원시값과 관련하여 여러가지 편의성을 제공하는데원시값으로 사용할..
[Swift] 열거형의 원시값 (Raw Value) - Enum 2/3원시값(Raw Value) 열거형은 원시값을 가질 수 있는데열거형을 선언할때 원시값으로 사용할 타입을 채택해주고각 case에 알맞은 원시값을 할당해주면 됩니다.case의 .rawValue를 통해 원시값을 사용할 수 있습니다. enum Weekday: String { case 월요일 = "월요일" case 화요일 = "화요일" case 수요일 = "수요일" case 목요일 = "목요일" case 금요일 = "금요일" case 토요일 = "토요일" case 일요일 = "일요일"}// 금요일Weekday.금요일// 원시값 "금요일"Weekday.금요일.rawValue// 둘은 다른 타입의 값이다. Swift에선 원시값과 관련하여 여러가지 편의성을 제공하는데원시값으로 사용할..
2023.06.09 -
오늘 공부 해볼것은 열거형입니다.Enumeration 이라고 하는데 Swift에서 자주 쓰이는 문법입니다. 열거형이란 ? The Swift Programming Language에서 정의된 열거형입니다.좀 더 쉽게 설명하자면 타입 자체를 한정된 케이스로 정의 할 수 있는 타입입니다.열거형은 Swift에서 1급 객체로 취급됩니다. 열거형을 사용할 상황 ? 위의 정의만 읽어보면 언제 열거형을 써야할지 감이 잘 안잡힐 수도있습니다. 예를 들어 요일이라는 변수가 있다고 가정해본다면요일 변수에는 올 수 있는 값은 "월,화,수,목,금,토,일" 이 7가지 중 한가지 일것입니다. var 요일: String = "월, 화, 수, 목, 금, 토, 일" 중 한가지 현재 요일은 String 타입의 변수입니다.값을 입력받을때..
[Swift] 열거형(Enumeration) - Enum 1/3오늘 공부 해볼것은 열거형입니다.Enumeration 이라고 하는데 Swift에서 자주 쓰이는 문법입니다. 열거형이란 ? The Swift Programming Language에서 정의된 열거형입니다.좀 더 쉽게 설명하자면 타입 자체를 한정된 케이스로 정의 할 수 있는 타입입니다.열거형은 Swift에서 1급 객체로 취급됩니다. 열거형을 사용할 상황 ? 위의 정의만 읽어보면 언제 열거형을 써야할지 감이 잘 안잡힐 수도있습니다. 예를 들어 요일이라는 변수가 있다고 가정해본다면요일 변수에는 올 수 있는 값은 "월,화,수,목,금,토,일" 이 7가지 중 한가지 일것입니다. var 요일: String = "월, 화, 수, 목, 금, 토, 일" 중 한가지 현재 요일은 String 타입의 변수입니다.값을 입력받을때..
2023.06.03 -
의존성 역전이 왜 필요한지 알아봅시다. 먼저 의존성 주입이 무엇인지를 간단히 알아본다면의존성 : 서로 다른 객체 사이에 의존관계가 존재주입 : 외부에서 객체 또는 데이터를 생성해서 넣는 것 import UIKitclass Person { var name: String init(name: String) { self.name = name }}// Person에 name "바지" 주입let 사람 = Person(name: "바지") Person(name: "바지") 이부분이 바로 의존성을 주입해주는 것입니다. 외부에서 name에 값을 주고 있으니까요. 그럼 이제 의존성주입이 무엇인지 간단히 알아봤으니 왜 의존성 역전이 필요한지 알아보겠습니다. 아래와 같은 코드가 있다고..
[iOS] DI(Dependency Injection) 의존성 역전의존성 역전이 왜 필요한지 알아봅시다. 먼저 의존성 주입이 무엇인지를 간단히 알아본다면의존성 : 서로 다른 객체 사이에 의존관계가 존재주입 : 외부에서 객체 또는 데이터를 생성해서 넣는 것 import UIKitclass Person { var name: String init(name: String) { self.name = name }}// Person에 name "바지" 주입let 사람 = Person(name: "바지") Person(name: "바지") 이부분이 바로 의존성을 주입해주는 것입니다. 외부에서 name에 값을 주고 있으니까요. 그럼 이제 의존성주입이 무엇인지 간단히 알아봤으니 왜 의존성 역전이 필요한지 알아보겠습니다. 아래와 같은 코드가 있다고..
2023.05.27 -
오늘 알아볼 것은 Delegate 패턴입니다. 알고보면 굉장히 쉽고 우리가 일상생활에서 많이 발견할 수 있는 패턴입니다.Delegate의 사전적 정의는 위임자라고 나옵니다. 어려운 애기는 넘어가고 쉽게 쉽게 가봅시당 일상생활을 예시로 먼저 설명드려볼게요. 저는 교촌치킨 매장에가서 레드콤보를 먹으려고 합니다.여기서 제가 레드콤보를 먹기위해 해야하는 일은 무엇일까요 ? 저는 그냥 매장에가서 직원분께 메뉴를 말하고 그에 맞는 금액을 결제하면 끝입니다. 그러면 레드콤보를 직원분이 가져다 주시죠.이것이 바로 델리게이트 패턴입니다. 엥 이게 왜 델리게이트 패턴이야? 라고 하시는분들을 위해 조금 더 설명해드리자면 우리는 레드콤보를 주문하여 레드콤보가 나온것이지만 사실 우리가 주문을하고 레드콤보가 나오기까지 아주 많..
[iOS] Delegate 패턴 이해하기 및 Protocol 프로그래밍을 지향하는 이유오늘 알아볼 것은 Delegate 패턴입니다. 알고보면 굉장히 쉽고 우리가 일상생활에서 많이 발견할 수 있는 패턴입니다.Delegate의 사전적 정의는 위임자라고 나옵니다. 어려운 애기는 넘어가고 쉽게 쉽게 가봅시당 일상생활을 예시로 먼저 설명드려볼게요. 저는 교촌치킨 매장에가서 레드콤보를 먹으려고 합니다.여기서 제가 레드콤보를 먹기위해 해야하는 일은 무엇일까요 ? 저는 그냥 매장에가서 직원분께 메뉴를 말하고 그에 맞는 금액을 결제하면 끝입니다. 그러면 레드콤보를 직원분이 가져다 주시죠.이것이 바로 델리게이트 패턴입니다. 엥 이게 왜 델리게이트 패턴이야? 라고 하시는분들을 위해 조금 더 설명해드리자면 우리는 레드콤보를 주문하여 레드콤보가 나온것이지만 사실 우리가 주문을하고 레드콤보가 나오기까지 아주 많..
2023.04.10 -
UITextView에는UITextField에는 있는 placeholder가 없다. delegate를 채택하여 placeholder가 있는것처럼 구현해보자 ! 먼저 textView를 구현해주자 // // ViewController.swift // textView // // Created by 이준복 on 2023/03/21. // import UIKit final class ViewController: UIViewController { let textViewPlaceHolder = "내용을 입력하세요" lazy var textView: UITextView = { let textView = UITextView() textView.text = self.textViewPlaceHolder textView.tex..
[iOS] TextView placeholder 구현하기UITextView에는UITextField에는 있는 placeholder가 없다. delegate를 채택하여 placeholder가 있는것처럼 구현해보자 ! 먼저 textView를 구현해주자 // // ViewController.swift // textView // // Created by 이준복 on 2023/03/21. // import UIKit final class ViewController: UIViewController { let textViewPlaceHolder = "내용을 입력하세요" lazy var textView: UITextView = { let textView = UITextView() textView.text = self.textViewPlaceHolder textView.tex..
2023.03.21