전체 글 109

위치 알리미 소스 Github에 공개 결정!!

작년 후반기에 구글에서 SMS_SEND, SMS_RECEIVED 권한 쓰는 것을 제한하니 앱을 수정하라는 메일을 보내왔었습니다. 저는 구글에 앱의 핵심기능이라고 열심히 메일을 썼으나 구글에서는 위치를 알리는 것이 목적이니 굳이 SMS를 쓸 이유가 없다. FCM을 이용해서도 메시지를 보낼 수 있으니 앱을 수정하라고 메일이 오면 3월까지 유예기간을 주었습니다. 하지만, 앱이 설치 안되어 있어도 알림이 가야 했기에 FCM 적용은 하지 않기로 했습니다. 그러면서, 혹시나 필요하고 싶으신 분이 계실까봐 Github에 소스코드를 공개하기로 했습니다. 어플리케이션을 설치해서 사용하고 싶으신 분은 소스코드를 받아 APK 파일로 컴파일 하셔서 설치해서 쓰시면 됩니다. 혹시나 미흡하지만 소스코드가 필요하신 분은 참조하셔도..

Toy Project 2019.04.24

IntelliJ(인텔리J) 단축키

안드로이드 스튜디오 및 자바를 쓰다보면 IntelliJ 를 쓸 때가 많습니다. 이 때 단축키를 몰라서 마우스 사용이 잦은 편입니다.이러다 보니 효율이 많이 떨어지는 것 같아서 단축키를 공부하고 있습니다.자주 사용 할 만한 것들을 추려보았는데, 여러분에게도 도움이 되셨으면 좋겠습니다.혹, 여러분이 자주 사용하는 단축키가 빠져있다면 댓글로도 달아주세요. 이동Ctrl + N : 클래스 이름으로 클래스 이동하기Ctrl + Shift + N : 파일 이름으로 파일 이동하기Alt + 좌우 방향키 : 열려있는 탭이동F12 : 이전의 도구 창으로 이동하기Esc : 에디터 창으로 이동하기Shift + Esc : 이전의 도구창 숨기기 Ctrl + G : Goto 라인Alt + 위 아래 방향키 : 메소드 단위로 이동하기F2..

안드로이드 http 프로토콜 접속 시 예외발생 조치 (ERR CLEARTEXT NOT PERMITTED)

어제 앱을 개발 중 glide v4를 사용하여 웹에 있는 그림을 load 하였는데, 아래와 같은 예외를 주며 동작을 하지 않았습니다. com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, REMOTEThere was 1 cause:java.io.IOException(Cleartext HTTP traffic to ~~~~ not permitted) call GlideException#logRootCauses(String) for more detail 처음에는 glide 4로 버전업을 하면서 뭔가 바뀐 것이 있나 싶어서 glide 문서를 뒤지고, 관련 코드들을 보았는데 특별한 것이 없었습니다..

[Algorithm] 빅오분석법

빅 오분석(표현)법은 알고리즘의 성능이나 복잡도를 설명하는데 일반적으로 사용하는 표현 방법입니다. 빅 오 분석법에서는 입력 겂의 크개(개수)를 n개라고 가정하고, 이 n개의 입력된 값을 몇번이나 확인해봐야하는 지를 n의 식으로 표현한 것입니다. 즉, 동작하기 위해 필요한 연산횟수를 나타낸다고 생각하면 됩니다.그리고, n이 무한대로 올라가면 n이나 n+2 나 크게 차이가 나지 않기 때문에 2와 같은 상수항은 그냥 무시해도 무방합니다. 빅 오 분석법을 적용하는 방법1, 입력값이 무엇인지 확인 하고 어떤 것을 n으로 놓아야 할지 결정한다.2. 알고리즘에서 수행해야할 연산 횟수를 n의 식으로 표현한다.3. 차수가 제일 높은 항만 남긴다.4. 모든 상수 인수를 없앤다. 어떤 알고리즘이 가장 빠른가?가장 빠른 것은..

템플릿 메소드 패턴(template method pattern) 이란?

이번에는 템플릿 메소드 패턴(template method pattern)에 대해서 알아보도록 하겠습니다.이전글들과 마찬가지로 Head First Design Pattern 책을 참고했습니다. 템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다.알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정단계를 재정의 할 수 있습니다. 즉, 템플릿 메소트 패턴은 알고리즘 틀을 만들기 위한 것입니다.아래 예제 소스코드는 커피, 차를 만드는 과정을 프로그램 한 것입니다. 커피, 차를 만드는 일련의 과정을 메소드로 정의합니다.그리고, 이 메소드 중 하나 이상이 추상메소드로 정의되며, 그 추상 메소드는 서브클래스에서..

땅따먹기(동적계획법, 문제 출처 : 프로그래머스)

[문제] 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다. 예를 들면, | 1 | 2 | 3 | 5 | | 5 | 6 | 7 | 8 | | 4 | 3 | 2 | 1 | 로 땅이 주어졌다면, 1행에서 네번째 칸 (5)를 밟았으면, 2행의 네번째 칸 (8)은 밟을 수 없습니다. 마지막 행까지 모두 내려왔을 때, 얻을 수 있는 점수의 최대값을 return하는 solution 함수를 완성해 주세요. 위 예의 경우, 1행의 네번째 칸 (..

팩토리 패턴(Factory Pattern) 이란?

이번 시간에는 팩토리 패턴(Factory Pattern)에 대해서 알아보도록 하겠습니다. 원칙 : 바뀔 수 있는 부분을 찾아내서 바뀌지 않는 부분하고 분리시켜야 한다. new를 사용하는 것은 구상클래스의 인스턴스를 만드는 것입니다. 구상클래스를 바탕으로 코딩을 하면 나중에 코드를 수정해야할 가능성이 높아지고, 유연성이 떨어지게 됩니다. 그 이유는 바로 변화에 약하기 때문입니다. 인터페이스에 맞춰서 코딩을 하면 시스템에서 일어날 수 있는 여러가지 변화를 이겨낼 수 있습니다. 이렇게 구상클래스의 인스턴스를 만드는 부분을 찾아서 분리/캡슐화 하기 위해서 바로 팩토리 패턴을 씁니다.팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만..

프록시 패턴(proxy pattern) 이란?

이번에는 프록시 패턴(proxy pattern)에 대해서 알아보도록 하겠습니다. 프록시 패턴은 어떤 객체에 대한 접근을 제어하는 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴입니다. 주로 프록시 패턴은 RealSubject 가 원격 시스템에서 돌아가거나, 그 객체의 생성 비용이 많이 들어 실제 사용 시점에 객체를 생성하거나, 실제 객체에 접근을 제한 및 제어를 해야 할 때 등 의 경우에 사용 됩니다. 프록시 패턴의 UML은 아래와 같습니다. Proxy 에는 RealSubject에 대한 레퍼런스가 들어있습니다. 그리고, Proxy 와 RealSubject 는 똑같은 인터페이스(Subejct)를 구현하기 때문에 RealSubejct 객체가 들어갈 자리면 어디든지 Proxy 를 대신 쓸 수 있습니다..

[리뷰 - 영화] 151 경기 (When the Game Stands Tall)

불금의 밤.. 일찍 잠들기 싫어서 KT셋톱의 추천 무료영화를 뒤지다가 평점이 괜찮아서 보게 된 영화입니다.실화를 배경으로 한 영화이고, 미식축구 영화입니다. 코치가 기독교인이라서 그런지 기독교 가치관이 묻어나는 영화 입니다. 참고하세요. 저는 개인적으로 풋볼을 가르치는 코치의 철학이 너무 멋있었습니다.경기에 이기고 지고가 아닌 인생에서 최선을 다하는 방법을 가르치고, 팀워크의 중요성을 이야기 합니다. 요즘과 같이 좋은 선생님, 코치, 멘토, 리더 를 보기 힘든 시대에 다시 한번 그들의 역할이 무엇인지 생각해보게되었습니다.그리고, 팀워크를 이루어 내는데, 무엇이 뒷바침되어야 하는가는 것도 곱씹어봅니다. 공식 예고편(official trailer)

스테이트 패턴(State Pattern) 이란?

이번 시간에는 스테이트 패턴(State Patter)에 대해서 알아보겠습니다. 사탕 뽑기 기계 프로그램을 구현한다고 가정하면 사탕뽑기 기계는 '동전없음', '동전있음', '상품배출', '상품품절' 상태를 가질 것입니다.그리고, 사탕뽑기의 각 상태는 아래와 같은 행위를 통해서 다른 상태로 변이하게 됩니다. 이 행위들과 상태를 코드로 구현하면 아래와 같이 구현할 수 있을껍니다. public class GumBallMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; private int numberOfGumBall = 0;..