[iOS] 기존 프로젝트에 Tuist v4 적용하기(2/2) 1. 모듈화 계획이전 포스팅에서 기존 프로젝트에 Tuist를 적용하기 위해 기본 세팅까지 마무리를 했고,이번에는 레이어 별로 모듈화를 진행하려고 한다. [iOS] 기존 프로젝트에 Tuist v4 적용하기(1/2)1. Tuist 설치Tuist는 이제 brew말고 mise로 설치하기를 권장한다.brew로 mise를 설치하고 mise로 Tuist를 설치해주었더니 @4.55.6 이 설치되었다.// brew: 다양한 개발 툴과 소프트웨어를 쉽게 설치/관리하는slaveshin.tistory.com 일단, 우리 프로젝트는 클린 아키텍쳐 기반으로 구조를 설계했고 레이어별로 디렉터리를 나눠놓았다.나는 레이어 별로 모듈화를 하고 참조가 필요한 레이어에서 import 하여 명확하게 관심사 분리를 하고 싶었기 때문에위 나뉘.. [Swift] 접근 제어(Access Control) 0. 서론최근에,, 기존 프로젝트에 Tuist 모듈화를 적용하게 되어서 공부해본다..!!1. 접근 제어란?다른 소스파일 및 모듈의 코드에서, 코드의 일부에 대한 접근을 제한한다.Swift에서는 open, public, internal, fileprivate, private 총 다섯가지의 접근 제어자를 사용해서 접근을 제한 할 수 있다. 접근 제어의 기준이 되는 것은 모듈, 소스 파일 그리고 패키지 이다.모듈(Module)은 코드를 배포할 수 있는 단위 이고(우리가 흔히 import해서 사용하는 framework들),소스 파일은 모듈 내의 단일 파일을 말한다.(~.swift로 된 것들) 또한 패키지는 모듈의 그룹이라고 생각하면된다. 2. Access Levels접근 제어의 수준은 open(가장 개방) → .. [iOS] 기존 프로젝트에 Tuist v4 적용하기(1/2) 1. Tuist 설치Tuist는 이제 brew말고 mise로 설치하기를 권장한다.brew로 mise를 설치하고 mise로 Tuist를 설치해주었더니 @4.55.6 이 설치되었다.// brew: 다양한 개발 툴과 소프트웨어를 쉽게 설치/관리하는 패키지 매니저brew install mise// mise: 여러 프로그래밍 언어와 런타임의 버전을 프로젝트별로 관리하는 버전 매니저mise install tuist 2. 기존 프로젝트에 Tuist 초기화프로젝트의 루트 폴더에서 tuist init을 입력하면, 기존 프로젝트에 통합 할 것인지 새로 프로젝트를 만들 것 인지 묻는다.// tuist로 초기화tuist init 나는 기존 프로젝트에 적용할 것 이므로 Integrate with [프로젝트명]을 선택해주었다... [Swift] 제네릭(Generic) 1. 제네릭이란?제네릭은 타입에 의존하지 않는 범용 코드를 작성할 때 사용한다. 제네릭을 사용하면 중복을 피하고, 코드를 유연하게 작성할 수 있다.예를 들어, Stack 자료구조를 직접 만든다고 생각해보자. Character를 담을 수 있는 Stack은 이렇게 짤 수 있을 것이다.class CharStack { private var elements: [Character] = [] func push(_ value: Character) { elements.append(value) } func pop() -> Character? { return elements.popLast() } func peek() -> Character? { .. [알고리즘] 복잡도와 정렬 1. 복잡도(Complexity)복잡도는 알고리즘의 성능과 효율성을 나타내는 척도이다. 크게 시간 복잡도와 공간 복잡도로 나눌 수 있다.수행시간에 해당하는 것이 시간 복잡도 이고, 메모리 사용량에 해당하는 것이 공간 복잡도이다.시간 복잡도컴퓨터 프로그램의 입력값과 연산 수행시간의 상관관계를 나타내는 척도이다.최상의 경우: 오메가 표기법평균의 경우: 세타 표기법최악의 경우: 빅오 표기법알고리즘의 효율을 따졌을때 가장 중요한 부분은 n이 커질때 이므로이것을 잘 나타내는 것이 빅오 표기법(최악의 경우)이다. 공간 복잡도공간 복잡도란 특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석,알고리즘을 실행하여 종료할 때 까지의 필요한 기억장치의 크기를 말한다. 예를 들어, 다음과 같은 코드의 공간 복잡도는fu.. [Swift] 클로저, 클로저 캡쳐 이전 포스팅에서는 ARC, 순환 참조, 약한 참조에 대해 포스팅 해보았기 때문에이번에는 이어지는 내용인 클로저에 대해서 공부해보았다. 1. 클로저(Closure)란?보통 이름이 없는 1급 객체(변수처럼 사용하거나, 함수의 인자, 반환값으로 쓸 수 있는) 함수를 우리는 클로저라고 부른다.이해를 돕기 위해 원래 우리가 쓰는 형태의 함수를 클로저로 만들어보자.기본다음과 같은 형태의 함수를 클로저 가장 기본 형태로 만들면func add(_ a: Int, _ b: Int) -> Int { return a + b} 아래처럼 표현할 수 있다.let add = {(a: Int, b: Int) -> Int in return a + b} 축약까지 쭉쭉 가보자// 1. Swift에서는 타입추론이 가능하므로 타입을 생략.. [프로그래머스] 타겟 넘버 - Lv2 https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=swift 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr대표적인 DFS 문제.저번 포스팅에서는 Stack으로 구현해서 이번에는 재귀를 통해 풀어보았다. 나의 답func solution(_ numbers: [Int], _ target: Int) -> Int { var result = 0 func dfs(index: Int, sum: Int) { if index == numbers.count { if sum == target { result += 1 } .. [알고리즘] DFS/BFS 와 DFS와 BFS는 그래프 탐색 알고리즘이다.코딩테스트를 볼때 자주 나오기도 하고 Swift로 자유자재로 구현할 수 있게 공부해보았다. DFS(Depth First Search)란?이름 처럼 깊이 우선 탐색 알고리즘으로, 아래 그림처럼 한 경로를 따라 끝까지 탐색한 후 다음 경로를 탐색한다. DFS를 이용하여 그래프를 탐색할 때는, 방문한 노드를 스택이나 재귀함수를 통해 기록해야한다.스택이나 재귀 함수가 호출될 때마다, 해당 노드와 연결된 인접 노드 중에서 방문하지 않은 노드를 스택에 저장하고, 그 노드를 방문한다. 문제그냥 단순 구현하는 것 보다 내가 활용할 수 있게 공부하는 편이 나을 것 같아서GPT에게 문제를 만들어달라하고, 문제를 풀어보았다. S 에서 E까지 경로를 숫자로 표시 해보세요.let.. [Swift] ARC, weak, unowned 1. ARC(Automatic Reference Counting)Swift에서 메모리 관리는 ARC을 통해 이루어진다.객체가 생성될 때마다 강한 참조 카운터가 1씩 증가하고, 해당 객체를 참조하는 다른 객체가 생기면 카운트가 1씩 증가한다.마찬가지로, 객체를 더 이상 참조하지 않으면 해당 객체에 대한 강한 참조 카운터는 1씩 감소하고 0이 되면 메모리에서 해제한다. 실제로 순환 참조가 생기는 상황을 만들어보자.아래 코드 처럼 두 개 이상의 객체가 서로를 강하게 참조하면 순환 참조가 생기고 메모리 누수로 이어진다. A Class에 B Class를 참조할때 weak 키워드를 붙여본다면, 순환 참조가 생기지 않고 메모리에서 해제되는 것을 볼 수 있다. 이처럼 weak 키워드를 붙여서 약한 참조를 하게 되면,.. [프로그래머스] 서버 증설 - Lv2 https://school.programmers.co.kr/learn/courses/30/lessons/389479?language=swift 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 단순 구현 문제.시간대마다 서버가 필요한 배열을 만들어주고 이후에는 증감마다 result에 더해주었다. 나의 답func solution(_ players:[Int], _ m:Int, _ k:Int) -> Int { var needServers: [Int] = [] for i in 0.. 면접 복기 Array와 List의 차이점에 대해 설명해주세요.Array와 List는 둘다 선형 데이터 구조를 가지고 있습니다. 하지만 Array는 연속적인 메모리 공간에 저장하고 List는 비연속적인 공간에 저장한다는 차이점이 있습니다. 따라서, 데이터에 접근하려고 할때 Array에서는 Index를 사용하여 접근하지만, List에서는 각 노드에서 다음 노드의 주소 정보를 가지고 있기 때문에 노드를 순차적으로 탐색해서 해당 데이터까지 이동해야합니다. 또한 Array는 삽입과 삭제를 하면 요소들을 한칸씩 이동시켜야 하지만 List에서는 주소값만 연결시키면 되기 때문에 상대적으로 삽입과 삭제에 용이합니다. Stack과 Heap에 대해 설명해주세요.Stack은 후입 선출 방식으로, 가장 나중에 들어온 데이터가 가장 먼저 .. iOS 개발 직군 인턴(일경험) 면접 회고 일단, 그냥 너무 못봤다.... 그래서 다음에는 같은 실수를 하지 않고자 바로 회고를 작성하러 왔다. 면접 일정이 잡히고 이틀의 시간 동안 나름 준비한답시고 이력서와 포트폴리오를 한번 훑고1분 자기소개, iOS 개발 왜 시작했었는지, 내가 추구하는 개발은 뭔지 등등을 글로 한번 정리해보는 시간을 가졌다. 정리를 해보니, "나는 쉬지 않고 꾸준하게 성장해왔고, 이번 인턴 지원이 다음 단계의 성장에 꼭 필요하다"로 나를 어필 하고 싶었다.하지만 나를 어필하는데 너무 깊게 빠져버린 것이 일단 내 첫 번째 실수이다. 면접관님이 듣고 싶었던 이야기는 내가 구체적으로 무엇을 좋아하는 개발자인지가 구체적으로 듣고 싶었던 것인데계속 추상적으로 꾸준함, 끈기 이쪽으로 답변을 해서 중간에 "아니아니~"하고 예시를 들어 다.. 이전 1 2 3 4 5 다음