본문 바로가기

전체 글

(21)
비행기 화장실로 Mutex와 Semaphore를 아라보좌 프로세스 동기화는 멀티스레딩 환경에서 매우 중요한 개념인데요, iOS에서는 GCD라는 편리한 멀티스레딩 툴이 있지만, Mutex와 Semaphore라는 메커니즘도 있습니다. 이번 포스팅에서는 두 개념을 화장실에 빗대 이해해보려고 합니다.프로세스 동기화란?프로세스 동기화는 여러 프로세스나 스레드가 동시에 실행될 때 발생할 수 있는 문제를 해결하기 위한 방법입니다.쉽게 말해, 여러 사람이 동시에 한 가지 일을 할 때 서로 방해되지 않게 조율하는 것과 같아요.컴퓨터에서 여러 프로세스나 스레드가 동시에 실행되면 다음과 같은 문제가 발생할 수 있습니다.Race condition: 여러 프로세스가 동시에 같은 데이터를 수정하려고 할 때실행 순서/싱크 문제: 특정 작업이 다른 작업보다 먼저 실행되어야 할 때교착 상태..
햄버거집 '피크타임'으로 알아보는 CPU 스케줄링 이번 글에서는 햄버거집의 피크타임을 통해 CPU 스케줄링의 다양한 개념을 쉽게 이해해보려 합니다. 예를 들어, 평일 점심시간 많은 손님들이 햄버거를 주문할 때 주방은 전쟁터처럼 바쁘죠. 주방의 조리사들은 각 주문을 얼마나 효율적으로 처리할 수 있는지에 대한 고민을 하게 되는데요, 이것을 운영체제에서는 CPU 스케줄링이라고 합니다.CPU 스케줄링이란?제한된 자원 내에서 가장 좋은 퍼포먼스를 올릴 수 있는 방법을 찾는 과정 스케줄링의 종류선점형 vs. 비선점형 스케줄링선점형 스케줄링: 주방 매니저가 조리사를 중간에 멈추고 더 급한 주문 먼저 조리하게 하는 것과 같습니다. 예를 들어 유명한 블로거가 방문한다거나, 사장님이 최대한 빨리 조리를 해달라고 하면 하면 조리사는 현재 주문이 완료되지 않아도 최대한 빠르..
SwiftUI에서 각각 다른 모서리에 cornerRadius 주는 법 Custom RoundedCorner각 모서리에 다른 반경을 적용할 수 있는 커스텀 Shape 정의struct RoundedCorner: Shape { var radius: CGFloat = .infinity var corners: UIRectCorner = .allCorners func path(in rect: CGRect) -> Path { let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) return Path(path.cgPath) }}Shape란?SwiftUI에서 custom 2d 도..
computed property로 코드 예쁘게 적는 법 Computed property란?클래스, 구조체 또는 열거형 내에서 정의되는 프로퍼티의 한 유형이다.이 프로퍼티는 값을 직접 저장하지 않고, 대신 호출될 때마다 특정 연산을 수행하여 값을 계산해서 제공한다.쉽게 말해 저장 프로퍼티에 의존하거나 다른 계산을 통해 동적으로 값을 결정해준다.keypath 표현식(\)이란?\는 키 경로(Key Path)를 나타내는 표기법이다.키 경로는 객체의 특정 프로퍼티로의 접근 경로를 나타내고 데이터 바인딩이나 값 관찰, 컬렉션의 요소등을 다룰 때 유용하게 사용된다.type safe한 방식으로 객체의 프로퍼티에 접근할 수 있다.struct Person { var name: String}let person = Person(name: "John")let keyPath =..
빌 프린터로 알아보는 Observer 패턴 공식문서에서는 '등록된 참관인에게 정보를 방송할 수 있는 알림 발송 메커니즘입니다.' 라고 되어있는데요.. 잘 와닿지는 않죠? 쉽게 풀어 설명해보겠습니다. 집게리아에서는 손님들이 주문을 하면 그 주문이 징징이를 거쳐 스펀지밥에게 전달되는데요, 징징이가 주문을 받은 후 스펀지밥한테 어떤 주문이 들어왔는지 소리치면 스펀지밥은 조리를 시작하죠. 하지만 이런 방식은 징징이에게 많은 부담을 주고, 스펀지밥도 주문을 놓칠 수 있는 리스크가 있어요. 이 문제를 해결하기 위해 집게리아는 '빌 프린터'를 도입하기로 합니다. 징징이가 주문을 받으면 이 프린터를 통해 주문 내용이 바로 주방에 전달되는 시스템이에요. 이제 징징이는 주문을 큰 소리로 외칠 필요가 없고, 손님들은 식사에 집중할 수 있겠네요! 그리고 스펀지밥은 주..
1급 객체 넌 도데체 뭐하는 놈이냐 Swift에서 함수는 1급 객체로 간주된다..라는 말을 들어보셨나요? 저는 처음에 이 1급 객체라는 말을 보고 나서 도데체 이해가 안갔었는데요, 클로저를 공부하다가 다시 한번 마주하게 되어 다시 공부해보게 되었고, 간단하게 설명하는 글을 작성해보려합니다. 1급 객체라는 말은, 1급이라고 해서 뭐 특별한 혜텍을 받는것은 아니구요. 함수를 다른 객체와 동일하게 취급한다는 의미입니다. 함수를 변수에 할당하거나 다른 함수의 인자로 전달할 수 있으며, 함수의 반환 값으로 사용될 수 있는 것을 말해요. 1급 객체의 특징과 중요성 한마디로 요약하자면 함수를 일반 데이터처럼 다루는게 가능하다~ 라고 이해하시면 좋을 것 같네요! 이러한 특성 덕분에 고차 함수가 구현 가능하고 Swift에서 함수형 프로그래밍 패러다임이 가..
navigator area 폴더가 파란색으로 바뀐 후 xcode 내에서 파일 인식을 못하던 이슈 이슈 내배캠 최종 프로젝트를 하던 중 pbxproj 파일 충돌 해결 이후 분명 xcode 내에서 파일과 코드가 살아있는데 PobitNavigationBar를 참참조하려 했을 때 인식하지 못하던 이슈가 있었다. 특이사항은 이렇게 NaviBar 폴더만 파란 색으로 변했던 것인데.. 구글링을 해보면 추적이 되지 않는 폴더는 파란색으로 뜬다고 한다. 해결법 코드를 복붙으로 백업시켜놓고 같은 이름으로 추가하면 또 구조가 꼬일 수 있다고 하셔서 새 폴더를 다시 만든 후 새로운 파일을 새로운 이름으로 만들어 해결했다. 튜터님에 따르면 엑스코드는 논리그룹(이건 나중에 더 찾아봐야함)이기 때문에 논리관계가 다르면 이렇게 인식을 못하는 경우가 생긴다고 한다. 보통 이런 경우는 타겟 멤버쉽에서 인식을 잘 못하거나 locat..
[Refactor] DiaryViewControllerFactory() 생성 도입이유 DiaryViewController를 상속받는 일기 작성 뷰 컨트롤러들의 생성 메서드들이 각 클래스의 익스텐션에 들어있어서 너무 파편화되었다는 생각이 들었다. 해결책으로 DiaryViewControllerFactory() 클래스를 하나 새로 파서 만들어주기로 했다. 그리고 swiftApiDedignGuides에 따르면 팩토리 메서드 패턴에서 메서드의 네이밍은 make를 권장하고 있다. createWithDiaryView에서 ViewController를 반환하니 makeViewController()로 변경하기로 했다. ⛑️ 에러 발생 깔끔해지긴 했는데.. 에러파티네 Instance member 'diaryViewFactory' cannot be used on type 'DiaryViewContro..