깨알 개념 86

[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가 아니..

display 속성 값 block, inline, inline-block의 차이

#1 웹 페이지 뒤에 나올 모든 코드를 하나의 파일에 합쳐 넣었다. 백문이 불여일견. 여러 개의 div를 나열하고 각각의 displayㆍwidthㆍheight 스타일 속성을 동적으로 변경할 수 있는 프로그램을 만들었다. 장난감처럼 마음대로 다루어보면서 감을 익히자. #2 알고리즘 #3 코드 #3-1 HTML abcd efgh ijkl mnop qrst uvwx yz #3-2 CSS #display_panels * { /* css iniciation */ padding: 0; margin: 0; box-sizing: border-box; } #display_panels {height: 200px;} #abcd {background-color: aquamarine;} #efgh {background-colo..

퀵 정렬 (Quick Sort)

#1 알고리즘 #1-1 어떤 원소를 기준으로 잡을 것이냐는 아무래도 상관없다. 여기에서는 각 배열의 맨 끝 원소를 기준으로 잡기로 한다. 혹시라도 기준을 대략적으로라도 원소들의 평균값에 가깝게 잡을 수 있는 조건이 존재한다면, 해당 조건을 이용해 기준을 잡게끔 응용할 수도 있을 것이다. 기준이 평균값에 가깝게 잡힐수록, 퀵 정렬의 성능이 좋아지기 때문이다. #1-2 이 '분할(partition)'의 결과로 기준 원소의 자리가 최종적으로 결정되면, 그 원소는 앞으로의 모든 qucikSort() 재귀 호출에서 사용되지 않고 영원히 그 자리가 고정된다. 즉, 분할 한 번에 원소 하나가 정렬되는 것이다. #1-3 퀵 정렬 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 퀵 정렬(Quicks..

미디어 쿼리 (Media Queries)

#1 알고리즘#1-1화면 크기의 다양성을 고려한다는 말이 꼭 다른 플랫폼끼리의 다양성만을 의미하진 않는다. PC에서 웹 페이지를 볼 때 인터넷 창을 최대화해서 보지 않고, 예를 들면 화면 좌우 각각에 폭을 줄인 인터넷 창을 하나씩 켜 놓은 경우가 있다. 이때, 그에 맞는 적절한 동작을 미디어 쿼리가 수행할 수 있다. #1-2 #2 코드#2-1 HTML Media Queries #2-2 CSS@media screen and (max-width: 767px) { /* width

힙 정렬 (Heap Sort)

#1 알고리즘 #1-1 힙(heap)이라는 영어 단어의 사전적 의미는 쌓아 놓은 무더기다. 그리고 이 단어는 프로그래밍에서도 사용된다. 첫째로 메모리 영역에서, 둘째로 자료구조에서다. 이 둘은 서로 다른 개념이지만, 힙(heap)이라는 단어를 쓴 만큼 각각 힙의 사전적 의미와 관련된 내용이 있다. 메모리 영역에서의 힙은 무더기라는 뉘앙스를 풍긴다. 프로그램 수행 도중 그 크기가 변하지 않는 정적 할당과 달리 동적 할당은 필요한 만큼 크기가 무더기로 증가할 수 있기 때문이다. 자료구조에서의 힙은 '무더기'기 보단, 쌓임이라는 의미가 강조된다. 노드가 특정한 규칙을 지키며 차곡차곡 쌓이는 모습에서 힙이라는 이름이 붙었다. #1-2 힙 정렬은 자료구조에서의 힙을 이용하는 정렬이다. 자료구조에서의 힙은 최소 힙..

병합 정렬 (Merge Sort)

#1 알고리즘 #1-1 #1-2 #1-3 #1-4 #1-5 병합 정렬의 총 비교 횟수는, 최악의 경우 nlog2n이다 #2 코드 #2-1 자바 public static void mergeSort(int[] array, int startIndex, int endIndex) { // (startIndex < endIndex)의 의미: 배열의 크기가 2이상이다. if(startIndex < endIndex) { int midIndex = (startIndex + endIndex) / 2; mergeSort(array, startIndex, midIndex); mergeSort(array, (midIndex + 1), endIndex); merge(array, startIndex, midIndex, endInd..