분류 전체보기

    Kotlin으로 IOS 개발을 할 수 있을까?

    결론부터 말하자면 가능하다. 코틀린이 JVM 위에서만 돌아간다고 알고있는 분들도 있지만, JVM은 코틀린의 타겟중 하나일 뿐이다. 코틀린은 AOS(Kotlin JVM), IOS에서도(Kotlin Native), 웹브라우저에서도(Kotlin.js) 에서도 돌아간다. IOS 개발이 가능한 Kotlin Native는 JVM 위에서 돌아가지 않는다. Swift와 마찬가지로 LLVM을 통해 컴파일된다. 게다가 Kotlin Native는 Cocoa Touch frameworks 를 사용할 수 있다고 한다. 즉, Kotlin으로 IOS 개발이 가능하다. 하지만 이 말은 Kotlin으로 멀티플랫폼 개발을 할 수 있다는 뜻이 되진 않는다. Flutter 같은 멀티플랫폼이 되려면, 코드를 한번만 쓰고 AOS와 IOS 에서..

    Architecture Components(MVVM 패턴)

    Architecture Components란? Android architecture components are a collection of libraries that help you design robust, testable, and maintainable apps. 유지보수를 쉽게하고 테스트 가능한 프로그램을 만들기위해 도움을주는 안드로이드 컴포넌트다. Room 라이브러리 Room은 SQLite에 대한 추상화 레이어를 제공하여 원활한 데이터베이스 액세스를 지원하는 동시에 SQLite를 완벽히 활용한다. SQLite를 API 직접사용하는것이 번거롭고 구조화되어있지도 않으니 Room을 사용한다. SQLite를 API 직접사용하면 구조를 잘 잡지 않는이상 액티비티나 프래그먼트의 코드가 복잡해지고 뷰와 모델 ..

    안드로이드 서비스

    안드로이드 서비스

    서비스란? 앱이 내려가있어도 실행할 프로그램. 서비스는 실행되면 명시적으로 멈춰줘야한다. 안그러면 계속 돌아간다. (바인드 서비스가 아닌이상) 포그라운드 서비스, 백그라운드 서비스, 바인드 서비스 포그라운드 서비스 : 푸시알림 같은 것이나 뮤직앱의 뮤직플레이어. 유저에게 보이는것. 백그라운드 서비스 : 게임을 내려도 계속 돌아간다든가 하는것. 유저에게 안보이는것. 바인드 서비스 : 어플리케이션 컴포넌트가 서비스와 바인딩되어 서비스를 이용할때의 서비스. 포그라운드나 백그라운드 서비스는 동시에 바인드 서비스일 수 있다. 여기서 바인딩이란, 어플리케이션 컴포넌트가 특정 서비스를 사용한다는 뜻이다. (서비스와 컴포넌트가 묶였다고 표현한다) * 바인드 서비스의 경우, 바인드된 컴포넌트들이 모두 언바인드되면 자동으..

    프로그래머스 : 네트워크

    프로그래머스 : 네트워크

    programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 유니온 파인드로도, dfs로도 풀 수 있는 문제다. 필자는 유니온 파인드를 시도했다가 못풀고 dfs로 풀었다. dfs를 하기 위한 방법 중 하나는 재귀함수를 쓰는 것이다. 이번엔 재귀에 대해서 좀 더 생각해보자. 재귀는 참 공부를 해도 헷갈리는 녀석이다. 그래서 이참에 마무리를 지어버리려고 한다. 내가 생각한 재귀는 '분신을 만들고 일을 시키는 것' 이다. A라는 함수는..

    프로그래머스 : 여행경로

    프로그래머스 : 여행경로

    코딩테스트 연습 - 여행경로 [[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO] programmers.co.kr 조건 1. 모든 도시를 거친다. 조건 2. 티켓을 다 쓴다. (answer.length == tickets.length + 1) 이 문제는 깊이탐색으로 풀 수 있는 문제다. 깊이탐색의 개념에 대해서 잘 모르면, 왜 깊이탐색을 써야하는지 이해가 안갈 수 있다. 그래프의 탐색방법은 기본적으로 너비탐색과 깊이탐색이있다. 너비탐색은 마치 개미굴에 물을 붓듯이 처음부터 모든 경우의 수를 탐색하므로 이 문제에는 적절치 않다. 그보다는 깊이탐색처럼 한 깊이로 끝까지 갔다가, 막다른 길이면 분기점까..

    카메라로 사진찍기

    먼저 코드를 보고 하나하나 설명하겠다. fun isExternalStorageWritable(): Boolean { return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED } private fun dispatchTakePictureIntent() { if(!MyFileHelper.isExternalStorageWritable()) Toast.makeText(this, "저장공간이 부족해서 카메라앱을 실행시킬 수 없습니다.", Toast.LENGTH_SHORT).show() Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent -> // Ensure that there..

    파일입출력2 : 저장소 (Android Studio Internal/External Storage)

    파일입출력2 : 저장소 (Android Studio Internal/External Storage)

    지난 시간에는 파일 입출력에 대해서 알아보았다. 이번에는 좀 더 자세하게 들여다보자. //userInfo라는 객체를 json 형태로 바꾼다. val fileContents = Gson().toJson(userInfo) //휴대폰의 내부저장소 중 캐시저장소에 파일을 만든다. val file = File(context.cacheDir, "account_" + userInfo.email) //파일에 준비한 json을 쓴다. file.writeText(fileContents) context.cacheDir은 주석에서 나와있듯이 내부저장소의 캐시저장소를 의미한다. 그럼 내부저장소는 뭘까? 잠시 공식문서의 설명을 보자. 내부 저장소 디렉터리: 이 디렉터리에는 영구 파일을 저장하는 전용 위치와 캐시 데이터를 저장하는..

    파일입출력 1 : 쓰고 읽기 (File I/O in Kotlin)

    코틀린의 파일 입출력은 매우간단하다. 우선 데이터를 파일로 쓸때는 JSON을 이용하면 간편하니 gson 라이브러리를 쓰자. //userInfo라는 객체를 json 형태로 바꾼다. val fileContents = Gson().toJson(userInfo) //휴대폰의 내부저장소 중 캐시저장소에 파일을 만든다. val file = File(context.cacheDir, "account_" + userInfo.email) //파일에 준비한 json을 쓴다. file.writeText(fileContents) 파일을 쓰는건 이렇게만 해도 된다. writeText는 내부적으로 FileOutputStream을 연다음, 인자로 넘긴 String을 파일에 쓴다. 그런 다음 닫는다. (사실 .use를 쓰기때문에 수동..