싱글톤은 전역적으로 접근할 수 있는 클래스의 공용 인스턴스다. 음향 효과를 재생하기 위한 오디오 채널이나 HTTP 요청을 하기 위한 네트워크 관리자와 같이 앱을 통해 공유되는 리소스나 서비스에 대한 통합 액세스 포인트를 제공하는 방법으로 자신만의 싱글톤을 만들 수 있다. 싱글톤 만들기간단한 싱글톤은 static type 프로퍼티를 이용하여 만들 수 있으며 여러 스레드에서 동시에 접근을 해도 한번만 초기화되는 특징이 있다.class Singleton { static let shared = Singleton()}만약 초기화 외 추가적인 작업을 하고 싶다면, 전역 상수인 싱글톤에 값을 반환할 수 있다class Singleton { static let shared: Singleton = { ..

전체 글
Link는 앱에서 웹을 연결할 수 있도록 하지만 사파리 앱을 통해서 웹을 열게 됩니다. 하지만 사용자의 관심을 이끌어내는 것은 중요하기 때문에 앱 안에서 사파리 웹을 열 수 있도록 SafariServices 프레임워크를 제공합니다. SafariServices 프레임워크는 UX를 향상시키는데 도움이 되는 프레임워크입니다. 이 프레임워크는 SFSafariViewController 클래스를 만들어 독자적인 뷰에서 웹페이지와 툴을 나타낼 수 있는 ViewController를 제공합니다. 다음은 SFSafariViewController의 initializer입니다.SFSafariViewController(url: URL, configuration: Configuration) - 이 initializer는 새로운 ..
데이터의 출처에 값을 읽고 쓸 수 있는 프로퍼티 래퍼 타입이다 Overviewbinding은 저장하는 데이터와 데이터를 바꾸고 바뀐 값을 띄우는 view와 함께 연결시키는 양방향 연결을 만들어준다.binding은 데이터를 직접 저장하는 대신 프로퍼티를 데이터 출처(어디에 저장되어 있든 상관없음)와 연결시켜준다. 예를 들어 play 버튼과 pause 버튼을 만들때 binding을 만들어 부모 뷰에 있는 프로퍼티와 연결시킬 수 있다.struct PlayButton: View { @Binding var isPlaying: Bool var body: some View { Button(isPlaying ? "Pause" : "Play") { isPlaying.toggle..
클러스터링이란 유사한 테이터셋들 중 서로서로 찾아내고 묶어내는 것 유사한 인스턴스들을 식별하는 것이 중요합니다. 예를 들어 다음과 같은 비슷한 종류의 꽃이 있다고 가정했을 때 인간은 간단하게 꽃이 서로 유사하다는 것을 확인할 수 있으나 컴퓨터는 못하기 때문에 가능하도록 만들어야 합니다. 클러스터링과 분류의 차이 * 분류와 동일하게 인스턴스를 특정 그룹에 배정 * 분류와 다르게 비지도 (감독을 받지 않는, unsupervised) 업무 처리 - 분류는 인간의 지도가 필요함 (데이터가 무엇인지를 인간이 지정을 해야함) - 클러스터링은 인간의 지도 없음 (각 데이터가 어떤 데이터인지 스스로 판단, 인간 필요 X) 첫 번째 그림은 레이블된 데이터셋이며, 로지스틱 회귀, SVM, 랜덤 포레스트 분류기 같은 알고리..
차원 축소란 훈련 샘플이 수천-수백만 개의 특성을 가질 때 발생할 수 있는 문제를 해결하기 위해서 나온 개념 특성의 개수가 너무 많으면 훈련을 느리게 할 뿐만 아니라, 좋은 솔루션을 찾기 어렵게 만들며 이런 문제를 차원의 저주라고 합니다. 다행히도 실전 문제에서는 특성의 수를 크게 줄이는 (차원 축소) 방법으로 해결합니다.* 예를 들어 MNIST 이미지의 경우 경계에 있는 픽셀은 거의 항상 흰색이므로 훈련셋에서 제거해도 많은 정보를 잃지 않습니다.* 특성 중요도를 보더라도 '흰색 픽셀'들은 분류에 크게 중요하지 않음을 확인할 수 있습니다.* 더구나 인접한 두 픽셀은 '종종 많이 연관되어' 있으므로 두 픽셀을 하나로 합치더라도 (예, 두 픽셀 강도를 평균) 정보 손실은 많지 않습니다. - 차..
릿지 회귀는 규제가 추가된 선형 회귀 버전입니다 릿지 회귀는 또한 규제항이 비용 함수에 추가됩니다. 이는 학습 알고리즘을 데이터에 맞추는 것뿐만 아니라 모델의 가중치가 가능한 한 작게 유지되도록 노력합니다. 규제항은 훈련하는 동안에만 비용 함수에 추가됩니다. 이것은 모델의 성능을 규제가 없는 성능 지표로 평가하게 됨을 의미합니다하이퍼파라미터 𝜶는 모델을 얼마나 규제할지 조절합니다. 𝜶 = 0이면 릿지 회귀는 선형 회귀와 같아집니다. 𝜶가 아주 크면 모든 가중치가 거의 0에 가까워지고 결국 데이터의 평균을 지나는 수평선이 됩니다 (즉 규제가 없음을 의미) 편향인 W는 규제되지 않습니다. W의 특성의 가중치 벡터(W1에서 Wn)라고 정의하면. 규제항은 다음과 같습니다.위에서 ||﹒||2가 가중치 벡터의..
가장 먼저 Model, View, ViewModel 를 준수하는 아래와 같은 파일 계층을 만들어줍니다. Utils -> Constants 에서 API 키나 URL 같은 정적인 코드를 저장합니다.struct Constants { // 정적인 코드를 만드는 곳 static let API_KEY = "YOURAPIKEY" // OMDBAPI} Model -> Movie 파일을 만들어 Codable 프로토콜을 준수하는 Movie 구조체를 만들어 API 로부터 받을 데이터의 형식을 맞춥니다.struct MovieResponse: Codable { let movies: [Movie] private enum CodingKeys: String, CodingKey { case m..
처음 사용자가 로그인 화면에서 서버로부터 로그인을 요청하게 될 때 다음과 같은 Request로 HTTP 요청을 하게됩니다. URL은 접근할 서버의 주소, Method는 요청을 위한 POST, Body에는 서버에 전송할 유저이름과 비밀번호를 담아서 보냅니다. 이후 Request를 받은 서버는 Response 를 다시 클라이언트에 전송합니다. 그럼 이후 서버에서 Response 로 사용자한테 로그인에 대한 결과를 전송합니다. 유저에 대한 데이터를 가져오는 URL은 모든 사람들이 접속할 수 있기에 만약 익명에 사람이 A라는 사람의 데이터를 가져오는 URL을 통해 서버에 접근한다면 서버는 그 유저가 검증된 유저인지를 확인할 방도가 없으므로 보안적인 문제가 발생합니다. 이런 문제를 해결하기 위한 JWT(JSON ..