깨알 개념 122

[Android] ViewModel - 기초

#1 View Model의 필요성#1-1 예제버튼을 누르면 TextView의 text가 1씩 증가하는 예시 앱이다. MainActivity.kt 코드는 다음과 같다. // package com.example.viewmodelbasicsimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport androidx.databinding.DataBindingUtilimport com.example.viewmodelbasics.databinding.ActivityMainBindingclass MainActivity : AppCompatActivity() {    private lateinit var binding: ActivityMai..

[Android] Data Binding - View에 객체 전달

#1 객체 전달의 필요성#1-1 이전 글 Data Binding - 기초#1 데이터 바인딩 사용 전 #1-1 예시 앱 위과 같은 간단한 앱이 있다. Button을 누르면, EditText의 text가 바로 위에 있는 TextView의 text에 대입된다. 이 앱의 코드는 다음과 같다. #1-2 activity_main.xml #1-3 Mainkenel.tistory.com이전 글에서 이어진다. 이전 글에선, 데이터 바인딩을 통해 View의 레퍼런스를 일괄적으로 가져와 참조할 수 있었다. 이번에는 반대로 View에게 객체를 보낸다. 아래의 예시 앱을 보자.  #1-2 예시 앱이 앱은 어떤 책 클래스의 객체를 받아 화면에 표시하는 앱이다. 화면 아래에 있는 버튼들을 누르면 화면 위 쪽의 TextView들의 ..

[Android] Data Binding - 기초

#1 데이터 바인딩 사용 전#1-1 예시 앱위과 같은 간단한 앱이 있다. Button을 누르면, EditText의 text가 바로 위에 있는 TextView의 text에 대입된다. 이 앱의 코드는 다음과 같다. #1-2 activity_main.xml                             #1-3 MainActivity.kt// package com.example.databindingpracticeimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.EditTextimport android.widget.TextViewclass Ma..

그래프 - 그래프의 종류와 표현

#1 그래프#1-1 그래프그래프는 현상이나 사물을 정점(Vertex)와 간선(Edge)로 표현하는 것이다. 정점은 어떤 개체를 나타내고, 간선은 그 개체들 간의 관계를 나타낸다. 위 그림은 각 정점(도시)을 항공편(간선)이 잇는 모습을 표현한 예이다. n개의 정점 집합 V와 이들 간에 존재하는 간선의 집합 E로 구성된 그래프 G를 G = (V, E)로 기술한다. #1-2 가중치가 없는 그래프 vs 가중치가 있는 그래프간선에는 가중치를 줄 수 있다. 항공편으로 비유하자면, 운항비가 가중치가 된다. 가중치가 없는 그래프를 가중치가 있는 그래프처럼 생각할 수도 있다. 모든 가중치를 1로 보면 된다. #1-3 무향 그래프 vs 유향 그래프항공편은 반드시 양방향적이지는 않다. 예를 들어 런던에서 파리를 갈 수 있..

동적 프로그래밍 (Dynamic Programming), 상향식(Bottom-up) 및 하향식(Top-down) 접근

#1 알고리즘#1-1 정의동적 프로그래밍을 한 줄 요약하면 중복의 제거다. 정적(static)이라는 개념과 반대되는 개념으로서, 동적(dynamic)이라는 단어가 이름에 붙었다. 확실히 static이 붙을 만한 작업은 아니지만, 그렇다고 많은 단어들 중에 굳이 dynamic가 붙을 필요 또한 없다. '동적', ' dynamic'이라는 이름은 동적 프로그래밍의 (중복의 제거라는) 핵심을 직관적으로 이해하지 못하게 만든다. 하지만, 관례적으로 이미 굳어진 이름이라 앞으로도 쓰일 것이라는 사실은 안타까우면서도 분명하다. #1-2 종류동적 프로그래밍은 이와 같이 2가지 방식으로 나뉜다. #1-3 상향식(Bottom-up) 접근 [백준] 17626 - Four Squares#1 알고리즘 123 123 재귀 함수가..

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)를 사용하는 예이다. 확장 함수란 기존 클래스의 멤버 함수인 것처럼 호출할 수 있지만, 해당 클래스에 직접 정의된 멤버가 아닌 외부에서 정의된 함수다. 확장 함수의 문법은 아주 간단하다..

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

[Java] 설치, JRE와 JDK의 차이, 환경 변수 설정

#1 JRE와 JDK의 차이Gradle을 설치해서, Java 프로젝트를 Gradle을 통해 직접 빌드해보려고 했다. 먼저, Gradle은 Java를 요구하므로 Java를 먼저 설치한다. "자바를 설치한다"라는 건 크게 2가지의 의미로 나뉜다. 바로 JRE(Java Runtime Environment)를 설치하느냐, JDK(Java Development Kit)를 설치하느냐다. 비유하자면 JRE는 이미지 뷰어고 JDK는 이미지 편집기다. 둘다 Java를 실행시키는 일을 할 수 있지만, Java 개발은 JDK만 가능하다. JDK는 JRE의 기능에 더해 자바 컴파일러(javac)와 디버그 및 빌드 관련 기능을 가지고 있다. 자바는 분명 설치한 것 같은데, 마치 설치되지 않은 것처럼 동작한다면, JDK가 아니라..