전체 글 280

[Swift] 프로퍼티

struct Student { // 인스턴스 저장 프로퍼티 var name: String = "" var `class`: String = "Swift" var koreanAge: Int = 0 // 인스턴스 연산 프로퍼티 var westernAge: Int { get { return koreanAge - 1 } set(inputValue) { koreanAge = inputValue + 1 } } // 타입 저장 프로퍼티 static var typeDescription: String = "학생" // 인스턴스 메서드 // func selfIntroduce() { // print("저는 \(self.class)반 \(name)입니다") // } // 읽기전용 인스턴스 연산 프로퍼티 var selfIntro..

🦜 Swift 2022.11.20

[Swift] 클로저

클로저 클로저 == 함수. 다만, 함수는 이름이 있는 클로저이다. { (매개변수 목록) -> 반환타입 in 실행코드 } Parameter 와 ReturnType 이 있는 클로저 let closure = { (name: String) -> String in return "Hello, \(name)" } name은 Argument Label이 아니고, 오직 Parameter Name. 클로저를 호출할 때는 함수와 다르게 Argument Label 을 사용하지 않는다. closure("jihyun") closure(name: "jihyun") //error! 또 다른 예시를 살펴보면 다음과 같다. // 클로저의 사용 var sum: (Int, Int) -> Int = { (a: Int, b: Int) -> I..

🦜 Swift 2022.11.20

[Swift] 열거형

enum Weekday { case mon case tue case wed case thu, fri, sat, sun } var day: Weekday = Weekday.mon day = .tue // day 가 Weekday 타입이므로 .tue 이런 식으로 축약해서 써줄 수도 있다. 다만 Weekday 타입이라고 명시해줬어야 함 switch 문을 이런 식으로 많이 쓴다. 그리고 Swift 의 enum 은 C 언어의 enum 처럼 정수값을 가질 수 있다. enum Fruit: Int { case apple = 0 case grape = 1 case peach } 자동으로 1씩 증가한다. 따라서 peach 는 2 단, case 별로 다른 정수 값을 가져야 한다. 이렇게 rawValue 로 값을 확인할 수 ..

🦜 Swift 2022.11.19

[Swift] 클래스

클래스와 구조체는 매우 유사하지만 차이점은 구조체는 값 타입인 반면 클래스는 참조 타입이다. 값 타입과 참조 타입 값 타입은 상수나 변수에 할당하거나 함수에 넘겨질 때 복사가 됩니다. 값 타입과는 다르게 참조 타입은 변수나 상수에 할당하거나 함수에 넘길 때 복사하지 않습니다. 복사 대신에 기존에 같은 인스턴스에 참조가 사용됩니다. 즉 값이 복사되는 것이 아니라 메모리를 참조하는 것입니다! 그래서 클래스는 객체를 만들고 프로퍼티 접근해서 값을 변경하면 그 프로퍼티 값이 다 변경된다. 다시 말해 메모리를 참조하기 때문 그리고 Swift 의 클래스는 다중 상속이 안된다는 점을 기억하자. 클래스 예제를 보자 class Sample { var mutableProperty: Int = 300 // 가변 프로퍼티 l..

🦜 Swift 2022.11.19

[Swift] 구조체

위의 구조체를 예시로 들어보겠다. var mutable: Sample = Sample() mutable.mutableProperty = 200 // ok! mutable.immutableProperty = 200 // error //////////////////////////////////////////////////////// let immutable: Sample = Sample() // 불변 인스턴스 immutable.mutableProperty = 200 // error immutable.immutableProperty = 200 // error 타입 프로퍼티 및 타입 메서드라는 것은 각각 타입 자체가 사용할 수 있는 프로퍼티, 메서드를 의미한다. Sample.typeProperty = 300 S..

🦜 Swift 2022.11.19

[Swift] if let vs guard let

if let xx = x { //xx는 여기서만 사용가능 } else { print("x is Optional") } print(xx) //error! if let의 경우에는 옵셔널 추출을 실패하여 false가 된 else문 뿐만 아니라 성공한 경우에도 제어를 할 수 있습니다. 하지만 할당 상수를 if문 안에서만 사용할 수 있습니다. 위의 코드처럼 실행을 해본다면 xx는 지역변수이기 때문에 오류가 발생하게 됩니다. 위의 코드를 보면 xx 는 전역변수로 쓸 수 없고 else 문은 통과하지 않는다. 반면 위의 코드는 else 문을 통과한다. (nil 일때) https://velog.io/@wook4506/iOS-Swift-%EC%98%B5%EC%85%94%EB%84%90-%EB%B0%94%EC%9D%B8%E..

🦜 Swift 2022.11.19

[Swift] guard let

옵셔널 바인딩을 할 때 if let 뿐만 아니라 guard let이라는 것도 많이 쓰입니다. 둘은 거의 비슷하지만 약간의 차이가 있습니다. 일단은 코드를 써보면서 guard let을 이해해 보겠습니다. 위와 비슷한 코드를 하나 짰습니다. 옵셔널 상수 x와 옵셔널 상수 y에 각각 10과 nil로 초기화 해주고 이번에는 guard let을 써서 옵셔널을 추출했습니다. if let과 구문은 비슷하지만 guard let에서는 else인 부분만 작성이 가능합니다. 즉, 값이 nil이여서 옵셔널 추출이 되지 않을때만 어떠한 행동을 취할 수 있죠. 그리고 만약 nil값이 아닐 걸 확인하고 옵셔널을 성공적으로 추출했다면 guard let문을 통과하게 되게 되는 거죠! 여기서 한가지 중요한 점이 있었는데 이렇게 guar..

🦜 Swift 2022.11.19

[Swift] if let

옵셔널 값 추출 옵셔널 바인딩이란 강제로 옵셔널을 여는 방식(Force unwrapping)이 아닌 안전하게 확인을 해보고 unwrapping하는 방법입니다. 즉, if문을 이용하여 옵셔널에 할당된 값을 임시 변수 또는 상수에 할당을 해주는 방식입니다. Force unwrapping : !를 써서 강제로 옵셔널 추출 Optional Binding : if let, guard let을 써서 옵셔널 추출 if let 또는 if var 을 사용하여 옵셔널의 값이 존재하는지를 검사한 뒤, 존재한다면 그 값을 다른 변수에 대입시켜줍니다. 만약 옵셔널에 값이 있다면 if문 안으로 들어가게 되고 nil이라면 그냥 통과하게 되는 방식이죠!! 이렇게 확인을 해주고 unwrapping을 해준다면 강제로 unwrapping..

🦜 Swift 2022.11.18

[Flutter] 푸시 알람 눌렀을 때 다른 페이지로 이동

스타트업 다니면서 많은 프로젝트를 해왔지만 이번 기능(프로젝트라고 하기엔 애매함😅) 은 기록을 남기고 싶어서 글을 작성하게 되었다. 예시 코드가 없었기 때문에 개인적으로 어려웠고 구현은 해봤지만 이게 맞는 방법인지는 모른다. 하지만 그동안 내가 사용한 어플들에서 푸시 알람이 오고 눌렀을 때 다른 페이지로 가는 방법이 어떤 방식인지 알 수 있게 되어서 정말 신기했다..! 그래서 이 신기함(?)의 느낌을 기록하고 싶다..ㅎㅎ 처음에는 간단하다고 생각했다. 그리고 나는 예전에 한 번 호기심으로 깃허브 레포를 파서 푸시 알람 오게 만드는 것도 연습해봤기 때문에 금방 끝날 것이라고 생각했다. 그런데 생각보다 그리 간단하지 않았다. 아무 페이지 없는 상태에서 푸시 알람 오게 만들기는 쉬웠지만 기존 프로젝트에서 푸시..

🐦 Flutter 2022.11.17

[개인 프로젝트] 푸시 알림

시작하게 된 계기 처음엔 이 프로젝트를 할 생각이 없었다. 단지 회사에서 일 하던 중 사수분이 캐시스텝을 구현하고 있었고 그때쯔음 백그라운드에서 걸음수가 쌓이지 않던 이슈가 있었다. 그때부터 나의 호기심이 발동되었다. 백그라운드가 뭘까 부터 시작했다. 백그라운드에서는 앱이 동작하지 않을 수도 있구나 그러면 백그라운드에서 카카오톡 같은 알림은 어떻게 오는걸까 실제로 다른 앱들의 푸시 알림은 어떻게 구현하였을까 이렇게 생각이 꼬리에 꼬리를 물어 파이어베이스 클라우드 메시징에 도달하였고 나는 파이어베이스 클라우드 메시징을 직접 구현해보고 싶어졌다. 시작은 가벼웠다 물론 삽질도 있었다. 블로그 보고 따라해서 구글서비스 파일을 직접 넣기도 하고 네이티브 코드를 직접 수정하는 등 삽질을 하였다. 결국 공식 문서를 ..