본문 바로가기

분류 전체보기720

[iOS 앱 개발] Swift 파일 쓰기 & 읽기 Swift에서 파일을 쓰거나 읽을 때 문자열을 URL로 변경해야 합니다. import Foundation let filePath = "file:///workspace/Swift/Sources/data.json" let fileUrl = URL(string : filePath) 문자열을 파일로 쓸 때 Stirng의 메소드 write를 쓰면 간단하게 파일을 생성 할 수 있습니다. import Foundation let filePath = "file:///workspace/Swift/Sources/data.json" let fileUrl = URL(string : filePath) let text = "Hello World" try text.write(to: fileUrl!, atomically: true, .. 2022. 10. 12.
[iOS 앱 개발] Swift 중첩 구조체 사용하기 대부분의 OpenAPI는 XML, JSON 등의 형식으로 데이터를 제공하고 있습니다. JSON은 XML보다 핸들링하기도 좋고 가독성도 좋아서, 앱 개발 시 JSON을 많이 활용하고 있습니다. Swft에서 JSON을 핸들링하기 위해서 포로토클 Codable을 상속 받아서 구조체를 구현하게 됩니다. OpenAPI의 JSON은 다양한 형식으로 구성되어 있어서 여러 구조체를 조합해야 하는 경우가 대부분일겁니다. 그래서 중첩 구조체로 구현하여, 각각의 구조체를 하나의 구조체로 구현해봅니다. 카카오의 검색 OpenAPI의 결과 { "meta": { "total_count": 6033, "pageable_count" : 800, "is_end": false }, "documents": [ { "title": "AOA.. 2022. 10. 7.
[iOS 앱 개발] Swift 함수에 참조 매개변수 전달 Swift의 함수에 매개변수를 참조로 전달 할 수 있습니다. 즉 변수를 지정하고, 매개변수를 참조로 전달 후 함수내에서 매개변수의 값이 변경되면 함수 밖에서도 해당 변수의 값은 변경이 됩니다. syntax는 inout으로 지정하며 함수 문법은 아래와 같습니다. func [함수명]([파라미터 이름]: inout [데이터 타입]) -> [반환 타입] { return [반환 값] } 일반함수 예로 두변의 값을 서로 교체하고 싶을 때 튜블을 리턴하는 함수를 생성하여 두 변수의 값을 교체하는 예제는 아래와 같습니다. 참조 매개변수로 전달하지 않고, 리턴 값으로 처리하는 코드입니다. func swapInts(a : Int, b : Int) -> (a : Int, b : Int){ return (b, a) } var.. 2022. 10. 5.
[iOS 앱 개발] Swift 메소드/생성자 오버로딩(Overloading) OOP 프로그래밍에서 메소드를 오버로딩 하는 것은 매우 효율적으로 프로그래밍 할 수 있는 방법입니다. Swift를 스터디하면서 메소드의 파라미터의 이름을 지정하여 메소드를 호출하는 것에 익숙하지 않습니다. 자바, C# 등에서는 파리미터의 순서에 따라 메소드를 호출 하기 때문에 이것에 익숙한 것 때문에 Swift의 메소드에서 파라미터 이름을 지정하는 것에 불편을 느끼곤 했습니다. 자바에서 아래와 같이 코드를 작성하면 동일 메소드에 동일 타입의 파라미터이기 때문에 컴파일 오류가 발생합니다. (참고, 파리미터의 갯수는 같지만, 파라미터의 타입이 다르면 컴파일 오류가 발생하지 않습니다.) public class Test{ public void hello(String name){ ... } public void .. 2022. 9. 23.
HTML의 특정 Input에 붙여넣기 못하게 처리하는 방법 HTML의 특정 Input에 붙여넣기를 할 수 없도록 처리가 필요한 경우가 있습니다. 이럴경우 paste 이벤트를 등록하여 처리 할 수 있습니다. 아래의 소스를 참고하세요. 이름 설명 2022. 9. 22.
[iOS 앱 개발] Swift 형 체크(is) Swift 클래스나 구조체의 형을 판별하기 위한 방법으로는 is를 사용합니다. 변수 is Type 아래의 코드는 if절에서 각 변수의 형을 체크하는 소스입니다. Int, Double, String의 형을 체크하여 print 하는 구조입니다. var intValue : Int = 10 var doubleValue : Double = 20.1 var stringValue : String = "ABCDEFG" var boolValue : Bool = true var valueArr : [Any] = [intValue, doubleValue, stringValue, boolValue] for v in valueArr { if v is Int { // 정수 체크 print("정수값 : \(v)") } else i.. 2022. 9. 22.
[iOS 앱 개발] Swift 다형성(protocol, class) 예제 코드 Swift에서 다형성 구현한 간단하 예제입니다. protocol과 class를 사용하여 구현된 소스입니다. protocol Shape { func draw() } class Rectangle : Shape { var width : Int var height : Int init (width : Int, height : Int){ self.width = width self.height = height } func draw(){ print("Width : \(width), Height : \(height)"); } } class Circle : Shape { var x : Int var y : Int var r : Int init (x : Int, y : Int, r : Int){ self.x = x self.. 2022. 9. 20.
[iOS 앱 개발] Swift 구조체/클래스 if 절 비교를 위한 "==" 연산자 구현 Swift에서 새로 새성한 구조체 또는 클래스에서는 두 인스턴스를 비교 연산자(==, !=)는 존재하지 않습니다. 구조체와 클래스를 비교하기 위해서 비교 연산자에 대한 구현이 필요합니다. 아래의 코드는 비교 연산자를 구현한 소스입니다. 구조체 struct Rectangle { var width : Int = 0 var height : Int = 0 } // 비교 연산자 구현 extension Rectangle : Equatable { static func == (a : Rectangle, b : Rectangle) -> Bool { return a.width == b.width && a.height == b.height } } var rect1 = Rectangle(width : 10, height : .. 2022. 9. 19.
Javascript 숫자 반올림 및 천자리 ","표시 함수 숫자를 특정 소숫점 자리에서 반올림하거나 천자리를 ","를 넣는 작업을 많이 합니다. 자바스크립트로 숫자 반올림 및 천자리 ","표시하는 함수를 만들어서 사용하게 되었습니다. 아래의 함수를 참고하세요. function roundNumberToString(value, roundCnt){ try{ var round = 1; for(var i = 0 ; i < roundCnt ; i++){ round *= 10; } var numValue = parseFloat(value); if(isNaN(numValue)){ throw "Not Number"; } // roundCnt 만큼 반올림 및 수숫점 자리 고정 var returnValue = (Math.round(numValue*round)/round).toFix.. 2022. 9. 19.
[iOS 앱 개발] Swift 클로저(Closure), 후행 클로저 자바 .Net에서 람다식(Lambda) 즉 익명함수로 알고 있던 것이 Swift에서는 클로저(Closure)라고 합니다. 클로저를 사용하면 코드는 간결해지지만, 불필요하게 사용하면 가독성이 떨어질 것 같습니다. 람다식을 거의 사용하지 않고 있지만, Swift에서는 친숙해지기로 했습니다.^^ 클로저 표현식 구문 { (파라미터) -> 리턴타입 in 실행 구문 } 파라미터와 리턴이 없는 경우 var hello = {() -> Void in print("Hello") print("World") } hello() 파라미터는 있고, 리턴이 없는 경우 var hello = {(name:String) -> Void in print("Hello") print(name) } hello("Korea") 파라미터와 리턴이 있.. 2022. 9. 16.
[iOS 앱 개발] Swift 함수(func) Swift에서 함수를 정의하는 방법입니다. 간단히 코드로 정리했습니다. 함수 문법 func [함수명]([파라미터 이름]:[데이터 타입]) -> [반환 타입] { return [반환 값] } 파라미터/반환 값 없는 함수 func sayHello() { print("Hello World") } sayHello() 반환 값 있는 함수 func getHello() -> String{ return "Hello World" } print(getHello()) 파라미터/반환 값 있는 함수 func getHello(name : String) -> String{ return "Hello \(name)" } print(getHello(name : "JJ")) 파라미터 이름 없이 호출 할 수 있는 함수 파라미터 이름 앞에 .. 2022. 9. 6.
[iOS 앱 개발] Swift Dictionary 프로그래밍을 할 때 Dictionary 자료 구조 유용하게 사용하고 있습니다. C#에서는 Dictionary, 자바에서는 Map(HashMap, TreeMap 등) 등을 활용하고 있습니다. Swift의 Dictionary에 대한 간단한 사용법입니다. 빈 Dictionary 생성 var dict1 = [Int : String]() var dict2 : [Int : String] = [:] var dict3 : Dictionary = [Int : String]() var dict4 : Dictionary = [:] var dict5 : Dictionary = Dictionary() Dictionary 초기화 var dict1 = [1:"A", 2:"B", 3:"C"] var dict2 : [Int : Str.. 2022. 9. 5.
[iOS 앱 개발] Swift Set 컬렉션의 유용한 Set을 사용하는 법을 간단하게 소개합니다. Set은 중복 없이 값을 저장 할 수 있어서 코딩 시 유용하게 사용 할 수 있습니다. 예로 리스트 화면의 각 항목을 여러번 수정을 할 수 있는데, 이렇게 수정된 목록을 Set에 저장하면 하나의 수정된 항목만 관리 할 수 있습니다. 빈 Set 초기화 var intSet : Set = [] var strSet = Set() Set 초기화 var intSet : Set = [1,2,3] var strSet : Set = ["A", "B", "C", "A", "C"] // 중복 값은 제거됨 > ["A", "B", "C"] Set에 추가하기 var strSet : Set = ["A", "B", "C"] strSet.insert("D") Set에서 삭제하.. 2022. 9. 2.
[iOS 앱 개발] Swift 배열(Array) 스위프트의 배열에 대해서 간단한 코딩 예제들입니다. 약간 생소하긴 하지만 차근차근 익혀하고 있습니다. 빈 배열 초기화 var arr1 : [Int] = [] var arr2 = [Int]() var arr3 : Array = [] 배열 초기화 var arr1 : [Int] = [1,2,3,4,5] var arr3 : Array = [6,7,8,9,0] 여러타입 배열 초기화 var intArr : [Int] = [] var doubleArr : [Double] = [] var boolArr : [Bool] = [] var stringArr : [String] = [] 배열에 추가하기 var intArr : [Int] = [] // 추가하기 intArr.append(1) // += 연산자 사용 intArr .. 2022. 9. 1.
[iOS 앱 개발] Swift 문자열(String)의 특정 문자 사이의 문자 구하기(substring) 프로그래밍을 하다보면 문자열 자주 조작해야 하는 경우가 있습니다. 예를 들면 Java String 클래스의 substring 메소드를 이용하여 문자를 추출합니다. 현재까지 제가 알고 있는 지식으로는 Swift의 String 클래스에 substring 없는 듯 하네요.ㅠㅠ 아래의 코드는 특정문자(스페이스와 느낌표) 사이의 문자(world)를 추출하는 코드입니다. let hello = "Hello world!" // 스페이스 Index var sidx = hello.firstIndex(of: " ") // 느낌표 Index var eidx = hello.lastIndex(of: "!") if sidx != nil && eidx != nil{ // 스페이스 Index 다음 Index sidx = hello.i.. 2022. 8. 31.
iOS 앱 개발해볼까 안드로이드를 개발해서 앱을 출신하기 시작한지 벌써 10년이 넘은 세월을 보냈습니다. 10년의 세월동안 안드로이드는 Java에서 코틀린이라는 언어가 추가되기도 했지만, 아직 코틀린은 스터디하지 않았습니다. iOS 앱 개발을 위해서 React-Native를 사용해서 몇개의 앱을 출시하기도 했지만, 뭔가 부족한 느낌을 갖고 있습니다. 그래서 큰 마음을 먹고 iOS 앱 네이티브로 개발하기로 방향을 잡고, Swift를 공부 시작하려고 합니다. 장비도 맥북을 올해 하반기에 구입 할 예정입니다. 빠른 습득을 위해서 학원을 알아보았지만, Swift로 iOS를 개발하는 강의는 수요가 없어 학원측에서는 강의가 없다고 하네요.ㅠㅠ 독학으로 iOS 개발을 위한 스터디를 진행하기로 마음을 먹었습니다. 우선 Swift 언어에 대.. 2022. 8. 31.
이클립스 Git Revert SVN에서 Revert가 메뉴가 있는데 Git에는 없어서 구글링 한참을 했습니다. Git에서 Revert 하는 방법입니다. 수년간 사용했던 SVN의 고정관념 때문에 Git 사용이 힘드네요. ㅠㅠ 파일 또는 폴더 선택 > 마우스 우클릭 > Replace With > Index 2022. 8. 18.
MSSQL 문자 숫자 변환 및 숫자 체크 MSSQL에서 문자를 숫자로 변환해야 하는 경우가 종종 있습니다. 그런데 문자에 숫자가 아니 다른 문자가 있을 경우 오류가 발생하게 되는데 이런 경우 처리 방법을 알아보겠습니다. 문자를 숫자로 변화 쿼리 SELECT CONVERT(INT, '1234'), CONVERT(FLOAT, '1234.123'), CONVERT(NUMERIC, '1234.12345') 문자에 숫자가 아닌 경우 쿼리에 오류 발생 SELECT CONVERT(INT, 'a1234') ERROR : varchar 값 'a1234'을(를) 데이터 형식 int(으)로 변환하지 못했습니다. 문자를 숫자로 변화 가능 여부 쿼리 SELECT ISNUMERIC('a1234'), -- 0 (숫자 변환 X) ISNUMERIC('1234') -- 1 (.. 2022. 8. 18.
SlickGrid 엑셀 익스포트하기 SlickGrid의 데이터를 엑셀로 익스포트하는 방법입니다. 즉 포론트엔드에 표시된 SlickGrid의 데이터를 엑셀로 내려받을 수 있는 기능입니다. 아래의 GitHub의 SlickGrid-Export-to-Excel/dist의 모든 파일을 서버의 특정위치에 복사하세요. 저는 /SlickGrid/dist에 복사했습니다. https://github.com/ranjithprabhuk/SlickGrid-Export-to-Excel GitHub - ranjithprabhuk/SlickGrid-Export-to-Excel: jQuery plugin to export the entire data from slick grid to excel. A client si jQuery plugin to export the e.. 2022. 8. 9.
안드로이드12 개발 앱 실행 "앱이 설치되지 않았습니다." 표시되는 현상 안드로이드 스튜디오에서 오랜만에 프로젝트를 생성했습니다. 기존의 앱은 안드로이드 11 이하의 앱들이라 별문제 없이 개발을 하고 있습니다. 안드로이드12로 개발시 Activity에 필수 속성으로 exported가 추가되어 속성값을 false로 지정했습니다. 그리고 안드로이드 스튜디오에서 앱을 설치 및 실행을 했는데, 앱이 실행되지 않았습니다. 그래서 설치된 개발 앱을 탭하니 아래와 같이 "앱이 설치되지 않았습니다."라고 메세지가 나왔습니다. 해결 방법은 아래와 같이 LAUNCHER Activity의 exported="true"를 지정하면 안드로이드 스튜디오에서 앱을 실행하면 정상적으로 구동됩니다. 2022. 7. 14.
MSSQL에서 오라클 DECODE 처럼 쿼리 사용하기 오라클의 DECODE는 매우 유용한 함수입니다. MSSQL에서는 DECODE가 없어 처음에는 불편했습니다. 오라클의 DECODE처럼 사용 할 수 있는 방법을 소개합니다. 아래의 쿼리 예제를 실행해보면 쉽게 이해 할 수 있을 겁니다.^^ IIF 하나의 조건에 따라 참과 거짓으로 값을 표시 할 수 있는 함수입니다. IIF( boolean_expression, true_value, false_value ) 쿼리 예제 WITH CITY AS ( SELECT 10 CODE, '서울' NAME UNION SELECT 20 CODE, '부산' NAME UNION SELECT 30 CODE, '대구' NAME UNION SELECT 40 CODE, '대전' NAME ) SELECT NAME, IIF(CODE = 10,.. 2022. 7. 14.