[Swift 알고리즘] LeetCode 1302 - Deepest Leaves Sum
·
코딩테스트
Github GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘 스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub. github.com 문제 링크 Deepest Leaves Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 1302 문제의 주의점은 leaf 노드가 아니라 최대 깊이의 노드의 합이라..
[Swift] 공식 문서 - 옵셔널 체이닝(Optional Chaining)
·
Swift/Swift 가이드
새로 배운 점 옵셔널 체이닝은 2계층 이상의 프로퍼티나 메서드, 서브스크립트를 호출할 때에도 사용할 수 있습니다. 옵셔널 체이닝을 사용하여 옵셔널 값에 대해 메서드를 호출하고 그 메서드 호출이 성공했는지 확인할 수 있습니다. 이 방법은 메서드의 반환값이 정의되지 않은 경우에도 사용할 수 있습니다. 메서드의 리턴 값에 추가 옵셔널 체이닝을 사용하고 싶다면, 물음표를 메서드의 괄호 뒤에 적으면 됩니다. Optional Chaining 옵셔널 체이닝(Optional Chaining)은 현재 nil일 수도 있는 옵셔널 프로퍼티, 메서드, 서브스크립트를 참조하고 호출하는 과정입니다. 만약 옵셔널이 값을 가지고 있다면 프로퍼티, 메서드, 서브스크립트는 성공적으로 호출됩니다. 만약 nil이라면 nil을 반환합니다. ..
[Swift 알고리즘] LeetCode 1689 - Partitioning Into Minimum Number Of Deci-Binary Numbers
·
코딩테스트
Github GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘 스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub. github.com 문제 링크 Partitioning Into Minimum Number Of Deci-Binary Numbers - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 이번 문..
[Swift] Initialization 실습
·
Swift/개념 & 응용
선행 포스팅 이번 포스팅은 초기화(Initialization)을 실습하는 내용입니다. Initialization 문서가 너무 길더군요... 문장도 어렵고 내용도 많다보니 최근 포스팅 중 가장 힘들었습니다 ㅎㅎ; 말로만 이해하기엔 붕 뜨는 개념이 있어 실습하면서 이해하기로 했습니다. let 초기화 저는 지금까지 let은 반드시 선언과 동시에 초기화를 해줘야 한다고 생각했습니다. 근데 init() 안에서 초기화를 해줘도 되더라고요.. 너무 당연히 안 될 거라고 생각했는데 세상에 "당연히"라는 것은 없다는 것을 또 한 번 느꼈습니다. class Human { let name: String init(name: String) { self.name = name } } var human: Human = Human(n..
[Swift] 공식 문서 - 인스턴스 해제(Deinitialization)
·
Swift/Swift 가이드
새로 배운 점 슈퍼 클래스의 소멸자는 슈퍼클래스의 서브클래스에 의해 상속되고, 슈퍼클래스의 소멸자는 자동으로 서브클래스의 소멸자의 끝에 호출됩니다. Deinitialization Deinitialization는 클래스 인스턴스가 해제될 때 즉시 호출됩니다. Deinitialization는 deinit 키워드를 사용하여 작성할 수 있으며, init 키워드를 사용하여 이니셜라이저를 작성하는 방법과 유사합니다. Deinitialization는 오직 class 타입에서만 사용할 수 있습니다. How Deinitialization Works Swift는 인스턴스가 더이상 필요 없을 때 자동으로 인스턴스를 할당 해제하여 리소스를 해제합니다. Swift는 인스턴스의 메모리 관리를 Automatic Reference ..
[Swift] 공식 문서 - 초기화(Initialization)
·
Swift/Swift 가이드
새로 배운 점 상수 프로퍼티는 이니셜라이저 안에서도 초기화할 수 있다. 구조체의 기본 이니셜라이저가 Memberwise Initializers라는 이름이라는 것 designated 이니셜라이저는 해당 클래스가 직접 상속받는 슈퍼클래스의 designated 이니셜라이저를 호출해야 한다. convenience 이니셜라이저는 같은 클래스의 다른 이니셜라이저만 호출해야 한다. convenience 이니셜라이저는 궁극적으로 designated 이니셜라이저를 호출해야 한다. Swift의 컴파일러는 2단계 초기화를 에러 없이 완료하기 위해 4가지 safety-check를 수행한다. 서브클래스에서 새로 추가한 모든 프로퍼티에 기본값이 지정되면, 두 가지 규칙이 적용된다. 만약 서브클래스가 어떠한 designated 이..
[Swift] 공식 문서 - 상속(Inheritance)
·
Swift/Swift 가이드
새로 배운 점 다른 클래스로부터 상속받지 않은 클래스를 기본 클래스(base class)라고 한다. someIndex로 오버라이딩된 서브스크립트는 오버라이딩된 서브스크립트 내부에서 super[someIndex]로 슈퍼클래스의 서브스크립트에 접근할 수 있다. Inheritance 클래스는 다른 클래스로부터 메서드, 프로퍼티, 특징들을 상속받을 수 있습니다. 다른 클래스로부터 상속을 받을 때, 상속을 받는 클래스는 subclass라고 하고, 상속을 하는 클래스는 superclass라고 합니다. Swift의 클래스는 그 클래스의 superclass에 속하는 메서드, 속성, 서브스크립트를 호출하거나 접근할 수 있고, 메서드, 속성, 서브스크립트를 오버라이딩(overriding)할 수 있습니다. Swift는 오버..
[Swift] Method와 Subscripts 실습하기
·
Swift/개념 & 응용
선행 포스팅 Swift 레퍼런스 중 Methods와 Subscripts 내용을 번역한 포스팅입니다. 자세한 개념 설명은 위 두 개의 포스팅에서 다루었고, 문서의 내용 중 몇 가지를 직접 실습해보겠습니다. mutating 실습 mutating 키워드는 구조체나 열거형에서만 사용 가능합니다. class에서 mutating을 쓰면 컴파일 에러가 발생해요. 원래 구조체나 열거형의 메서드 안에서 자신의 프로퍼티를 수정할 수 없습니다. 만약 수정을 시도하면 이렇게 mutable 하지 않다는 에러가 뜹니다. 에러를 펼쳐보면 mutable하게 만들라고 하면서 Fix 를 지원하는데요. 여기서 Fix를 누르면 struct SomeClass { var value: Int = 0 mutating func increase() ..
[Swift] 공식 문서 - Subscripts
·
Swift/Swift 가이드
* 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 클래스, 구조체, 열거형은 서브스크립트(subscripts)를 정의할 수 있다. 서브 스크립트를 사용하면 다른 메서드 없이 인덱스를 사용하여 값을 설정하고 검색할 수 있다. subscript 키워드로만 서브스크립트를 정의 가능하다. 클래스와 구조체는 필요한 만큼의 서브스크립트를 구현할 수 있다. 여러 개의 서브스크립트를 정의하는 것을 subscript overloading이라고 한다. 사용자 타입에 맞춰 여러 개의 파라미터를 받는 서브스크립트를 정의할 수도 있다. 서론 클래스, 구조체, 열거형은 서브스크립트(subscripts)를 정의할 수 ..
[Swift] 공식 문서 - Methods
·
Swift/Swift 가이드
* 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으며 잘못된 번역이 있다면 댓글로 알려주세요. 새로 배운 점 mutating 메서드는 self 프로퍼티에 완전히 새로운 인스턴스를 할당할 수 있다. 열거형에서 mutating 메서드는 암시적 self를 같은 열거형의 다른 case로 설정할 수 있다. 메서드의 결과를 사용하지 않을 때 @discardableResult를 붙이면 "Result of call to ~~~ is unused" 경고를 표시하지 않는다. 서론 메서드는 클래스, 구조체, 열거형 안에 정의되는 함수(function)입니다. 메서드는 인스턴스 메서드와 타입 메서드를 정의할 수 있습니다. 인스턴스 메서드는 특정 작업 및 기능을 캡슐화하여..
[Swift] Property Wrapper
·
Swift/개념 & 응용
Property Wrapper Property Wrapper는 Swift 5.1에 나온 개념으로, 프로퍼티가 저장되는 방식을 관리하는 코드와 프로퍼티를 정의하는 코드 사이에 분리 계층을 추가합니다. 구조체, 클래스, 열거형의 local stored variable에서만 사용 가능하고, 전역 변수나 연산 프로퍼티에서는 사용 불가능해요. 정의는 아주 어렵지만... 보일러 플레이트 코드를 줄일 수 있는 유용한 기술입니다. (*보일러 플레이트 코드 : 유사한 코드가 여러 곳에서 사용되며, 반복적으로 비슷한 형태를 띄는 코드) SwiftUI에서 자주 보인다고 하는데요(전 아직 SwiftUI를 안 해봄 ㅠ) @Published, @Binding, @ObservedObject, @State 등이 Property Wr..
[Swift] 프로퍼티(Property) - 2
·
Swift/개념 & 응용
1편 보러가기 [Swift] 프로퍼티(Property) - 1 프로퍼티(Property) property는 value를 특정 클래스, 구조체, 열거형과 연결하는 역할을 합니다. 말은 어렵지만 클래스, 구조체, 열거형에서 값을 쓸 수 있도록 해주는게 property라는거에요. var hello: Stri jeong9216.tistory.com 프로퍼티 옵저버(Property Observers) 프로퍼티 옵저버는 프로퍼티의 값이 변경됨을 감지하고 적절한 동작을 수행할 수 있도록 합니다. 프로퍼티의 값이 새로 할당될 때마다 호출되고 같은 값이 할당되도 호출이 됩니다. 프로퍼티 옵저버는 아래 세 가지 상황에서 사용할 수 있습니다. 저장 프로퍼티를 정의할 때 설정 저장 프로퍼티를 Overriding 할 때 설정 ..
[Swift] 프로퍼티(Property) - 1
·
Swift/개념 & 응용
프로퍼티(Property) property는 value를 특정 클래스, 구조체, 열거형과 연결하는 역할을 합니다. 말은 어렵지만 클래스, 구조체, 열거형에서 값을 쓸 수 있도록 해주는게 property라는거에요. var hello: String = "Hello" 이 코드도 property를 나타낸건데 hello는 property 이름, String은 타입, "Hello"는 값입니다. "Hello"를 쓰기 위해서는 hello를 이용해야 하죠. Property에는 크게 4가지가 존재합니다. 저장 프로퍼티(Stored Property) 지연 저장 프로퍼티(Lazy Stored Property) 연산 프로퍼티(Computed Property) 프로퍼티 옵저버(Property Observers) 타입 프로퍼티(T..
[디자인패턴] MVC 패턴 with iOS
·
CS/디자인패턴
MVC 패턴 디자인 패턴 중 가장 기본적인 것을 말하라면 MVC 패턴이라고 할 수 있습니다. MVC 패턴은 애플에서 기본적으로 지원하는 디자인 패턴으로, Model - View - Controller 구조의 아키텍처 패턴을 말합니다. 일반적으로 사용되는 MVC 패턴과는 달리 iOS에서는 조금 다르게 사용이 되는데요. iOS는 ViewController가 사용되기 때문에 View와 Controller가 결합되었습니다. 일반적인 MVC 패턴과 애플의 MVC 패턴을 비교하고, MVC 장단점을 알아보도록 합시다. 마지막에는 직접 구현해보는 시간을 갖겠습니다. 일반적인 MVC 패턴 일반적인 MVC 패턴은 간단히 알아봅시다. Model은 앱이 가지는 데이터와 비즈니스 로직을 갖고 있습니다. View는 앱에서 유저에..
[Swift] Value 타입과 메모리 저장 공간
·
Swift/개념 & 응용
서론 지난 포스팅에서 Class와 Struct의 차이점을 다루며 Reference 타입과 Value 타입에 대해 다루었습니다. [Swift] Class와 Struct Class와 Struct 새로운 데이터 구조를 정의할 때 구조체와 클래스 중에 무엇을 사용할지 고민합니다. 클래스와 구조체의 차이에 대해 알아보고 어떤 상황에서 무엇을 쓰면 좋을지 알아보겠습니다. jeong9216.tistory.com Reference 타입과 Value 타입의 차이 중 하나가 저장되는 메모리 공간인데요. Reference 타입은 Heap, Value 타입은 Stack에 저장된다고 설명했고, 그렇게 알고 있는 분이 많으실 겁니다. 하지만 타입에 따른 저장 공간이 상황에 따라 달라질 수 있다는 거 아시나요? 오늘은 Value ..
유정주