전체 글 114

[자료구조] Hash(해시), Hash Table(해시 테이블)

1. 해시 함수(Hash Funtion) 데이터의 효율적인 관리를 목적으로 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다. 이 때 매핑전 원래 데이터의 값을 키(Key), 매핑 후 데이터의 값을 해시값(Hash value) 또는 해시코드, 매핑하는 과정 자체를 해싱(hashing) 이라고 합니다. 해시 함수의 가장 기본적인 성질은 두 해시 값이 다르면 원래의 데이터의 값도 다르다는 것입니다. 하지만, 같은 해시값을 가지고 있더라도 원래의 데이터가 꼭 같은 것은 아닙니다. 해시함수의 종류 : MD1, MD4, MD5, SHS, SHA-1, HAS-160 등 2. 해시테이블 (Hash Table) 해시테이블(Hash) 테이블은 효율적인 탐색을 위한 자료구조로 키(Key) 를 값(Value..

KTX / SRT 정기권에 대해 알아보자

제가 이직으로 서울에서 근무하게 되면서 바로 우리 가족이 함께 상경을 못하는 상황이라서 한동안 주말부부를 하며 지내야 합니다. 그래서, KTX/SRT 정기권에 대해서 알아봤습니다. 제가 알아본 부분을 공유드리니 필요한 분들에게는 도움이 되셨으면 좋겠습니다. 그리고, 잘못된 정보가 있으면 댓글 부탁드립니다. 먼저, 코레일 KTX는 정기권 종류가 3가지가 있었습니다. 일반정기권 월~금 요일만 이용가능. (토, 일, 공휴일은 이용 불가) 10일용, 1개월용 선택가능 자유석/입석 만 이용 가능, 자리 지정시 운임의 일정할인된 금액(15%) 으로 이용가능 사용개시일 5일전부터 구매가능 *. 자리지정석 : 일반적인 자리가 지정되는 형식, 자유석 : 평일은 보통 자유석 객차가 운행됨. 자유석 객차에서 먼저 앉은 고객..

Review/제품 2019.06.13

두번째 이직 경험기

최근 다니던 회사의 경영사정이 안 좋아져서 이직을 하게되었습니다. 이직을 하면서 느꼈던 2가지를 적어보려고 합니다. 먼저는 사이드 프로젝트는 중요하다. 라는 겁니다. 자동차 부품회사 전산실에서 안드로이드 개발자로 이직을 하게되었는데, 사실 중소 자동차 부품회사의 전산실에서 IT서비스 업체의 안드로이드 개발자로 이직하는 것을 쉽지가 않습니다. 제가 앞 전의 글에서도 한번 적었는데, 주로 유지보수 업무가 주된 업무이고, 오래된 시스템이 많기 때문에 요즘 트렌드에 맞는 개발언어나 개발프로세스 등을 사용하기 어렵기 때문입니다. 저는 다행히도, 토이 프로젝트로 취미삼아 출시했던 어플리케이션들로 면접의 기회를 잡을 수 있었고, 이렇게까지 합격기회까지 얻을 수 있었습니다. 블라인드 앱이나 개발 커뮤니티에 보면 사이드..

Essay 2019.06.04

View의 내용을 어떻게 이미지 파일로 만들었나요?

2018/12/30 - [Toy Project] - 2019년 신년 메시지는 '기분 좋은 인사' 로 보내세요. 2019년 신년 메시지는 '기분 좋은 인사' 로 보내세요. '기분 좋은 인사 : 2019년, 새해 인사말 및 안부, 감사, 경조사 등 인사말' 확인 - https://play.google.com/store/apps/details?id=com.toyproject.greeting 2019년 새해, 지인들에게 '기분 좋은 인사'로 새해인.. developside.tistory.com 지난 번 면접시에 사이드프로젝트로 진행한 '기분 좋은 인사' 의 기능을 설명하면서, 이미지와 사용자가 입력한 메시지 텍스트를 어떻게 이미지 파일로 만들어 보내냐는 질문을 받았었습니다. 코드를 작성한 지 오래되서 알음알음 ..

ViewHolder 가 무엇인가요?

최근에 제가 안드로이드 면접을 봤었습니다. RecyclerView 이야기가 나와서 설명하다가 ViewHolder에 대해서 설명해 보라는 면접 질문을 받았었는데, 막상 아는 내용이지만 설명하려고 하니 어렵더군요. 그래서 ViewHolder와 이를 사용하는 ListView와 RecyclerView에 대해서 간략하게 정리를 해 보았습니다. 1. ViewHolder란? 한마디로 설명하면 각 뷰를 보관하는 Holder 객체로 이야기 할 수 있습니다. "ListView / RecyclerView 는 inflate를 최소화 하기 위해서 뷰를 재활용 하는데, 이 때 각 뷰의 내용을 업데이트 하기 위해 findViewById 를 매번 호출 해야합니다. 이로 인해 성능저하가 일어남에 따라 ItemView의 각 요소를 바로..

위치 알리미 소스 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 책을 참고했습니다. 템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다.알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정단계를 재정의 할 수 있습니다. 즉, 템플릿 메소트 패턴은 알고리즘 틀을 만들기 위한 것입니다.아래 예제 소스코드는 커피, 차를 만드는 과정을 프로그램 한 것입니다. 커피, 차를 만드는 일련의 과정을 메소드로 정의합니다.그리고, 이 메소드 중 하나 이상이 추상메소드로 정의되며, 그 추상 메소드는 서브클래스에서..