![]() 
                    ๐ป ๊ฐ๋ฐ/iOS
                      
                      ๊ณต๋ถํ ๊ฒ ๋ถ์คํธ์ฝ์ค - iOS ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ค์ํํธ ๊ธฐ์ด ์๊ฒ๋ ๊ฒ 1. ์ต์
๋ // someOptionalParm์ nil์ด ํ ๋น๋  ์ ์์ func someFunction(someOptionalParam: Int?) { // .... } /// someOptionalParm์ nil์ด ํ ๋น๋  ์ ์์ func someFunction(someOptionalParam: Int) { // .... } nil์ด ํ ๋น๋  ์ ์๋์ง ์๋์ง๋ฅผ ํํ nil์ ๊ฐ๋ฅ์ฑ์ ๋ช
์์ (์ฝ๋)์ผ๋ก ํํ ๊ฐ๋ฅ ์ต์
๋์ด ์๋ ๊ฒฝ์ฐ nil ์ฒดํฌ ์์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ nil๋ก ์ธํ ์์ธ ์ํฉ์ ์ต์ํ 2. ์ต์
๋ ํํ ๋ฐฉ๋ฒ // ์์์  ์ถ์ถ ์ต์
๋ var optionalValue: Int! = 10 switch optionVa..
                     
                   
                
                  
                    ![]() 
                    ๐ป ๊ฐ๋ฐ/iOS
                      
                      ๊ณต๋ถํ ๊ฒ ๋ถ์คํธ์ฝ์ค - iOS ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ค์ํํธ ๊ธฐ์ด ์๊ฒ๋ ๊ฒ 1. ๋งค๊ฐ๋ณ์ ๊ธฐ๋ณธ ๊ฐ func setUserInfo(name : String, age : Int, region : String = "Deajeon") {} ํจ์๋ฅผ ์ ์ํ  ๋ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ฌ๋  ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ฅํ  ์ ์์ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ๋ ๋งค๊ฐ๋ณ์๋ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก ์ค ๋งจ ๋ค์ ์์นํ๋ ๊ฒ์ด ์ข์ 2. ์ ๋ฌ์ธ์ ๋ ์ด๋ธ // ๋ด๋ถ์์๋ ๋งค๊ฐ๋ณ์ ์ด๋ฆ func greeting(to friend : String, from me : String) { print("Hello, \(friend)!, my name is \(me)") } // ํธ์ถํ  ๋๋ ์ ๋ฌ์ธ์ ๋ ์ด๋ธ greeting(to : "doko", from : "kodo") ..
                     
                   
                
                  
                    ![]() 
                    ๐ป ๊ฐ๋ฐ/์ค๋์ ์ฝ์ง
                      
                      TableView๋ฅผ ์ฌ์ฉํ๋ฉด์ Cell์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด extension์ผ๋ก UITableViewDataSource๋ฅผ ์ฌ์ ์ํ๊ณ  ๋น๋๋ฅผ ์งํํ๋ค. extension ViewController : UITableViewDataSource { func tableView(_ tableView : UITableView, numberOfRowsInSection section : Int) -> Int { return self.tasks.count } func tableView(_ tableView : UITableView, cellForRowAt indexPath : IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdenti..
                     
                   
                
                  
                    ![]() 
                    ๐ป ๊ฐ๋ฐ/์ค๋์ ์ฝ์ง
                      
                      ์ธํด ๊ธฐ๊ฐ ๋์ ๊ฐ๋ฐํ ์ฑ์ ๋ฐฐํฌํ๋ ค๊ณ  ์ฑ ์์ด์ฝ ์ด๋ฏธ์ง๋ฅผ ์ฒจ๋ถํ๊ณ  Gradle์์ debug -> release ๋ก ๋ณ๊ฒฝํ๊ณ  Build Apk ๋ฅผ ๋๋ ๋๋ฐ! ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ด๋ค. mockup1/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature. ์์นญ์ ํด๋ณด๋๊น Gradle ๋ฒ์ ผ์ด ๋ง์ง ์๋๋ค. ๋ค๋ฅธ ๋ฌธ์ ๋ค~ ์ด๋ฐ ๊ธ๋ค์ด ๋ง์๋ฐ ๋ญ๊ฐ ์ด์ํ๋ค. ์ง๊ธ ์ฌ์ฉํ๊ณ  ์๋ ๋ฒ์ ผ์ด 7์ธ๋ฐ 4๊น์ง ๋ฎ์ถฐ์ผํ๋ค๊ณ ? ๊ดํ ๊ฑด๋๋ ธ๋ค๊ฐ ๋ค๋ฅธ ์ค๋ฅ๋ก ํฐ๋ฏธ๋์ด ํฐ์ง ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ์ฒจ๋ถํ ์ฑ ์์ด์ฝ ์ด๋ฏธ์ง๋ฅผ ์ดํด๋ดค๋ค. ํ์ผ๋ช
์ ic..
                     
                   
                
                  
                    ![]() 
                    โน๏ธ ๋ผ์ดํ/ํ๊ณ 
                      
                      ๋ชจ์ฒ๋ผ ํ๊ณ  ๊ธ๋ก ์ฐพ์์๋ค. ํผ๋ ์ดํ๋ก ์ด์ชฝ ๊ฒ์ํ์์ ์ฐ๋ ๊ฑด ์ฒ์์ธ๋ฐ, ์ค๋์ ๋ค์ ์ฃผ๋ฉด ๋๋  NC Summer Intern ํ๊ธฐ์ ๋ํ ๊ธ์ ์ฐ๋ ค๊ณ  ํ๋ค. ์ด๋ป๊ฒ ์๊ฒ ๋๋์? 1ํ๊ธฐ์ ์ธํด, ๋์๋ฆฌ, ๊ต์ก ํ๋ก๊ทธ๋จ์ ์ข ์์๋ณด๊ณ  ์ง์ํ๋ ์ค 2022 ์์จ์ํํธ ์ธ๋จธ ์ธํด์ด๋ผ๋ ๊ธ์ ๋ณด๊ฒ ๋๊ณ  ์ฌ๋ด ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ด ๋์ ๋ค์ด์๋ค. ๊ณต๊ณ ์ ํ๋ฌํฐ์ ์ญ๋์ด ๊ธฐ์ฌ๋์ด ์๋ ๊ฒ์ ๋ณด์ํ๋ ํ๋ฌํฐ๋ก ์ฌ๋ด ์ฑ์ ๊ฐ๋ฐํ๊ณ  ์์์ ์ง๊ฐํ๊ณ  ์๋๋ก์ด๋ ๋ฟ๋ง ์๋๋ผ ํ๋ฌํฐ ์ญ์ ๊ด์ฌ ์์๊ธฐ์ ํด๋น ๊ณต๊ณ ์ ์ง์ํ๋ค. 1์ฐจ - ์๋ฅ + ์ฝํ
 ์ ํ ์์์ ๋ถ๋์ด ๋ฌธํญ๋น 300์๋ก ๋ง์ง๋ ์์๋ค. ๋์์ ์ฝํ
๋ ๊ฐ์ด ์งํ๋๋ค. ํ ์์ผ์ ์งํ๋๋ ๊ฑธ๋ก ๊ธฐ์ตํ๋ค. ์ด 3๋ฌธ์ ๊ฐ ์ถ์ ๋์๊ณ  ๋ง์ง๋ง ๋ฌธ์ ๋ ํด๊ฒฐํ์ง ๋ชปํ๋ค. ์ฝํ
..
                     
                   
                
                  
                    ![]() 
                    ๐ป ๊ฐ๋ฐ/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") : ..