4월, 2022의 게시물 표시

iOS Use a function as a parameter

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS Use a function as a parameter를 알아보겠습니다. ​ Swift에서는 파라미터로 함수를 넣을 수 있습니다. ​ 어떤 건지 SwiftUI Button으로 한 번 예를 들어볼게요. ​ SwiftUI 문서를 보면, Button을 처음 정의할 때 다음과 같은 것이 필요합니다. 위의 문서를 보면, action: () -> Void, lable: () -> Label이 보입니다. 이 뜻은 action과 label에 함수가 필요하다는 뜻입니다. ​ 아래처럼 Button에 소괄호를 열고 바로 파라미터를 넣을 수 있습니다. 다른 방식으로는 중괄호를 연속적으로 열어서 처리할 수 있습니다. 첫 번째 중괄호가 action을 의미합니다. label에 Text()가 들어가는 이유는 반환값이 Label로 존재하기 때문입니다. ​ ​ 끝. 카테고리: iOS

iOS Swift Error and throw

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS Swift Error and throw를 알아보겠습니다. ​ Swift에는 예외 처리를 할 수 있게 해주는 기능이 있습니다. do, try, catch, throw 등입니다. ​ ​ 우선 예외 처리를 위해서는 오류를 위한 타입이 Error인 enum이 필요합니다. ​ 저는 예시로 두 가지 정도만 할 거라서 두 개의 case를 만들었습니다. 함수 끝에 throws를 추가해 줍니다. 그리고 오류를 발생시킬 위치에 throw를 배치하고 위에 정의한 enum을 적습니다. 이런 throw를 포함하는 함수를 사용하기 위해서는 do, catch, try라는 문구가 필요합니다. 함수 앞에 try를 적어줍니다. 그리고 오류가 발생하면 밑에 문장은 실행하지 않고 catch로 넘어갑니다. ​ ​ catch를 상황에 맞게 조절할 수 있습니다. 오류의 내용을 보고 싶다면, error.localizedDescription을 사용합니다. myErrorCode error 0으로 표기되어 myErrorCode.outOfRange인 것을 알 수 있습니다. ​ ​ 끝. 카테고리: iOS

iOS Swift function return with multiple values

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS Swift function return with multiple values를 알아보겠습니다. ​ Swift의 함수에서 두 개 이상의 값을 반환하는 경우 어떻게 반환하도록 만들어야 할까요? 이번 시간에 다뤄봅시다. ​ ​ 리턴 값은 튜플을 사용합니다. Swift의 튜플은 딕션어리랑 비슷해 보이지만 "(큰따옴표)가 안 들어간다는 차이가 있습니다. 받은 값을 위에서 지정한 .one, .two로 접근할 수 있습니다. ​ ​ ​ 변수 명을 지정하지 않아도 됩니다. 그냥 타입만 적어주면 됩니다. 순서대로 .0, .1로 접근 가능합니다. ​ ​ ​ ​ 반환되는 값을 한 번에 여러 변수에 지정할 수 있습니다. 끝. 카테고리: iOS

iOS Swift Switch

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS Swift Switch를 알아보겠습니다. ​ Switch는 if 문을 대신해서 사용할 수 있는 분기문입니다. ​ Swift에서 switch를 어떻게 사용하는지 알아봅시다. ​ switch를 적은 후에 검사할 변수를 적어줍니다. 그리고 중괄호 안에 각 각의 case 들을 적습니다. case에는 :(쌍점)으로 마무리를 지어줍니다. case에 속하면 그 부분만 실행하고 종료됩니다. 일반적이지 않지만, 만약 밑에 경우도 같이 실행하고 싶다면 fallthrough를 적어줍니다. 끝. 카테고리: iOS

길 ​ 내가 언제, 쉬운 길을 택한 적이 있었던가? ​ -노재화, 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 4』, 부크크(2022), 32 쪽. 카테고리: My Book Story

정보보안기사 12

정보보안기사 ​ - YARA 멀웨어 분석가를 돕기 위해 만들었다. 멀웨어를 분류하고 식별한다. 문자열 패턴, 이진수 패턴을 기반으로 탐지한다. Virustotal에서 오픈소스로 제공된다. ​ - 자산 조직이 보호해야 할 대상으로 정보, 하드웨어 등 조직 운영 과정에서 획득한 인적, 물적 또는 유형, 무형의 재화나 서비스. ​ - 위협 자산에 손실을 초래할 수 있는 원치 않는 사건의 잠재적 원인이나 행위자. ​ - 취약성 자산의 잠재적 속성으로서 위협의 이용 대상으로 정의되지만 정보보호 대책 미미로도 정의. ​ - 정보보호대책 위협에 대응하여 자산을 보호하기 위한 물리적, 기술적, 관리적 대응책. ​ - 위험 원하지 않는 사건이 발생하여 손실 또는 부정적인 영향을 미칠 가능성. ​ - 정보보안 거버넌스 정보의 무결성, 서비스의 연속성, 정보자산의 보호를 위한 것으로, 기업 거버넌스의 부분집합으로서 전략적 방향을 제시하며 목적 달성, 적절한 위험관리, 조직 자산의 책임 있는 사용, 기업 보안 프로그램의 성공과 실패가 모니터링됨을 보장하는 것이다. ​ - DGA(Domain Generation Algorithm) DGA는 도메인을 동적으로 변경해 주는 알고리듬이다. 그래서 악성 프로그램이 탐지 프로그램을 우회할 때 사용한다. ​ - 상세 위험 분석 절차 자산 분석 - 위협 평가 - 취약성 평가 - 정보보호 대책 평가 - 잔여 위험평가 ​ - 안드로이드 딥 링크 특정 URL을 열 때, 해당 앱에서 그 URL을 처리할 수 있게 해주는 기능. ​ - prepared statement 데이터베이스 관리 시스템(DBMS)에서 동일하거나 비슷한 데이터베이스 문을 높은 효율성으로 반복적으로 실행하기 위해 사용되는 기능이다. 템플릿 안으로 특정한 상숫값이 매 실행 때마다 대체된다. 입력 값이 SQL 명령이 아닌 매개 변수로 처리된다. ​ - DRDoS (분산 서비스 거부 공격) 출발지의 IP를 공격 대상으로 변경하여 정상 요청을 보내면 대량의 응답 값이 전달되는 것을 이용한 공격

iOS How to use ForEach

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS How to use ForEach를 알아보겠습니다. ​ 반복되는 화면을 구성할 때 사용하는 것이 ForEach입니다. ​ ForEach 괄호에는 배열, 리스트, 범위 등이 들어갈 수 있습니다. ​ half-open range를 사용한 모습입니다. ClosedRange를 사용한 모습입니다. id 키워드를 사용하여, 어떤 걸로 구분할지 정합니다. 여기서는 그냥 범위이기 때문에 자기 자신 \.self를 사용하였습니다. 만약 특정한 id가 있는 배열이라면 그 id를 사용하면 됩니다. 반복되는 것을 변수 없이 사용하려면, number in이라는 문구를 지우고 $0를 사용하면 됩니다. 배열을 사용한 모습입니다. 끝. 카테고리: iOS

iOS When use the '$'?

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3, SwiftUI ​ iOS When use the '$'를 알아보겠습니다. ​ SwiftUI '$' 표시는 Struct의 데이터를 다른 Struct에서 변경할 때 사용합니다. 간단한 예로 TextField가 있습니다. TextField 문서를 보면 Binding을 입력하는 값이 있습니다. 이 Binding을 표시해주는게 $ 입니다. 아래와 같이 myTexInput을 변경할 수 있게 @State 선언을 해주고 이 변수를 TextField 두 번째 인자로 넣었습니다. 오류가 나네요. 오류의 내용은 다음과 같습니다. Cannot convert value 'myTextInput' of type 'String' to expected type 'Binding<String>', use wrapper instead insert '$' $표시를 해줌으로써, TextField에서 myTextInput의 값을 자유롭게 변경 할 수 있게 만들어 줍니다. 끝. 카테고리: iOS

와촌 휴게소(포항 방향) 추천 메뉴

 와촌 휴게소(포항 방향) 추천 메뉴를 알아보겠습니다. 2022.04.14 소고기국밥 - 8,900 원 (베스트, 추천) 된장뚝배기 - 7,900 원 (추천) 대추고추장비빔밥 - 8,500 원 (베스트, 추천) 솥밥제육볶음 - 10,500 원 (추천, 프리미엄) 가족과 함께 여행 갈 때 사용하세요. 전국 고속도로 휴게소 메뉴는 [휴게소 메뉴] 앱에 있습니다. https://play.google.com/store/apps/details?id=starlight.jaehwa.restaurantarea 감사합니다. 끝.

iOS When use the '@State'?

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3, SwiftUI ​ iOS When use the '@State'를 알아보겠습니다. ​ struct의 변수를 변경할 수 있게 만들 때 사용합니다. ​ ​ Xcode에서 SwiftUI를 사용하다 보면 다음과 같은 황당한 경우를 맞이합니다. 오류를 조금 더 자세히 들여다봅시다. Left side of mutating operator isn't mutable: 'self' is immutable. 변경할 수 있게 var로 선언을 했음에도 변경할 수 없다고 나옵니다. 신기하군요. ​ 자세히 들여다보면 우리가 작업하는 ContentView는 struct입니다. struct는 기본적으로 immutable이라고 생각하시면 됩니다. ​ 자, 그럼 이것을 변경 가능하게 만드는 방법을 알아봅시다. 바로 '@State'를 적어주면 됩니다. 오류가 없어졌습니다. 내부에서만 사용하려면 private를 붙여줍니다. 미리 보기를 보면 잘 작동합니다. 끝. 카테고리: iOS

뭐 같은 세상

뭐 같은 세상 ​ 세상이 뭐 같다면 뭐 같은 것 중에서 가장 아름다운 걸 찾아내겠다. ​ - 노재화, 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 4』, 부크크(2022), 24 쪽. 카테고리: My Book Story

iOS Resume preview shortcut in Xcode

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3, SwiftUI ​ iOS Resume preview shortcut in Xcode를 알아보겠습니다. ​ Xcode에서 코드를 수정하게 되면 계속해서 미리 보기 창을 새로고침 해줘야 합니다. 아래처럼 마우스로 Resume을 눌러주면 되지만, 계속 누르면 귀찮습니다. 그래서 단축키를 알아봅시다. 코드가 쳐져 있는 편집기를 누르고 ⌥(option) + ⌘(command) + p를 눌러줍니다. 짜잔... 마우스 없이 화면을 보이게 했습니다. 뭔가 우크라이나가 생각나네요. 우크라이나에게 평화를. 끝. 카테고리: iOS

iOS Show file extensions in Xcode

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3, SwiftUI ​ iOS Show file extensions in Xcode를 알아보겠습니다. ​ Xcode 창에서 파일 확장자를 보이게 하려면 어떻게 해야 할까요? 아래 사진을 보면, 확장자가 보이지 않습니다. Xcode - Preferences...로 갑니다. 아래의 File Extensions를 Show All로 변경해 줍니다. 그러면 이제 확장자까지 보입니다. 끝. 카테고리: iOS

iOS Change a simulator device

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3, SwiftUI ​ iOS Change a simulator device를 알아보겠습니다. ​ Xcode에서 만든 코드를 실행할 때, 실제 기기에서도 할 수 있지만, 가상 기기에서 실행할 수 있습니다. Xcode에서 제공하는 가상 기기를 simulator라고 합니다. ​ 한 번, 가상 기기를 iPhone 13 Pro로 변경해 봅시다. ​ Xcode에서 프로젝트를 하나 엽니다. 상단 화살표가 가리키는 부분을 마우스로 누릅니다. 아래와 같이 기기를 선택할 수 있는 창이 나옵니다. iPhone 13 Pro를 선택해 줍니다. 그러면 이제 iPhone 13 Pro simulator에서 우리가 만든 앱이 실행되는 것을 볼 수 있습니다. ​ ​ ​ 끝. 카테고리: iOS

iOS Make a SwiftUI project

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3, SwiftUI ​ iOS Make a SwiftUI project를 알아보겠습니다. ​ Xcode에서 SwiftUI를 사용하는 프로젝트를 만들어 봅시다. SwiftUI는 Xcode 11부터 추가되었습니다. ​ 다음과 같은 창이 나옵니다. iOS - App을 선택하고 Next를 누릅니다. Product Name에는 프로젝트 이름을 적어줍니다. Team은 지금은 필요 없습니다. Organization Identifier에는 앱 빌드 시 생성되는 폴더 이름을 적습니다. (아무거나 '.'으로 분리해서 적으면 됩니다) Interface에는 SwiftUI Language에는 Swift를 선택합니다. ​ DataBase가 필요하면 Use Core Data를 선택합니다. Test가 필요하면 Include Tests를 누릅니다. Next를 누릅니다. ​ ​ 경로를 선택하고 Create를 누릅니다. 다음과 같은 창이 나옵니다. 짜잔. SwiftUI 프로젝트를 만들어 봤습니다. ​ ​ ​ 끝. 카테고리: iOS

iOS Install the Xcode

이미지
운영 체제: macOS Monterey 12.3.1 ​ iOS Install the Xcode를 알아보겠습니다. ​ ​ iOS 앱을 만들기 위해서는 Xcode가 필요합니다. 여기서는 SwiftUI를 사용해서 앱을 만들어 볼 건데요. 우선 Xcode 설치가 필요합니다. https://developer.apple.com/xcode/swiftui/ 위의 페이지에서 아래로 내려가면 Download Xcode가 있습니다. 눌러줍니다. 로그인을 하면 다음 페이지가 나옵니다. 약관에 동의를 하시면 체크를 하고 Submit을 눌러줍니다. Release를 누르면 최신 버전의 Xcode가 나옵니다. 여기서는 13.3이네요. 저는 이미 다운이 되었기 때문에 Download 버튼이 보이지 않네요. 이걸 받아줍니다. ​ ​ 실행해서 설치해 주면 됩니다. ​ ​ 설치가 다 되면 실행해 봅시다. 이렇게 나오면 설치 성공입니다! 제가 삭제해서 다시 설치하는 걸 보여드려야 하는데, 이거 설치하는 데 너무 오래 걸리더라고요. 그래서 그냥 말로 적습니다. ​ ​ ​ 끝. ​ 카테고리: iOS

Android Use the Text To Speech(TTS)

이미지
사용 언어: Kotlin 1.6.20 사용 버전: Android Studio 2021.1.1 Patch 2 ​ 안드로이드 Use the Text To Speech(TTS)를 알아보겠습니다. ​ 안드로이드에는 내장되어 있는 TTS 기능이 있습니다. Text To Speech(TTS)는 글자를 소리 내어 읽어주는 기능을 말합니다. 이것을 어떻게 사용할 수 있게 하는지 알아봅시다. ​ ​ 우선, 안드로이드 휴대폰에 내장된 TTS를 사용하기 위해서는 manifest에 설정이 필요합니다. android 11 이상부터 아래 설정이 필요한 것 같네요. <action android:name="android.intent.action.TTS_SERVICE"/> ​ AndroidMenifest.xml에 적어줍니다. TTS 사용할 코드 파일로 갑니다. 여기서는 MainActivity에서 사용해 보겠습니다. onCreate에 TextToSpeech()를 적습니다. 괄호 안 context에는 MainActivity인 this를 적고, listener는 {}로 람다식으로 표현했습니다. 람다 안에 status는 TTS가 잘 실행되었는지 상태가 나타납니다. ​ ​ textToSpeech를 lateinit으로 만들고 그것을 TextToSpeech를 받습니다. 상태가 TextToSpeech.SUCCESS 이면 초기화 성공입니다. 이제, 말하기에 사용할 언어를 설정합니다. setLanguage를 이용하고, 지역은 Locale.getDefault()로 휴대폰 언어 지역을 사용합니다. 이제, 언어 설정까지 완료되었으니 들어볼까요? speak()를 사용하여 듣습니다. text는