본문 바로가기
300x250

전체 글238

해시 간단히 정리해 봅니다. ↘ 해시 Hash?임의의 길이의 데이터를 고정된 길이의 데이터로 만들어 주는 자료구조로 key와 value가 쌍을 이루는 구조이다.swift에서는 대표적으로 Dictionary가 있다. Dictionary의 key를 이용해서 원하는 value를 한번에 조회 할 수 있다. 이때 key를 이용하여 한번에 조회 할 수 있게 해주는 것이 바로 해시이다.Dictionary 형태를 보면 key는 Hashable한 타입만을 포함시킬수 있는데, 내부에서 이 key를 배열처럼 index 형태로 변환하여 값에 바로 접근 할 수 있게 해준다. 이 변환 작업을 해싱이라고 한다. 해싱 Hashing?Dictionary의 key에 접근하여 value를 가져오는데에는 O(1)의 시간복잡도를 가진다. 이렇게 .. 2024. 11. 13.
프로그래머스: 해시 - 완주하지 못한 선수 https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=javascript 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 이 문제도 swift를 지원하지 않지만 풀어봄 풀이주어진 참가자 배열과 완주자 배열을 비교해서 완주하지 못한 한명을 반환하면 되는 문제처음엔 단순히 배열끼리 for, if 문으로 비교하면 된다고 생각했는데해시 문제 이므로 해시를 사용해서 풀 수 있는 방법을 고민해보았다.참가자를 키로 두고 모두 false 값으로 설정한 딕셔너리를 만들어서 사용하는 것부터 생각을 해봤는데 도저히 동명이인일 경우 처리가 되지 않았.. 2024. 11. 12.
프로그래머스: 해시 - 포켓몬 https://school.programmers.co.kr/learn/courses/30/lessons/1845?language=python3 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 지원되는 언어에 Swift가 없긴 하지만 풀어보고 싶어서 풀어봄 GPT에게 테스트 케이스를 더 만들어 달라고 했고Set을 이용하여 간단하게 풀어봄 GPT의 테스트 케이스 -># 테스트 케이스test_cases = [ # Case 1: 기본 예제 (폰켓몬이 4개, 서로 다른 종류 2개) ([3, 1, 2, 3], 2), # 최대 선택 가능 폰켓몬 종류 수: 2 # Case 2: 모든 폰켓몬이 같은 종.. 2024. 11. 8.
동시성 프로그래밍 (5) - GCD 사용 시 주의해야할 사항 GCD를 사용할 때에 주의 할 부분과 응용방법! 1.  반드시 메인큐에서 처리해야하는 작업우리는 화면을 그리고 그 화면에 필요한 데이터를 가져오고 가공하는 여러 작업들을 하게 된다.그리고 별도로 스레드로 작업을 분산하지 않는다면 보통은 대부분의 작업이 메인스레드에서 처리가 되는데 메인 스레드는 앱의 UI를 관리하고 사용자와의 상호 작용을 처리하는 매우 중요한 스레드이다. 따라서 UI관련 작업이나 애니메이션 그리고 사용자가 텍스트를 입력할 때 처리해야하는 작업 등은 반드시 메인스레드에서 처리되도록 해야한다.왜 메인 스레드에서 UI 작업을 해야 할까?1) UI 일관성 유지: 여러 스레드에서 동시에 UI를 변경하면 예기치 못한 결과가 발생할 수 있다. 메인 스레드에서만 UI를 변경함으로써 UI 상태를 일관되게.. 2024. 8. 21.
동시성 프로그래밍 (4) - GCD의 종류와 특성 1) main메인 이라는 이름 답게 단 한개가 존재하는 메인스레드를 이용한다serial로 동작하며 보통은 별도 작업을 해주지 않으면 메인스레드에서 처리가 된다print("task")이렇게 단순한 출력 코드 조차도 DispatchQueue.main.sync { print("task")}내부적으론 위와 같이 동작하고 있는 것! 2) globalconcurrent로 동작하며 총 6가지의 옵션을 지정하여 우선순위를 결정할 수 있다. 중요도가 높은 종류의 큐 사용시 iOS가 알아서 작업을 여러 스레드로 배치하고 배터리를 더 집중해서 사용하도록 한다. 만약 낮은 중요도의 큐 안에 더 높은 중요도의 큐 작업을 보내면 작업 수준은 자동으로 더 높은 중요도의 수준으로 변경된다.let queue = DispatchQue.. 2024. 8. 12.
동시성 프로그래밍 (3) - GCD/Operation에 앞서 Synchronous(동기) vs. Asynchonous(비동기)thread1 번에 쌓이는 task들을 대기열(큐)에 보내고 동기 또는 비동기로 처리할지 정하게 되고대기열에 보내진 task들은 자동으로 다른 스레드들로 분산되어 동기 또는 비동기로 처리된다. 동기로 처리 하게 되면 하나의 task가 끝나고 다음 task를 실행하여 순차적으로 큐에 있는 작업들을 처리한다.비동기로 처리 하게 되면 여러 task가 동시에 큐에 있는 작업들을 처리한다.  Serial(직렬) VS Concurrency(동시)이러한 큐에는 두 가지의 특성이 있는데 바로 직렬과 동시 직렬?스레드 하나에 작업을 보내고 순서가 중요한 작업을 처리할 때 사용된다. 동시?여러 스레드를 사용하여 작업을 처리하며 몇 개의 스레드로 분산할지는 시.. 2024. 8. 9.
동시성 프로그래밍 (2) - GCD/Operation에 앞서 그렇다면 동시성 프로그래밍이 필요한 이유는 무엇일까?예를 들어 테이블뷰에 다운로드 받은 이미지들을 보여주어야 할 때하나를 다운 받고 그 다음 것을 다운 받고 끝나면 또 다음 것을 받고..이런식으로 이미지를 받아와 테이블뷰에 보여주도록 처리 한다면, 한참 시간이 지나야만 모든 데이터들을 테이블뷰에서 볼 수 있게 된다. 바로 이럴 때!처리해야하는 task들을 스레드를 사용하여 빠르게 처리하기 위함이다.이미지들을 동시 다발적으로 다운로드 작업을 처리 하도록 한다면 훨씬 빠르게 테이블 뷰를 완성 시킬 수 있을 것이다. task를 스레드로 분산시키는 방법은task를 queue(대기행렬)에 보내 놓기만 하면된다.이렇게 하면 iOS는 알아서 여러 스레드로 분산시켜 동시에 일을 처리 할 수 있게 해준다. 대기열로 작업.. 2024. 7. 24.
객체지향의 사실과 오해 처음 이 책을 알게된건 개발 학원에서였다.다들 유명한 책이고 객체에 대해 잘 알려준다는 평이 많아서 읽기 시작했는데.이제 막 개발을 시작한 나에게는 무슨 말인지 도저히 이해할 수가 없더라.그래서 2장 정도까지 읽고 더 이상 읽지 않았다.그렇게 몇 년이 지나고 나서야 다시 읽어보게 되었다. 이 책에서 가장 유명한 것은 객체의 역할, 책임, 협력에 대해 '이상한 나라의 엘리스'의 등장 인물들의 관점에서 설명 해주는 부분이다.각 캐릭터들은 자신들의 역할과 책임을 가지고 있고 이들이 소통하면서 답을 얻는 과정을 객체간의 협력이라 말한다.SOLID원칙이라던지 캡슐화, 다향성 등 객체의 중요한  특징들도 함께 설명해주어서 객체지향의 장점들의 특징을 함께 이해할 수 있었다. 처음 개발을 시작했을 때 읽었을 때에는 이.. 2024. 7. 20.
동시성 프로그래밍 (1) - GCD/Operation에 앞서 미루고 미루던 동시성에 대해 공부를 시작했다.사실 그동안 아무 생각 없이 써오던 DispatchQueue...대강 그때그때 필요에 의해, 조금씩. 스레드는 뭐구나 동기 비동기는 이런거구나~ 감으로만 알았달까...이제와서야 동시성 처리에 대한 깊이있는 처리를 해보게 되면서, 진작에 좀 공부할 걸 후회를 시작으로 인강을 먼저 찾아보았다.몇 년 전 나온 async await에 대한 내용도 좋지만, 기본기 먼저 다져야겠다는 생각으로 GCD와 Operation을 선택했고.앨런님의 강의를 결재했다. iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션앨런(Allen) | 동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동.. 2024. 7. 16.
300x250