전체 글 240

Nutri Capture 방향성 - 앱의 목적, 유스케이스 다이어그램

#1 앱의 목적과 여담Nutri Capture는 몇 년전에 번뜩 떠오른 아이디어로 만든 앱이었다. 대학교에서 안드로이드 수업을 듣던 중 구글의 ML Kit에 대한 내용이 나왔다. ML Kit는 이미지 속에서 텍스트를 뽑아내거나 카메라로 얼굴을 인식하는 등의 기능이 담긴 딥러닝 라이브러리다. 교수님은 ML Kit의 다양한 기능 중 하나를 활용해 앱을 만들어보라는 과제를 주셨다. 그리고 그 때 내 옆에는 프링글스 과자가 있었다. 프링글스의 원통 포장지에 인쇄된 영양성분표가 눈에 들어왔다. 그렇게 해서 얻은 아이디어였다.하지만, "어떤 상상을 하든 이미 그것은 특허로 등록되어있다."라는 말도 있지 않은가. 이 앱도 마찬가지다. 이미 해외에 굉장한 다운로드 수를 보유한 비슷한 앱이 있었다. 그렇다고 멈추진 않는..

Nutri Capture 방향성 - 앱의 리팩토링 및 업그레이드

#1 개요 GitHub - Kanmanemone/Nutri_Capture: 영양성분표 스캔 및 영양 관리 앱영양성분표 스캔 및 영양 관리 앱. Contribute to Kanmanemone/Nutri_Capture development by creating an account on GitHub.github.com대학생 시절 만들었던 앱 'Nutri Capture'를 리팩토링하고, 여러 기능을 붙이는 프로젝트를 시작한다. 위의 깃허브 링크는 예전 버전의 앱이다. #2 리팩토링 목표이 앱의 코드는 시간이 꽤 지났기 때문에, 분명 몇몇의 라이브러리는 Deprecated되었을 것이다. 최신 라이브러리로 대체할 필요가 있다. 또, 이 앱에서 다크 모드에서 실행이 안되는 에러를 고치다가 도중에 그만두었던 기억이 난..

API (Application Programming Interface)

#1 알고리즘 #1-1 API는 UI와 비슷하다. UI가 화면을 통해 사용자와 소프트웨어가 상호작용하는 규격이라면, API는 프로그래머끼리 또는 소프트웨어끼리 또는 프로그래머와 소프트웨어 간의 상호작용을 위한 규격이라는 점에서 그렇다. UI는 인터페이스에 불과하며, 실제 화면을 구성하는 것은 버튼ㆍ스크롤바ㆍ텍스트 박스ㆍ이미지 등이다. API 또한 엄연히 인터페이스에 불과하며, 실제로 기능을 구현하는 것은 라이브러리다. 예를 들어, Google Map 서비스를 실제로 구현하는 것은 구글 서버에 저장된 지도ㆍ위치 관련 라이브러리들이지 Google Map API 자체가 아니다. 사용자는 그저 API 즉, '연결된 라이브러리에 접근해 그 기능을 활용할 수 있는 관문(인터페이스)'을 통해 상호작용할 뿐이다. #1..

[Kotlin] 확장 함수(Extension functions)

#1 코드 - 코틀린 #1-1 fun main() { var testInteger : Int = 7 testInteger = testInteger.plusAndMultiply(3, 5) println("${testInteger}") // 결과로 50이 출력된다. } fun Int.plusAndMultiply(plusValue : Int, multiplyValue : Int) : Int { return (this + plusValue) * multiplyValue } 이 코드는 확장 함수(Extension functions)를 사용하는 예이다. 확장 함수란 기존 클래스의 멤버 함수인 것처럼 호출할 수 있지만, 해당 클래스에 직접 정의된 멤버가 아닌 외부에서 정의된 함수다. 확장 함수의 문법은 아주 간단하다..

[백준] 2108 (통계학)

#1 알고리즘한 번의 for문으로 모든 걸 다 구하고 싶었다, 그 편이 성능에서 더 좋을 것이라는 생각에서였다. 하지만, 코드가 심각하게 길어지거나 코드가 짧은 대신 가독성이 좋지 않았다. 그래서 for문을 2번 쓰는 코드를 짰다. 첫번째 for문은 N개의 수를 읽어, 배열 valueCounts를 완성한다. 두번째 for문에선 완성된 배열 valueCounts를 순회하며 산술평균, 중앙값, 최빈값, 범위를 도출한다. #2 코드 - 코틀린import java.util.Queueimport java.util.LinkedListimport kotlin.math.roundToInt/*(1) 산술평균: Arithmetic mean(2) 중앙값: Median(3) 최빈값: Mode(4) 범위: Range*/fun ..

[백준] 10845 (큐)

#1 알고리즘java.util.Stack과는 달리 java.util.Queue는 클래스가 아니라 인터페이스다. 나는 java.util.Queue 인터페이스를 구현한 클래스인 LinkedList를 Queue로서 사용했다. last()는 확장 함수(Extension functions)다. #2 여담확장 함수 Iterable.last()가 기술된 _Collections.kt는 실제 위치가 kotlin-stdlib.jar/kotlin/collections에 있지는 않지만, 논리적인 구조상 파일 첫머리의 pakage에 kotlin.collections로 선언되어 있다. 참고로, _Collections.kt와 Collections.kt는 다른 파일이며 후자는 해당 디렉토리에 실제로 존재한다. 물론, 패키지 선언은 ..

AndroidX (구 Support Library)

#1 알고리즘안드로이드 API 레벨이 오를 때마다, 당연하게도 사용할 수 있는 안드로이드 프레임워크의 라이브러리가 달라진다. 예를 들어, android.widget.Toolbar 클래스는 안드로이드 API 레벨 21에 추가되었기에, 하위 버전의 API에서는 오류가 발생한다. Support Library가 나오기 전 안드로이드 개발자들은 앱이 설치된 휴대폰의 API 레벨을 읽고, 각 API 별로 분기 코드를 작성해야 했다. 이후, Support Library 출범 후 예전 안드로이드 API에도 최신 기능을 사용할 수 있게 되었다. 예를 들어, android.support.v7.widget.Toolbar 클래스는 안드로이드 API 레벨이 7 이상이기만 하면 사용할 수 있다 (패키지 명(네임스페이스)에 있는 ..

API, Framework, SDK, Tool, Project, Architecture, IDE, Library, Package의 관계

#1 알고리즘항상 쓰이는 개념이지만 그 관계를 파악하기 어려웠던 개념들을 정리했다. 다만, 위 정리는 이해를 돕기 위한 비유일 뿐이며, 각 요소들은 관점에 따라 설계도, 도구, 작업물의 범주를 얼마든지 넘나들 수 있다. 또, 위에 있는 요소와 아래 있는 요소가 언제나 반드시 부모 - 자식 관계를 형성하는 것은 아니다. #2 같이 보면 좋은 개념 API (Application Programming Interface)#1 알고리즘 API는 UI와 비슷한 맥락이 존재한다. UI가 사용자와 화면 간의 상호작용을 위한 규격이라면, API는 프로그래머끼리 또는 소프트웨어끼리 또는 프로그래머와 소프트웨어 간의 상호작용kenel.tistory.com

[백준] 28417 (스케이트보드)

#1 알고리즘 퀵 정렬 (Quick Sort)#1 알고리즘 어떤 원소를 기준으로 잡을 것이냐는 아무래도 상관없다. 여기에서는 각 배열의 맨 끝 원소를 기준으로 잡기로 한다. 혹시라도 기준을 대략적으로라도 원소들의 평균값에 가깝게 잡kenel.tistory.com정렬 알고리즘은 여러 가지가 있다. 상황에 맞추어 가장 적절한 알고리즘을 골라야 하지만, 나는 알고리즘을 공부 중이므로 사용해 보지 않은 정렬 알고리즘 중에 아무거나 골라서 사용한다. 이 문제에 사용할 알고리즘은 퀵 정렬(Quick Sort)이다. #2 코드#2-1 자바import java.util.Scanner;public class Main { public static void main(String[] args) { Scann..