스위프트 20

swift struct내에 class property가 있으면 안좋다 - reference counting과 스위프트 성능의 관계

struct를 사용하다 보면 내부에 property는 어떻게 메모리 상에서 존재하는지 궁금했습니다. text, font 모두 referenceType으로 힙에 저장됩니다. 이런 경우 오른쪽 이미지 처럼, 스택에 레퍼런스하는 지점만 있고 모두 힙에 존재하는 데이터를 포인팅하게 되는데요. Label은 즉 두번의 레퍼런스 카운팅을 하게되어 비효율적이라 합니다. reference counting은 자주 일어나지 않는게 좋습니다. 즉 아무리 struct라도 reference를 소유하는 경우는 꽤나 비효율적으로 동작한다는 얘기입니다. struct는 1개 이상의(2개 이상인거 같은데...) reference를 갖는 경우, 레퍼런스 카운팅이 소유하는 레퍼런스 갯수만큼 발생하므로, class에 비해 비효율적이라 할 수 ..

카테고리 없음 2022.12.20

swift string은 Stack, Heap 둘중 어디에 저장될까?

정답은 heap이다... 그런데 string은 value 타입임. 즉 swift에서 저장 공간과 value, reference 타입은 관계가 없다. 즉 value 타입이라고 항상 스택에 저장되는게 아니다. 하지만 string은 짧은 문자열은 스택에 저장되기도 한다 함(16바이트 이하)...? string이 heap에 저장되는 이유에 대해 알아보자. array, dictionay, set, string(collection of char)과 같이 가변 길이의 Collection들은 내부 데이터를 힙에 저장한다. 컴파일 타임에 그 사이즈를 정확히 알기 어려워 heap에 할당 후 사이즈를 조절한다. 주로 스택에 저장되는 경우는 변수의 생명주기가 static한 경우고, value type의 사이즈가 컴파일 타임에..

Advanced Swift 2022.12.19

<프로그래머스> [카카오 인턴 2020] 수식 최대화

스위프트로 구현한 코드이다. 고민했던 점은 이걸 완전탐색으로 하는 수 밖에 없나 고민했었다. 근데 수식도 100자리 이하고, 연산 우선순위 바뀌는 경우도 12가지라 시간 복잡도를 계산하면 1초안에 들어와서 완탐을 목적으로 낸 문제가 맞다 생각했다. (다른 효율적인 방법이 있다면 댓글좀 ㅠㅠ) 또 고민의 과정은, 문자열을 어떻게 리스트로 파싱할지, parse는 안된다는 결론이 났다. +-*/ 네가지로 분할해야 되서, 그래서 리스트로 순회하면서 숫자랑 연산기호를 따로 읽고 저장하는 식으로 했다. 이제 연산을 해야되는데, 일반적으로 스택을 사용한 연산을 하는걸 알고 있다. 그런데 오래되서 스택으로 하는 방법을 아무리 생각해도 안나더라.,... 쉬운문제 부터 다시 해봐야 겠다. 그래서 스택을 사용하지 않고 리스..

<함수형 프로그래밍> 백준 9461번

이건 음 재귀함수를 이용해 해결했다. 그런데 메모이제이션 부분은 mutable하게 구현되서 마음에 들지 않는다. 꽤나 찾아봤는데 메모이제이션을 immutable하게 할수 있는 방법을 모르겠다. 이 문제를 통해서 재귀함수를 이용해 immutable하게 구현할수 있다는 것을 한걸음 느끼게 된거같다. 파일에서 자동으로 입력 받는 부분이나, 입력부를 처리하는게 제일 까다로웠다. import Foundation /* let file = "input.txt" var text = "" if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first{ let fileURL = dir.appendingPathComponent..

<함수형 프로그래밍> 3.5편 클로저(Closure)

스위프트에서 클로져가 클로저를 감싸는 주변 콘텍스트?(변수,상수)를 캡쳐한다는데 캡쳐한다는게 항상 무슨 의미인지 정확히 이해가 안됬다. 함수가 스택에서 제거되도 지우지 않고 남겨논다는 건가? 원래 제거되면 제거되는거지 도대체 왜 남는거지?? 클로저 표현식 문법(Closure Expression Syntax) 클로저 표현식 문법의 일반 형식은 다음과 같음. { (parameters) -> return type in statements } 클로저의 내용은 in 키워드로 시작하며 이 키워드는 클로저 인자와 반환 타입의 정의가 끝났고 클로저 내용이 시작함을 가르킴. Capturing Values A closure can capture constants and variables from the surroundin..

<함수형 프로그래밍> 1편,Swift 3 functional programming 책 정리 내용

책을 선택 했다. Swift 3 functional programming 일단 챕터 1 . Getting Started with Functional Programming in Swift - why functional programming matters? - what is functional programming? - swift language basics - immutability - first-class , higher-order, and pure functions - Optionals and pattern matching - closures - type aliasing why functional programming matters? 일단 첫페이지 보니까. 소프트웨어가 복잡해지고 그러니까 계층을 분리하..

<스위프트> UIBezierPath

view에 여러가지를 draw할때 많이 나온다. 근데 내가 사용하는 입장에서 UIBezierPath에 그리고 그걸 뷰에 넣기만 하면 되던데 , 왜그런지 모르겠었다.... Class UIBezierPath A path that consists of straight and curved line segments that you can render in your custom views. 직선과 곡선 조각으로 이루어진 패스라 한다, 내 커스텀 뷰 안에서 랜더링 할 수 있다함. 근데 항상 듣는 말인데 렌더링이 도대체 뭔지 잘 모르겠음. 내 생각에 이런거 같은데, 대충 밑그림을 알려주면 그걸 화면에 그리는게 렌더링 같다. ㅋㅋ;;;;ㅋ;ㅋ;ㅋ; Overview You use this class initially to..