본문 바로가기
반응형

전체 글91

[알고리즘 / Kotiln] 프로그래머스 - 수식 최대화 (2020 카카오 인턴십) 그동안 조금 공부를 게을리했던 것 같아서 다시 의지를 불태우기 위해 오랜만에 책상에 앉아서 프로그래머스를 들어갔다. 새로운 문제를 풀기보다는 예전에 풀어봤던 정확히는 눈으로 보았던 카카오 인턴십 문제를 다시 풀어보기로 했다. 1년 전에는 풀다가 포기한 문제였는데 다시 풀어보려니 왠지 모르게 긴장이 되었다. 이제부터라도 일주일에 최소 1개의 문제 푸는 습관을 들여야겠다. 수식 최대화 문제 설명 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 같은 방식으로 결정하려고 합니다. 해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(+, -, *) 만으로 이루어.. 2022. 2. 8.
[Android] 실시간 데이터 처리를 위한 STOMP 사용하기 (Kotlin) 새로운 프로젝트를 하면서 실시간으로 갱신되는 데이터 처리가 필요해서 Web Socket 위에서 동작하는 문자 기반 메세징 프로토콜인 STOMP를 사용했습니다. 이번에는 이 STOMP를 프로젝트에 적용하면서 공부했던 내용들을 정리해보려고 합니다. STOMP를 간단히 설명하면 pub/sub 구조를 이용하여 client와 서버가 통신하는 방법입니다. 기존의 Web Socket은 1:1 통신만이 가능했다면 STOMP는 메시지 브로커가 존재하여 1 : N의 관계를 가질 수 있습니다. Message Broker(메시지 브로커)는 Publisher(송신자)로부터 전달받은 메시지를Subscriber(수신자)로 전달해주는 중간 역할이며 응용 소프트웨어 간에 메시지를 교환할 수 있게 합니다. 그리고 기존에는 WebSock.. 2022. 1. 26.
2021년 하반기 회고 1월 중순이 다되어가는 시점에 하반기 회고를 작성한다. 원래는 1월 초에 쓰려고 했는데 솔직히 귀찮아서 작성을 미루고 있다가 정신 차리고 컴퓨터 앞에 앉았다. 정리하다 보니 내용이 크게 없는 것 같아서 앞으로는 1년 단위로 작성을 해야겠다. 업무 일단 윈도우즈 솔루션을 어느 정도 안정화시키고 주요한 기능들을 추가했다. (아직 갈길은 멀지만..ㅎㅎ) 이때까지 했던 작업들을 간단히 나열하면 다음과 같다. 각 기기별로 버전 관리할 수 있게 기능 개발 윈도우즈 프로그램과 서버에 필요한 추가적인 API 개발 매출 현황 기능 개발 (포스) KICC, NICE, KIS VAN 모듈 개발 프린터 기능 모듈화 분산되어 있던 결제 로직 통합 포스, 키오스크 내부 DB 통합 및 정리 현금 시재, 싯가 상품 적용, 오프라인 .. 2022. 1. 17.
[Android] 앱, 패키지 설치 여부 확인하기 내 앱에서 다른 앱의 활성화시키려고 할 때 그 앱이 현재 디바이스에 설치가 되어있는지 확인할 필요가 있습니다. 이번에는 PackageManager를 통해 설치 여부를 확인하는 방법을 알아보겠습니다. 아래의 방법을 사용하기 위해서는 기본적으로 앱의 패기지명을 알아야 합니다. 방법 1 val packageName : String = "com.google.android.apps.maps" fun isAppInstalled(packageName : String, packageManager : PackageManager) : Boolean{ return try{ packageManager.getPackageInfo(packageName, 0) true }catch (ex : PackageManager.NameNo.. 2022. 1. 6.
[Android] Fragment에서 View Binding 사용 시 주의사항 안드로이드 공식 문서에서 Fragment의 View Binding 사용에 대하여 다음과 같이 샘플 코드를 제공하고 있습니다. private var _binding: ResultProfileBinding? = null // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = ResultProfileBinding.inflate(inflater,.. 2022. 1. 3.
[Kotlin] lateinit과 lazy란? - 지연 초기화를 통한 성능 개선 오늘은 Kotlin의 지연 초기화에 대해 알아봅시다. 초기화라는 말은 익숙하게 들어서 쉽게 이해할 수 있지만 지연(Lazy) 같은 경우는 프로그램에서는 기존과 다르게 다음과 같이 해석됩니다. 프로그램에서 Lazy는 퍼포먼스를 높이기 위해 처음부터 모든 것을 초기화하는 것이 아니라 필요한 순간까지 최대한 초기화를 지연시킨다는 의미로 사용한다. 지연 초기화는 왜 사용하는 것일까? 보통 class에서 변수를 초기화하면, 클래스 생성 시 해당 변수도 함께 생성되며 초기화됩니다. 그렇게 되면 클래스 객체를 생성할 때마다 해당 변수도 함께 초기화되기 때문에 바로 사용할 수 있다는 장점이 있습니다. 하지만 해당 변수를 바로 사용하지 않거나 꼭 사용하는 경우가 아니라면 클래스를 생성할 때마다 변수를 초기화하기 때문에 .. 2021. 12. 24.
반응형

loading