전체 글 160

BookSSU 숭실대 도서검색 앱

2016-17년 당시에는 도서관 내 도서 검색 서비스의 품질이 좋지 않았다. 도서관에서 PC로 검색하거나 모바일 브라우저로 PC 화면으로 접속하여 검색해야하는 불편함이 있었다. 이를 해결하기 위해 BookSSU 도서검색 앱을 생각하였고 1인 디자인/기획/개발을 통해 개발하였다. 사용자의 만족도도 괜찮았으나 도서관측의 외주 개발을 통해 신규 체계를 도입하면서 본 앱은 동작이 멈추게 되었다.

포트폴리오 2019.06.11

SSUMAP Backend / iOS / Android 개발

돌이켜보면 본 프로젝트는 어떤 생각으로 시작했을까 아직도 의문이 남는 프로젝트이다. 모바일에만 관심을 가지고 있는 내가 특히 안드로이드만 해봤던 내가 iOS를?? Swift를?? 심지어는 BackEnd까지?? 그 당시로서는 말도 안되는 상황이었다. 하지만, 결국 했다. 그냥 한 것이 아니라 동작까지 했다. 정말 믿기지 않았다. 그리고 느꼈다. Backend는 내 길과 맞지 않다는 것을... 1인 디자인, 1인 개발, 1인 기획.. 서울대 캠퍼스맵 App을 보고 영감을 받아서 시작했던 프로젝트이다. 하지만, 학교의 규모와 상권의 규모의 차이가 너무 심하여 굳이 이런 어플이 필요가 없다는 판단하게 서비스를 하지 않기로 결정하였다. 하지만, 백엔드, 모바일 모두 해봄으로써 각 분야가 어떻게 소통하는지 대략적으..

포트폴리오 2019.06.11

Android Context에 대하여

Context의 정의 Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc. Application 환경에 대한 전역 정보를 접근하기 위한 인터페이스. 추상 클래스이며 ..

클라이언트 2019.06.10

Activity의 4가지 Launch Mode에 대하여

Android Activity의 4가지 런치모드에는 다음과 같이 존재한다. Standard SingleTop SingleTask SingleInstance Standard방식 일반적인 모드다. 동일한 액티비티던 다른 액티비티던 계속 엑티비티 스택에 쌓아 올린다. SingleTop방식 statndard 모드와 다르게 "최상위 스택에 있는 엑티비티"를 또 다시 호출할경우 새로 스택에 쌓지않고 기존에 있는 액티비티를 재활용하고 이때 해당 엑티비티 (그림에서 A) 는 onNewIntent() 메서드가 호출되고 새로운 intent 를 넘김으로써, 엑티비티가 다시 호출 됬음을 알린다. 이때 주의할 점은 "최상위 스택"에 있지 않는 엑티비티의 경우 그냥 standard 모드 처럼 새로운 엑티비티가 생성되고 스택에 쌓..

클라이언트 2019.06.10

Fragment 간의 데이터 전달 및 findViewById 사용하기

안드로이드에서 Fragment 간에 데이터를 전달하는 방법에 대해서 정리하고자 한다. Activity에서는 Intent를 사용하여 데이터를 전달한다면 Fragment는 Bundle을 사용하면 된다. Fragment fragment = new testFragment(); // Fragment 생성 Bundle bundle = new Bundle(); bundle.putString("param1", param1); // Key, Value bundle.putString("param2", param2); // Key, Value fragment.setArguments(bundle); Bundle로 전달된 데이터는 전달받는 Fragment의 onCreateView에서 getArguments()를 이용하여 데이터..

클라이언트 2019.06.10

Retrofit2 사용해보기

Retrofit을 사용해본지 상당한 시간이 지났고 기억이 잘 나지 않아 복습하고 학습하자는 의미로 연습해보기로 하였다. API는 비트코인 저장소 중 하나인 Bithumb Open API를 사용해보기로 하였다. Base URL : https://api.bithumb.com/public/ticker/{currency} 1) 먼저 Retrofit과 GSON을 사용하기 위해 Gradle설정을 한다. dependencies { ... compile 'com.google.code.gson:gson:2.8.2' // Gson 사용시 compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' //..

클라이언트 2019.05.31

ANR의 정의, 발생 요인 및 대응책

ANR이란? ANR은 Application Not Responding의 약자로 그대로 해석해보면 의미를 쉽게 파악할 수 있다. '애플리케이션이 응답하지 않는다.' 인 것이다. 이 에러의 원인은 Main Thread(UI Thread)가 일정 시간 어떤 Task에 잡혀 있으면 발생하게 된다. ANR의 발생 요인 ANR은 대체로 아래의 상황에서 발생하게 된다. 애플리케이션이 UI 스레드에 어떠한 I/O 명령(빈번한 네트워크 액세스)으로 인해 막힐 때 너무 많은 시간을 정교한 메모리 구조를 구축하는데 들일 때 구체적으로 설명하자면 Android Developers 에서는 아래와 같이 명시하고 있다. Input 이벤트(키를 누르거나 화면을 터치하는 등)에 5초안에 반응을 하지 않을 때 BroadcatReceiv..

클라이언트 2019.05.30

High Resolution Bitmap를 ImageView에 적용 시 Bitmap Error를 해결하는 방법

최신 단말기에서는 크게 문제가 발생되지 않는 반면 예전(성능이 낮은) 단말기에서 고해상도의 Bitmap을 ImageView에 설정하면 보이지 않는 현상이 발생하는데 이를 해결하는 방법을 정리해보고자 한다. Logcat을 살펴보면... 설정하려는 비트맵의 크기가 텍스쳐에 업로드할 수 있는것에 비해 너무 크다는 에러 로그가 뜬다. W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (4160x2340, max=4096x4096) 안드로이드의 Hardware Accelerated를 사용할 경우 기본적으로 GL_MAX_TEXTURE_SIZE 만큼만 rendering을 할 수 있기 때문에 이 SIZE를 넘어가는 Bitmap들은 문제가 발생한다는 것이..

클라이언트 2019.05.30

Linked List implemented by JAVA

JAVA로 구현한 링크트리스트 소스 코드는 다음과 같다. class Node { Object data; Node next_node; Node(Object obj) { this.data = obj; this.next_node = null; } } Node클래스다. 기본적으로 데이터가 들어갈 부분과 Next Node로 이루어져 있으며 어떤 데이터 타입이 들어올지 모르기 때문에 Object타입으로 클래스를 정의하였다. public class LinkedList { private Node head; private Node tail; private int size = 0; Linked List 클래스이다. head 노드와 tail 노드, 그리고 리스트의 크기를 나타내는 변수가 있다. 기본적으로 리스트 생성 시 노..

컴퓨터공학 2019.05.29