분류 전체보기
-
Kotlin) inline 함수와 고차함수 알아보기Kotlin 2020. 12. 15. 12:45
고차함수(Higher order fuctions) 인자가 함수이거나 함수를 리턴하는 함수 코틀린에서 고차함수를 사용하면 추가적인 메모리 할당 및 함수호출로 Runtime overhead가 발생합니다. fun someMethod(a: Int, func: () -> Unit): Int { func() return 2 * a } fun main(args: Array) { var result = someMethod(2) { println("Just some dummy fuction") } println(result) } inline 개념 inline fuctions는 내부적으로 함수 내용을 호출되는 위치에 복사하며, 고차함수의 Runtime overhead를 줄여줍니다. 컴파일하는 동안 해당 함수의 모든 사용 ..
-
Kotlin) 코틀린 ::class.java와 리플렉션(Reflection)Kotlin 2020. 12. 14. 17:35
MainActivity::class MainActivity::class.java 코틀린에서 액티비티를 넘길 때 .java를 붙여 코드를 작성하는 것을 볼 수 있습니다. 그 이유는 자바에서 쓰는 클래스와 코틀린에서 쓰는 클래스가 다르기 때문입니다. 자바에서는 Class를 리턴하는 반면, 코틀린에서는 클래스명::class를 하게 되면 KClass를 리턴합니다. 그렇기 때문에 KClass를 Class로 바꿔줘야 하는데 이때 .java를 붙여 자바 클래스 값을 받습니다. 리플렉션(Reflection) 코드를 작성하는 시점에 런타임상 컴파일 된 바이트 코드에서 내가 작성한 코드가 어디에 위치하는지 알 수 없습니다. 그래서 바이트 코드를 이용해 내가 참조하려는 값을 찾기위해 사용됩니다. 코틀린에서 더블콜론을 이용해..
-
Android) LiveData 언더바 변수 의미 - Backing PropertyAndroid 2020. 12. 14. 17:13
LiveData를 사용하여 안드로이드 개발을 하다보면 아래 코드와 같이 언더바로 시작하는 변수와 그렇지 않은 변수가 쌍으로 붙어있는 코드를 볼 수 있습니다. MutableLiveData 와 LiveData ? MutableLiveData는 ViewModel 안에서 해당 데이터가 수정 될 수 있습니다. LiveData는 읽을 수 있지만, 변경 되지 않습니다. LiveData는 ViewModel 외부에서 데이터를 읽을 수 있으나, 수정되지 않게 하려면 LiveData를 통해 외부에 해당 데이터를 제공 해야 합니다. 이러한 이유는 외부에서 Livedata를 변경하지 못하게 하고, 내부에서는 변경이 가능하게 하기 위한 구현이 목적입니다. 이것은 "캡슐화"와 같은 방법입니다. 오브젝트의 필드 중 일부에 대한 직접..
-
Git) 좋은 git commit 메시지란 무엇일까?Git 2020. 12. 9. 16:48
그 동안 팀 프로젝트를 진행하면서 많은 개발자들의 git commit 메시지를 봐왔습니다. 누구는 한글로 메시지를 남기기도 했고, 누구는 영어로 짧게 혹은 길게 남겼습니다. 저 또한 그들의 메시지를 남기는 방식을 참초하며 영향을 받았고, 이런식으로 메시지를 남기는 것이 가독성이 더 좋을 것 같다는 생각을 했습니다. 그럼 좋은 git commit 메시지라는 것에 정답이 있을까? 라고 생각이 들었습니다. 결론 부터 말하자면 정답은 없습니다. 하지만 개발자들이 선호하고 좋은 커밋 메시지라고 약속하고 있는 것은 있습니다. 좋은 git 커밋 메시지를 작성하기 위한 7가지 약속 제목과 본문을 한 줄 띄워 분리하기 제목은 영문 기준 50자 이내로 제목 첫글자를 대문자로 제목 끝에 . 금지 제목은 명령조로 본문은 영문..
-
C++) string 문자열 scanf를 이용해 입력 받는 방법C++ 2020. 12. 8. 20:57
scanf를 이용해 아래처럼 문자열을 입력 받으려고 했으나 실패했습니다. 검색해보니 string은 cin 으로 입력 받을 수 있으나, scanf로는 입력 받을 수 없다고 하네요. 그럼 scanf로 문자열을 입력 받는 방법은 없는걸까? 1) char 배열로 만들어서 입력받기. 하지만 scanf는 공백이 나타나면 멈추기 때문에 아래와 같이 test가 짤리게 됩니다. 2) gets로 입력 받기. 공백문자를 포함해 엔터를 입력하기 전까지 모두 입력받습니다. 하지만 저런 warning이 발생합니다. gets()는 라인 입력의 끝을 확인하지 않아 오버플로우가 발생해 비추한다고 합니다. 3) fgets()로 입력 받기. \0을 포함한 문자열의 최대크기를 받기 때문에 오버플로우 문제를 해결할 수 있습니다. 함수가 리턴..
-
Kotlin) 코틀린 안드로이드 익스텐션 폐기 - Android Kotlin Extensions Will be removed in a futureKotlin 2020. 12. 8. 00:04
Kotlin Android Extensions 대표적인 기능으로 아래의 기능을 제공합니다. Synthetics: findViewById를 대체하는 kotlinx.android.synthetic 바인딩. 해당 View의 id를 바로 참조하여 사용가능한 기능 btnGo.setOnClickListener { TODO() } Parcelize: 직렬화/역직렬화 Serializable의 장점과 Parcelable의 보일러 플레이트 코드를 덜어내고 성능상 이점을 가진 기능 @Parcelize 어노테이션과 Parcelable을 구현해주기만 하면 사용할 수 있습니다. import android.os.Parcelable import kotlinx.android.parcel.Parcelize @Parcelize data ..
-
프로그래머스) 최솟값 만들기 - Java알고리즘 2020. 12. 3. 16:22
프로그래머스 - 최솟값 만들기 코딩테스트 연습 - 최솟값 만들기 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱 programmers.co.kr 문제의 규칙성을 찾아보니 A배열을 오름차순 정렬하고 B배열을 내림차순 정렬해 순서대로 곱한 값을 더하면 최솟값이 되는것이었습니다. int 배열에서 Collections.reverseOreder 사용해서 바로 내림차순 하려니까 안되서 Integer 형식으로 매핑해줘야 가능했습니다.