๐ป ๊ฐ๋ฐ/Flutter
๋ธ๋ก๊ทธ ๋ด์ ๊ฒ์๋ฌผ์ PC ๋ฒ์ ์ ์ต์ ํ ๋์ด ์์ต๋๋ค. ์ค๋์ ModalBttomSheet๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์ ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค. ModalBottomSheet์ TextField๋ฅผ ์ฌ์ฉํ์ฌ ํค๋ณด๋๋ก ์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ์ผ๋ ค๊ณ ํ์ต๋๋ค. ํ์ง๋ง ModalBottomSheet๊ฐ ํ์
๋ ํค๋ณด๋์ ๋์ด๋งํผ ์ฌ๋ผ๊ฐ์ง ์์์ ModalBottomSheet๊ฐ ํค๋ณด๋์ ๊ฐ๋ ค์ง๋ ํ์์ด ๋ฐ์ํ์ต๋๋ค. ์๋์ ๊ฐ์ ์ํฉ์
๋๋ค. ํค๋ณด๋๊ฐ ํ์
๋๋ฉด์ ModalBottomSheet๋ฅผ ๊ฐ๋ ค ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ํ
์คํธ๋ฅผ ํ์ธํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ModalBottomSheet๊ฐ ํค๋ณด๋์ ์ํด ๊ฐ๋ ค์ง๋ ํ์ ์ฐ์ ModalBottomSheet์ ์์ฑ์ ๋ํด ๋ถ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค isScrollContro..
๐ป ๊ฐ๋ฐ/์ค๋์ ์ฝ์ง
์ค๋ ์๋๊ถ์ ๋น๊ฐ ์์ฒญ ๋ด๋ ค์ ์ฌํ์ ํ๊ฒ ๋๋ค. ์ฌ๋ด ๊น๊ณผ ์ฐ๋์ด ๋์ด ์์ง ์์์ ํ๋ก์ ํธ๋ฅผ ์๋ก ์์ฑํด์ ๋น๋๋ฅผ ํ๋๋ฐ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. Gradle ๋ฒ์ ผ๊ณผ Kotlin Gradle Plugin ๋ฒ์ ผ์ด ๋ง์ง ์์ ์๊ธฐ๋ ์ค๋ฅ์๋ค. ์น์ ํ๊ฒ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋ค. android/gradle/wrapper/gradle-wrapper.properties๋ฅผ ์์ ํ๋ฉด ๋๋ค. ์๋ ค์ค ํด๊ฒฐ ๋ฐฉ๋ฒ๋๋ก ๋ฒ์ ผ์ 6.7.0์์ 6.7.1๋ก ๋ณ๊ฒฝํ๋๋ฐ ์ ์์ ์ผ๋ก ๋น๋๊ฐ ๋๋ค. Gradle ๋ฒ์ ผ์ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์๋ค. Gradle Distributions services.gradle.org
๐ป ๊ฐ๋ฐ/Flutter
๋ธ๋ก๊ทธ ๋ด์ ๊ฒ์๋ฌผ์ PC ๋ฒ์ ์ ์ต์ ํ ๋์ด ์์ต๋๋ค. ์ค๋์ Equatable์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. BLoC์ ๋ํ ๊ธ์ ์ฐ๊ธฐ ์ ์ BLoC์์ ์ฌ์ฉํ๋ Equatable์ ๋ํ ์ ๋ฆฌ๊ฐ ์ฐ์ ์ ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋ฐ๋ก ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ๋ณด์ฃ ! ์๋ ์ฝ๋๋ฅผ ๋จผ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. class Person { final int pid; final String name; final int age; Person(this.pid, this.name, this.age); } void main() { Person p1 = new Person(20221234, "kodo", 25); Person p2 = new Person(20221234, "kodo", 25); (p1 == p2) ? print("same") : ..
๐ป ๊ฐ๋ฐ/Flutter
๋ธ๋ก๊ทธ ๋ด์ ๊ฒ์๋ฌผ์ PC ๋ฒ์ ์ ์ต์ ํ ๋์ด ์์ต๋๋ค. ์ค๋์ ํ๋ฌํฐ์์ ์๋ ๋ก๊ทธ์ธ์ Splash Screen์ ๊ตฌํํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์๋ ๋ก๊ทธ์ธ์ ์ฑ ๊ฐ๋ฐ์ ์ ํด๋ดค๋ค๋ฉด ํ ๋ฒ์ฏค์ ๊ตฌํํด๋ดค์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. SharedPreference๋ฅผ ํ์ฉํด์ ๊ตฌํํ๋๋ฐ ์ค๋์ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ์ต๋๋ค. ๋ฐ๋ก BLoC๋ฅผ ํตํด์ ๊ตฌํํ๋๋ฐ์, BLoC๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ ๋ก๊ทธ์ธ๊ณผ Splash Screen์ ํ๋์ ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ๋ฒ ์์ํด๋ณด์ฃ . ๋ฐ๋ก BLoC๋ก ๊ตฌํํ์ง ์๊ณ ๊ธฐ์กด์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ณ BLoC๋ก ๋ฆฌํํ ๋งํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํฉ๋๋ค. ๊ธฐ์กด ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ค ์์ผ๋ก ํด๊ฒฐํ๋์ง๊ฐ ์ค์ํ๋๊น์. ์๋ ๋ก๊ทธ์ธ ์์ ๋ง์๋๋ฆฐ ๊ฒ์ฒ๋ผ SharedPrefer..
๐ป ๊ฐ๋ฐ/Flutter
๋ธ๋ก๊ทธ ๋ด์ ๊ฒ์๋ฌผ์ PC ๋ฒ์ ์ ์ต์ ํ ๋์ด ์์ต๋๋ค. ์ ๋ง ์ค๋๋ง์ ๊ธ ์ฐ๋ ๊ฑฐ ๊ฐ๋ค์. ๋ฏธ๊ตญ์์ ๋์์์ ์ผ๊ธฐ ์ด ๊ฒ ๋ง์ง๋ง์ธ๋ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฐ๋ ค๊ณ ํ์๋๋ฐ 1ํ๊ธฐ์ ํ๋ก์ ํธ๊ฐ ๋๋ฌด ๋ง์์ ๋ฐ๋นด์ต๋๋ค. ๊ธ ์ฐ๊ณ ์๋ ์ง๊ธ์ ์์จ์ํํธ์์ 7์ฃผ์ง๋ฆฌ ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ ํ๊ณ ์์ต๋๋ค. ์ธํด์ ์งํํ๋ฉด์ ํ๋ฌํฐ๋ก ๊ฐ๋ฐ์ ํ๊ณ ์๋๋ฐ ๊ฐ๋ฐํ๋ฉด์ ์๊ฒ๋ ๊ฒ๋ค, ์ ๋ฆฌํ๋ฉด ์ข์ ๊ฒ๋ค์ ์ ์ด๋๊ณ ์ถ์ด์ ์ค๋๋ถํฐ ์ฃผ๊ธฐ์ ์ผ๋ก ํฌ์คํ
์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. (1ํ๊ธฐ ํ๊ณ ๋ก์ ์์ฑํ๊ณ ์๋๋ฐ ์์ง ์์ฑ์ด ์๋ผ์ ๋น๊ณต๊ฐ๋ก ํด๋จ์ต๋๋ค...) ์ฑ๊ธํค ์ฑ๊ธํค, ์ ๊ณต์๋ผ๋ฉด ๋ค๋ค ๋ง์ด ๋ค์ด๋ดค์ ๋จ์ด์ผ ๊ฒ๋๋ค. ๋ง ๊ทธ๋๋ก ์ฑ๊ธ, ํ๋์ ์ธ์คํด์ค๋ง ์กด์ฌํ๋๋ก ํ๋ ๊ฒ์
๋๋ค. ์ธ์คํด์ค๋ฅผ ํ๋๋ง ๊ฐ์ง๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น์? ๋จธ๋ฆฌ ์์ ๋ ..
๐ป ๊ฐ๋ฐ/Android
๊ตฌํ ๋ฌธ์ ์๋ฆผ ํด๋ฆญํ๋ฉด ํน์ ํ๋ฉด์ ๋์ด์ค์ผ ํ๋ ๋ฌธ์ ์๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ PendingIntent ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. Notification ์์ฑ์ Intent ์์ฑ์ ๋ถ์ฌํ ์ ์๋๋ฐ ์ด ๋ PendingIntent ๋ฅผ ๋๊ฒจ์ค๋ค. ๋ํ PendingIntent ๊ฐ์ฒด์ putExtra ๋ก ํ๋ฉด ์ด๋์ผ๋ก ๋์ด์ค Fragment ์ ์๋ณ์๋ฅผ ๋๊ฒจ์ค๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ MainActivity ๊ฐ onCreate ๋์ ๋ getStringExtra ๋ก Fragment ์ ์๋ณ์๋ฅผ ๊ฐ์ ธ์ค๊ณ ํด๋น Fragment ๋ก ์ ํํ๋ค. ์ฝ๋ - ReceiverService ์ฐ์ ์ง๋๋ฒ์ ๊ตฌํํ๋ ์ด๋ฒคํธ ์์ ์๋ฆผ์ ๋ํ ์ฝ๋๋ฅผ ๊ฐ์ ธ์๋ค. // ์ด๋ฒคํธ๋ฅผ ์์ ํ์ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ์๋ฆผ ์ ์ก private fun occurEven..
๐ป ๊ฐ๋ฐ/Android
๊ตฌํ ๋ฌธ์ ์กธ์
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์๋ฒ์์ ํน์ ํ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ฉด ์ด๋ฒคํธ ์ข
๋ฅ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ 2๊ฐ์ ์๋ฆผ์ ๋์ด์ฃผ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ค. ์์ผ ํต์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์์ ํ๋๋ฐ Activity ์ด๋์ด๋ Fragment ์ด๋์ ๊ด๊ณ ์์ด ์๋ฒ์ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ์์ผ ํต์ ์ด ํ์ํ๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ MVVM๊ณผ ๋จ์ผ Activity๋ฅผ ์ฌ์ฉํ๊ธฐ์ Activity๋ MainActivity ํ ๊ฐ ๋ฟ์ด์๊ณ MainActivity ์์ ์์ผ ํต์ ์ ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค. ํ์ง๋ง ์ฑ์ ์ฌ์ฉํ์ง ์๋ ์ํฉ์์๋ ์๋ฆผ์ ์์ ํด์ผ ํ ํ์๊ฐ ์์๊ณ ์ด๋ฅผ ์ํด Service๋ฅผ ์ฌ์ฉํ๋ค. ๋ฌผ๋ก MainActivity ์์ ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ํ์ง๋ง ์์ผ ํต์ ์ด MainActivity ์์ฒด์ ์ข
์๋๋ ์ํฉ์ด ๋ฐ์ํ๊ธฐ์ ..
๐ป ๊ฐ๋ฐ/iOS
iOS ์์ ํ๋ฉด ์ด๋์ ํ๋ ๋ฐฉ๋ฒ์๋ 4๊ฐ์ง๊ฐ ์๋ค. ViewController ์์ ํ๋ฉด ์ ํ ViewController ๊ฐ ๋ค๋ฅธ ViewController ๋ฅผ ํธ์ถํ์ฌ ํ๋ฉด ์ ํ NavigationViewController ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด ์ ํ ํ๋ฉด ์ ํ์ฉ ๊ฐ์ฒด Segue ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด ์ ํ 1. ViewController ์์ ํ๋ฉด ์ ํ ViewController ์์ View ๋ฅผ ๋ค๋ฅธ View ๋ก ๊ต์ฒดํ๋ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๋ก ์ธํด ์ฌ์ฉ์ ์ง์ํ๋ค. ํน์ ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ค. ์๋๋ก์ด๋์์๋ View ์ Visibility ์์ฑ์ ์ด์ฉํ์ฌ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ ์์ฃผ ์ฌ์ฉํ์๋๋ฐ iOS ์์๋ ์ง์ํ๋ค๊ณ ํ๋ ์ข ์ ๊ธฐํ๋ค. ์ด ๋ถ๋ถ์ ๋ํด์ ์ข ๋ ์ฐพ์๋ณด๊ณ ์ ๋ฆฌํด๋ด์ผ๊ฒ ๋ค. 2. ViewContr..
๐ป ๊ฐ๋ฐ/iOS
๊ณต๋ถํ ๊ฒ Swift ๋ฌธ๋ฒ ์๊ฒ๋ ๊ฒ 1. Guard Guard ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด์ false์ธ ๊ฒฝ์ฐ์๋ else ๊ตฌ๋ฌธ์ด ์คํ๋์ด ์ดํ์ ์ฝ๋๋ฅผ ์คํํ์ง ๋ชปํ๊ฒ ํ๋ค. continue ์ ๋น์ทํ๋ค. import Foundation func guardTest(value : Int?) { guard let value = value else {return} print(value) } guardTest(value : 2) guardTest(value : nil) // ์๋ฌด๊ฒ๋ ์ถ๋ ฅ๋์ง ์์ ์กฐ๊ฑด๋ฌธ๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ณผ ์ ์๋๋ฐ Guard ๋ else ๋ฅผ ๊ฐ์ ํ๋ค. // ์ผ๋ฐ์ ์ธ ์กฐ๊ฑด๋ฌธ if ์กฐ๊ฑด == true { // ์ฐธ์ธ ๊ฒฝ์ฐ์ ์คํํ ์ฝ๋ } else { // ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ์ ์คํํ ์ฝ๋ } // G..
๐ป ๊ฐ๋ฐ/iOS
๊ณต๋ถํ ๊ฒ Swift ๋ฌธ๋ฒ ์๊ฒ๋ ๊ฒ 1. ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ์ฐจ์ด 1. ๊ณตํต์ ๊ฐ์ ์ ์ฅํ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์ ์์ ํจ์์ ๊ธฐ๋ฅ์ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์์ ๋ด๋ถ ๊ฐ์ .๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ ์์ฑ์๋ฅผ ์ฌ์ฉํด ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ ์ ์์ Extension ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ Protocol ์ ์ฑํํ์ฌ ๊ธฐ๋ฅ์ ์ค์ ํ ์ ์์ 2. ์ฐจ์ด์ - ํด๋์ค ์ฐธ์กฐ ํ์
ARC ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌ ์์ ๊ฐ๋ฅ ํ์
์บ์คํ
์ ํตํด ๋ฐํ์์์ ํด๋์ค ์ธ์คํด์ค์ ํ์
์ ํ์ธํ ์ ์์ deinit ์ ์ฌ์ฉํ์ฌ ํด๋์ค ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํ ์ ์์ ๊ฐ์ ํด๋์ค ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ณ์์ ํ ๋นํ ๋ค์ ๊ฐ์ ๋ณ๊ฒฝ์ํค๋ฉด ๋ชจ๋ ๋ณ์์ ์ํฅ์ ์ค (๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณต์ฌ) - ๊ตฌ์กฐ์ฒด ๊ฐ ํ์
๊ฐ์ ๊ตฌ์กฐ์ฒด๋ฅผ ..