쑤야의 개발 블로그

고정 헤더 영역

글 제목

메뉴 레이어

쑤야의 개발 블로그

메뉴 리스트

  • 홈
  • 태그
  • 분류 전체보기 (98)
    • Algorithm (52)
    • CS (0)
    • AI (15)
      • PyTorch (4)
      • 논문 (3)
      • Open3D (7)
      • DL (0)
    • iOS (30)
      • RxSwift (4)
      • Combine (4)
      • Swift (1)
    • ETC (1)
      • 기타 (1)

검색 레이어

쑤야의 개발 블로그

검색 영역

컨텐츠 검색

분류 전체보기

  • enum을 configuration으로 사용할 때 발생하는 안티 패턴 제거해보기

    2023.12.14 by 쑤야.

  • [프로그래머스] 방금 그 곡

    2023.12.13 by 쑤야.

  • RunLoop.main과 DispatchQueue.main

    2023.12.13 by 쑤야.

  • [프로그래머스] 짝지어 제거하기

    2023.12.12 by 쑤야.

  • [프로그래머스] 다음 큰 숫자

    2023.12.11 by 쑤야.

  • Combine과 함께 NotificationCenter 사용해보기

    2023.12.10 by 쑤야.

  • protocol 상속과 메서드의 매개변수를 사용하여 코드 재사용성 높이기

    2023.12.09 by 쑤야.

  • Animation 활용해 TabBar 구현하기

    2023.04.27 by 쑤야.

enum을 configuration으로 사용할 때 발생하는 안티 패턴 제거해보기

프로젝트를 진행하면서, configuration 데이터들을 각각 데이터가 필요한 View 파일에서 fileprivate 또는 private 접근제어로 선언해 줬었다. 하지만 프로젝트를 진행할수록, 데이터의 중복 선언이 많아졌다. 이로 인해 한 곳에서 관리할 필요성을 느꼈으며, enum의 안티 패턴에 대해서도 많은 공감을 했다. 이를 빠르게 개선할 필요성을 느껴 리팩토링을 진행해 보았다. configuration으로 사용하는 enum 프로젝트를 진행하다보면, enum 타입을 통해 케이스를 나열하게 된다. 만약 enum이 configuration 값을 가져야 한다면, 아래와 같이 extension에 연산 프로퍼티를 추가하고 switch 문을 통해 각 케이스 별 데이터가 반환되도록 코드를 작성할 것이다. pu..

iOS 2023. 12. 14. 00:06

[프로그래머스] 방금 그 곡

로직 m에 대해 악보에 포함된 #을 제거준다. 특정 문자열을 포함하는지 여부를 확인해야 하는데, ABC#과 ABC는 모두 ABC를 포함하기 때문이다. C#을 c로 변환하는 등, C와 구분될 수 있도록 변환해준다. 결과값을 담을 변수를 선언해주는데, 곡의 제목과 재생시간을 같이 담을 수 있는 자료구조를 선택한다. 시간을 분 단위로 변환하여 재생시간을 구한다. m과 마찬가지로 주어진 악보 정보에 대해 #을 제거준다. 악보 정보를 활용하여 재생 시간만큼의 전체 악보를 생성한다. 문자열 포함 여부를 통해 찾고 있는 곡이 맞는지를 확인한다. 찾고 있는 곡이 맞다면, 재생시간 비교를 한다. 재생 시간이 더 길다면 result를 갱신해준다. 코드 func solution(_ m:String, _ musicinfos:..

Algorithm 2023. 12. 13. 17:35

RunLoop.main과 DispatchQueue.main

비동기 프로그래밍에서 UI 업데이트를 진행해야 할 때는 반드시 메인 스레드에서 동작하도록 설정해줘야 한다. Combine의 경우 receive(on:) 메서드에 스케줄러를 설정해 주면 된다. 이때 RunLoop.main과 DispatchQueue.main을 통해 메인 스레드 지정이 가능한데, 둘의 차이점에 대해 궁금해져서 구글링을 해보았다. Combine의 스케줄러 Combine의 스케줄러는 언제, 어떻게 클로저를 실행시킬 지 정의한다. 스케줄러들은 Scheduler 프로토콜에 순응하며, RunLoop.main과 DispatchQueue.main도 이 프로토콜을 채택하고 있다. URLSession.shared .dataTaskPublisher(for: URL(string: "https://picsum.p..

iOS/Combine 2023. 12. 13. 00:26

[프로그래머스] 짝지어 제거하기

접근 처음에 시간초과가 날 로직밖에 생각이 안났다. 문자열을 한 바퀴만 돌린다고 해도 100M이다. O(N log N)일 경우, 딱 마지노선이라 생각했기 때문에 무조건 O(N)으로 끝내야겠다고 생각했다. 문자열에서 조건이 맞으면 문자들을 제거해야 하기 때문에 빠르게 배열의 중간 원소를 제거할 수 있는 알고리즘과 자료구조가 무엇인지를 생각했다. 배열의 원소를 빠르게 제거해야 하는 경우 → 스택 활용 로직 문자열의 원소에 대해 반복문을 돌린다. 각 문자들을 스택에 저장한다. 스택의 마지막 문자와 현재 문자가 동일할 경우, 스택의 마지막 문자를 제거한다 → O(1) 반복문이 종료된 이후, 스택에 문자가 남아있는 경우 성공적으로 수행하지 못한 것. 반대로 빈 스택일 경우 성공적으로 수행할 수 있음을 의미한다. ..

Algorithm 2023. 12. 12. 14:56

[프로그래머스] 다음 큰 숫자

https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 로직 1. 0번째 인덱스가 1이거나, 0이 아예 존재하지 않을 경우 0번째 인덱스에 0 삽입. '01' 이 나타나는 마지막 인덱스를 찾는다. 마지막 '01' 이후에 등장하는 1의 개수를 카운팅한다. 마지막 '01'을 '10'으로 스와이프해준다. 이후 등장하는 1은 끝자리로 몰아준다. 코드 def solution(n): binary = list(format(n, 'b')) if '0' not in ..

Algorithm 2023. 12. 11. 13:42

Combine과 함께 NotificationCenter 사용해보기

문서 살펴보기 https://developer.apple.com/documentation/foundation/notificationcenter NotificationCenter | Apple Developer Documentation A notification dispatch mechanism that enables the broadcast of information to registered observers. developer.apple.com 1. post object: notification을 보내는 객체 userInfo: notification에 추가로 담아야 하는 정보 처음에 object에 보내고 싶은 데이터를 보내는 줄 알았다. (사실 그냥 편하게 딕셔너리 사용안하고 데이터 전송하고 싶었던 것..

iOS/Combine 2023. 12. 10. 18:21

protocol 상속과 메서드의 매개변수를 사용하여 코드 재사용성 높이기

문제 상황 A/B 프로젝트의 홈 화면에 토픽 세부 액션과 댓글에 대한 바텀시트를 띄워주어야 한다. 이미 토픽 세부 액션 바텀시트를 띄워주는 기능은 구현한 상태였다. collection view cell에서 액션을 받아 home view controller에게 전달해줘야 하므로, delegate 패턴을 사용했다. 이때 선언하고 채택해준 프로토콜은 TopicBottomSheetDelegate. public protocol TopicBottomSheetDelegate: AnyObject { func show() } 새로운 기능인 댓글 바텀 시트 또한 collection view cell에서 액션을 받아 view controller에게 전달해줘야 한다. 이를 위해 ChatBottomSheetDelegate 프로..

iOS 2023. 12. 9. 18:21

Animation 활용해 TabBar 구현하기

나는 라이브러리를 최대한 사용하지 않으려고 하는 편이다.. 아래 첨부한 기능인 Tab Item 전환 기능을 TabMan 라이브러리를 활용하지 않고 구현해보고자 한다. 이번 포스팅에서 다룰 내용은 탭 상단(아이템) 부분 Animation 적용에 대해서만 다룰 예정이다. 각 Tab에 대한 스크롤/페이징 되는 UI는 현재 프로젝트에서 중요성이 떨어지는 부분으로 나중에 시간이 남으면 추가해 보도록 하겠다. CollectionView 데이터 바인딩은 이미 되어 있다는 가정하에 설명을 진행하도록 하겠다. 1. TabBar Item 선택 감지 changeSelectCell 메서드 내부에서 UI 변경 작업을 진행했다. 아래 작성한 코드에서는 생략했지만 changeSelectCell 메서드 이외에도 처리한 작업들이 있기..

iOS 2023. 4. 27. 20:54

추가 정보

인기글

최신글

페이징

이전
1 ··· 7 8 9 10 11 12 13
다음
TISTORY
쑤야의 개발 블로그 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바