전체 글
-
Swift Enum - 3Programming/Swift(iOS) 2021. 4. 1. 21:15
이번에는 enum을 가지고 struct나 class를 대체하는 것을 공유하려고 합니다. 아래 두 struct를 보면, 중복된 속성이 존재합니다. struct User { let email:String let password:String let joinDate:Date var level:Int var exp:Int } struct Admin { let email:String let password:String let joinDate:Date var logs:[String] } 중복된 속성을 해결하려면 어떻게 해야될까요? 클래스의 상속을 이용하면 부모클래스에 공통 속성을 두고, 자식 클래스에서 사용하면 됩니다. 하지만 부모 클래스에 변경이 있을 때 자식 클래스에서도 변경을 해줘야 되므로 기존 설계 구조를 계..
-
Swift Enum - 2Programming/Swift(iOS) 2021. 4. 1. 20:58
enum 두번째 예제입니다. 아래 예제에서 arr를 순회하면서 출력하려면 arr의 요소에 따라서 분기하는 처리가 필요합니다. 또한 'Any' 타입이기때문에 switch ~ case에서 항상 'default'가 붙어야 합니다. let arr:[Any] = [ Date(), "Hello", 100, 3.14] for element in arr { switch element { case let v as Date: print("Date - \(v)") case let v as String: print("String - \(v)") case let v as Int: print("Int - \(v)") case let v as Float: print("Float - \(v)") default: print("unSu..
-
Swift Enum - 1Programming/Swift(iOS) 2021. 4. 1. 20:53
지금부터는 swift에서 사용하는 enum타입에 대한 공부를 해볼까 합니다. swift에서의 enum의 쓰임새는 다양합니다. c와는 쓰임새가 정말 많이 달라서 처음에는 어렵게 느껴집니다. 제가 보는 책에서 swift enum을 유용하게 사용할 수 있는 경우를 찾아봤습니다. 제한된 선택지를 주고 싶을때 정해진 값 이외에는 입력을 받고 싶지 않을때 예상된 입력값이 한정되어 있을 때 -> enum은 하나를 선택하면 다른 하나를 선택 못하기때문에 Error 처리에서도 자주 등장합니다. Swift에서 자주 사용하는 Optional도 Enum으로 구현되어 잇습니다. enum School { case primary case elementary case middle case high case university } /..
-
Swift TupleProgramming/Swift(iOS) 2021. 4. 1. 20:40
Swift에서 사용하는 Tuple에 대한 정리 'Tuple'은 서로 다른 타입을 하나로 묶어서 저장할 수 있습니다. 아래와 같이 문자열, Int, Float을 하나로 묶어서 표현 가능합니다. var t = ("Hello Wolrd", 1, 2.5) 이제 함수에서 Tuple을 return하는 방법입니다. func foo() -> (String, Int) { return ("Tom", 42) } // return 된 값을 임시로 0,1로 표현 var result = foo() print("\(result.0), \(result.1)") var (name, age) = foo() print(name, age) func foo2() -> (name:String, age:Int) { //넘겨줄 Data의 name..
-
Swift 언어의 특징Programming/Swift(iOS) 2021. 4. 1. 00:06
회사에서 교육받은 Swift 언어 교육을 정리해보려한다. 장점 고성능 함수형 프로그래밍 프로토콜 지향 프로그래밍 - POP(Protocol Oriented Programming) 강력한 컴파일 타임 언어 단점 모듈 호환성이 떨어진다. 엄격한 타입 체크 - 다른 언어에 비해 상대적으로 엄격하다. 프로토콜이 난해하다. 동시성 지원이 떨어진다. - 언어적으로 지원되는 기능이 없다. - 3rd party 기능으로 지원 해주고 있다. (GCD, Reactive, Extension(RxSwift)) Applet Platform에 종속적이다. - 리눅스 기반에서도 사용가능하지만, 지원하는 패키지 수자 적다. - 결국 맥북 사라는 얘기다. 컴파일 시간 - LLVM 기반의 컴파일러를 이용하므로써, 정적 분석등 유용한 ..
-
Xcode CommandLine ProjectProgramming/Swift(iOS) 2021. 3. 31. 23:59
XCode를 사용하면서 간단히 알아볼 수 있는 것들은 PlayGround를 열어서 코딩했었다. 하지만, 어시턴트같은게 잘 지원이 안되는거 같은 느낌(?)을 받고 있었는데, 이번 교육에서 XCode Project를 Command Line Project로 만들어서 사용하면 된다는걸 배웠다. (아마도 Visual Studio에서 C++ project를 빈 프로젝트로 만드는 것이랑 비슷한것 같다.) XCode에서 Project를 새로 만들었을 때, "macOS - Command Line Tool" 선택한다. Target Membership이 현재 빌드에 포함시키는지 여부를 결정한다. 즉, 파일이 여러개라면 Target Membership 체크에 여부에 따라서 빌드에 포함시킬지/제외시킬지 결정할 수 있다. 그리고..
-
104. Maximum Depth of Binary TreeProgramming/leetcode 2021. 3. 17. 10:00
public int maxDepth(TreeNode root) { if (root == null) return 0; if (root.left == null && root.right == null) return 1; if (root.left != null && root.right == null) return maxDepth(root.left) + 1; if (root.left == null && root.right != null) return maxDepth(root.right) + 1; return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1; } 풀이 방법은 여러 가지가 있겠다. BFS, 재귀... 먼저 BFS로 푼 것이다. Queue에 넣고 해당..
-
743. Network Delay TimeProgramming/leetcode 2021. 3. 10. 11:23
최소 비용을 구하는 문제. 음수값이 없어 다익스트라로 해결 가능하다. def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int: graph = collections.defaultdict(list) for u, v, w in times: graph[u].append((v, w)) distances = {node:float('inf') for node in range(n+1)} distances[k] = 0 q = [(0, k)] while q: weight, vertex = heapq.heappop(q) if weight < distances[vertex]: continue for new_vertex, new_weight in gr..