🧑🏻💻 생성된 인스턴스의 Print 메소드 출력 결과물을 변경하기 스위프트 프로그래밍 책을 복습하며 무심코 넘어갔던 부분 중 궁금한 것이 생겨 테스트를 해봤습니다. 우선 아래는 책에 나오는 print 메소드에 대한 설명입니다. ... "print() 함수는 출력하려는 인스턴스의 description 프로퍼티에 해당하는 내용을 출력해주고, dump() 함수는 출력하려는 인스턴스의 자세한 내부 콘텐츠까지 출력해줍니다." ... 이 구절에서 혹시 어떤 인스턴스가 description이란 이름의 프로퍼티를 갖게되면 무조건 그 값을 출력하는 지 궁금해져 실험을 해봤습니다. 우선 아래는 테스트를 위한 클래스와 그 인스턴스를 출력했을 때 일반적인 결과물 입니다. class Car { let name: String ..
🎯 제네릭(Generic) in Swift 🧑🏻💻 What - 제네릭이란? Swift는 어떤 변수나 상수, 혹은 함수(메소드)의 파라미터 등을 구현할 때 타입을 지정합니다. 타입을 명시함으로써 컴파일러에게 해당 값의 타입을 명확히 설명해주고, 코드를 읽는 개발자들의 입장에서 해당 값의 특성을 더 잘 이해할 수 있도록 도와줍니다. 물론 타입 추론 기능을 통해 타입 명시를 생략해줄 수 있지만 특정 타입이 확정되어야 하는 것은 마찬가지입니다. 이런 상황에서 로직은 완전히 같은데 입력값의 타입만 다른 경우 어떻게 되어야 할까요? 일반적으로 오버로딩(over loading)으로 함수를 타입들에 맞게 정의할 수 있지만 그것 역시 무의미한 코드의 반복이 됩니다. Swift는 이러한 문제를 해결할 수 있는 Gener..
🛠 Closure를 이용한 저장 프로퍼티 초기화를 구현을 생각해보기 💬 Closure를 이용한 저장 프로퍼티 초기화를 구현 방법 학습과정 중 구현된 클로저를 이용한 저장 프로퍼티의 구조를 보며 한가지 의문이 들었습니다. 의문에 대해 말해보기 전에, 우선 구현된 구조를 한번 살펴보겠습니다. let/var propertyName: Type = { // Logics return returnValue } 위의 추상화된 구조를 예시로 구체화 시켜보겠습니다. var age: Int = { print("나이가 몇살입니까?") return 10 }() 위와 같이 클로저를 통해 프로퍼티를 정의할 수 있습니다. 🙋 연산 프로퍼티와의 차이 위의 예시를 보면 한가지 의문이 생길 수 있습니다. 연산프로퍼티와 모양이 비슷해 보일..
🧐 왜 struct만 자동 생성 초기화(Memberwise Init)가 존재하고 class에는 이 편한 기능을 넣어주지 않았을까? struct를 사용하다보면 memberwise init이라는 편리한 기능을 자주 활용하게 됩니다. 그런데 이 편리한 기능을 왜 class는 넣어주지 않아서 항상 init을 생성하게 하는지에 대한 의문이 들었습니다. 저와 비슷한 의문을 가진 분들이 있어서 그분들의 글을 참고해 설명해보겠습니다. 📂 우선 아래의 글을 살펴보겠습니다. The logic behind it could be because a struct is not subclassable, making it obvious that a complete initializer would be required, and as s..
🔐 Escaping Clousures Apple의 iOS Dev Tutorial을 진행하다가 @escaping을 처음 알게 되었습니다. 튜토리얼상에서도 간략하게 개념을 소개해주고 있지만 조금 더 자세히 알아보겠습니다! 🧐 Escaping vs Non-escaping 우선 escaping을 이해하기 위해 escaping과 non-escaping의 차이를 알 필요가 있습니다. 이런 고민을 하는 상황의 대표적인 예시로 클로저가 파라미터로 입력되는 메소드를 생각해보겠습니다. func callback(someFunction: () -> Void) { someFunction() } callback { print ("someFunction이 실행되었습니다."》 } // 실행결과: "someFunction이 실행되었습..
Classes, Structures, Enumerations 📌 유사점(Similarity) 클래스(Class), 구조체(Struct), 열거형(Enum)은 Swift의 기본 자료구조 블럭입니다.(These are the 3 fundamental building blocks of data structures in Swift) 세가지 구조 모두 같은 방식으로 정의됩니다. // 키워드 + 이름 + {} class testClass { } struct testStruct { } enum Op { } 세가지 자료구조 모두 프로퍼티(Properties)와 함수(Functions)를 가질 수 있습니다. 하지만 열거형(Enum)은 저장 프로퍼티(Stored Property)를 가질 수 없습니다. 클래스와 구조체만 저..
튜플(Tuples) 🗜 튜플이란? 여러가지 타입들을 묶어 하나의 타입으로 선언해주는 것입니다. 2개 뿐만 아니라 3개 이상의 타입의 값들도 튜플로 묶일 수 있으며 이렇게 묶인 튜플은 타입이 사용될 수 있는 곳이라면 어디서도 사용 가능합니다. 💻 튜플의 사용 방법 튜플의 사용 예시는 아래와 같습니다. // 1. 튜플의 요소 수만큼 변수를 할당해 사용 let x: (String, Int, Double) = ("hello", 5, 0.5) let (word, number, value) = x // tuple에 접근할 때 요소들이 이름을 갖습니다. // 요소의 개수가 맞지 않는다면 컴파일 에러가 발생합니다. print(word) print(number) print(value) // 2. 튜플을 정의할 때 ele..
🎯 Protocol(프로토콜) vs Inheritance(상속) 📎 Protocol 및 Inheritance 되짚기 Protocol을 학습하며 지속적으로 학습한 내용은 'blueprint(청사진)이다', '공통 기능을 가진다' 등 입니다. 이러한 학습을 하며 자연스럽게 동시에 떠오르는 생각은 위의 특징이 클래스의 상속(inheritance)와 유사하다는 점이며 이 두가지 개념을 구분할 필요성을 느꼈습니다. 우선 구분을 하기 전, 각각의 특징을 상기할 필요가 있습니다.위의 정의는 기본적인 것으로 정확한 차이를 이해하기 어렵습니다. 그래서 예시 상황을 통해 두 개념을 조금 더 알아볼 필요가 있습니다. 상속 : 상속받을 클래스의 모든 기능을 물려받는다.(부모의 모든 기능을 자식 클래스가 물려받는다) 프로토콜:..
- Total
- Today
- Yesterday
- 공유기 설치#BOJ#이분탐색#Python
- N으로 표현#DP#Programmers#Python
- 날짜 계산#BOJ#완전탐색#Python
- PassingCars#Codility#Python
- 나무자르기#BOJ#이분탐색#Python
- 텀 프로젝트#백준알고리즘#Python
- NumberofDiscIntersections#Codility#Sort#Python
- Triangle#Sorting#Codility#Python
- 배열합치기#분할정복#BOJ#Python
- Swift#Tuples#Range
- 병든 나이트#BOJ#탐욕법#Python
- 토마토#백준알고리즘#Python
- 백준 알고리즘#BackTracking
- django
- 파이썬알고리즘인터뷰#4장
- Distinct#Codility#Python
- 종이자르기#분할정복#BOJ#Python
- filter#isalnum#lower
- 터틀비치#리콘#xbox#controller
- 섬의개수#백준알고리즘#Python
- Brackets#Stacks and Queues#Codility#Python
- API#lazy#
- 쿼드트리#BOJ#분할정복#Python
- 순열사이클#BOJ#Python
- 랜선자르기#이분탐색#BOJ#Python
- 리모컨#완전탐색#BOJ#Python
- django#slicing
- 미로 탐색#백준알고리즘#Python
- 반복수열#백준알고리즘#Python
- 암호코드#dp#BOJ#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |