2017의 게시물 표시

Git 커밋 메시지 작성법 포스팅을 읽고

이미지
주위사람들이 괜찮은 글이라면서 추천해준 포스팅이 있는데 몇가지 적용시키면 괜찮을것같은 내용이 있어서 남겨놓는다. 원본글은 https://item4.github.io/2016-11-01/How-to-Write-a-Git-Commit-Message/ 이다. git의 commit message가 왜 중요한지는 다들 알고있을꺼라 생각한다. 해당 링크에서는 commit message가 왜 중요한지를 요약해서 설명하니 한번쯤 읽어보고 공감해보는것도 좋을것같다.  본 내용에 들어가면 훌륭한 commit message를 작성하는 7가지 방법을 설명하는데 다음과 같다. 1. 제목과 본문을 빈 행으로 분리한다 2. 제목 행을 50자로 제한한다 3. 제목 행 첫 글자는 대문자로 쓴다 4. 제목 행 끝에 마침표를 넣지 않는다 5. 제목 행에 명령문을 사용한다 6. 본문을 72자 단위로 개행한다 7. 어떻게 보다는 무엇과 왜를 설명한다 우선 나는 git IDE를 사용한다. 주로 Sourcetree를 쓰고 요즘엔 gitkraken로 갈아타려고 한다. 그리고 대부분 그렇겠지만 github를 이용한다. 그럼 위의 7가지를 하나씩 살펴보자 1. 첫번째로 제목과 본문을 빈 행으로 분리한다.  링크에서는 여러가지 git 명령어를 통해 제목만 볼 수 있기때문이 가장 큰것같다. 내가 생각하는 제목과 본문을 나누는 이유는 github에 있는데, 아래의 이미지를 보면 제목만 나와있고 본문을 보려면 우측에 `...` 을 클릭해야 볼 수 있다.  이와같이 제목과 본문을 빈 행으로 구분해주면 github에서 쉽게 본문과 제목을 나눠서 볼 수 있기 때문에 나는 본문과 제목을 빈 행으로 분리시킨다. 사실 이런걸 의식해서 나누지는 않았었는데 sourcetree나 gitkraken을 사용하면 자동으로 적용되는 내용이다.  gitkraken 에서 커밋로그를 작성하는 창 2.

let과 const의 차이

let과 const 키워드에 대해서 자세하게 공부해보자.  let과 const는 다른 언어들과의 차이를 줄여주고 block-scope 변수와 상수를 정의하는 방법을 제공한다. let ECMAScript 5 이후에, 자바스크립트는 function scope와 global scope 두가지타입의 scope가 있었다. 이것은 많은 불안감과 예상치 못한 상황이 발생할 가능성이 존재했었다. 이유는 바로 자바스크립트의 block scope 의 부재때문인데, 이는 접근 가능성과 변수의 생명주기, block에서의 정의에 영향을 미친다. block은 괄호 안에서 모든것이 존재한다. function foo ( ) { var par = 1 ; if ( par >= 0 ) { var bar = 2 ; console . log ( par ) ; // prints 1 console . log ( bar ) ; // prints 2 } console . log ( par ) ; // prints 1 console . log ( bar ) ; // prints 2 } foo ( ) ; 코드를 실행시키면 다음과 같은 결과를 얻을 수 있다. 1 2 1 2 대부분의 개발자들이 다른 언어들에 미루어 보았을 때, if block 밖에서 bar에 접근할 수 없다고 생각한다. 예시에서 C언어였다면 if문 밖에 있는 bar는 undeclared at line ... 과 같은 에러를 발생 시켰을 것이다. ECMAScript 6에서는 block scope를 이용할 수 있다. ECMA의 관계자들은 개발자들이 var 키워드를 버리지 못할거라고 생각했다. 그래서 let이라는 키워드를 만들게 되었다. let을 통해 block scope를 이용할 수 있게 되었다. 추가적으로 var 와 다르게 let 은 hoisted 되지 않는다. 만약 let을 통해 선언하기 이전에 참조한다면

Android Studio Monitor에서 내 애플리케이션의 패키지명이 나오지 않는 경우

어느순간부터 지금 개발중인 애플리케이션의 패키지명이 Android Monitor창에서 보이지 않게 되었다. 갑자기 왜그런지 몰라서 어리둥절 하고 있다가 깨닫게 되었다. build.gradle 파일에 보면 다음과 같은 코드들이 있는것을 확인할 수 있다. [build.gradle source] 여기서 buildTypes 부분에 각 빌드타입별로 속성을 지정할 수 있는데 debuggable 속석을 false를 지정하였었다. debuggable속성이 false일 경우 디버깅이 불가능해지며 Android Studio의 Monitor에서도 확인이 불가능하다. 왜 이 속성이 부여되었는지 로그를 따라가보았는데 apk파일을 스토어에 등록하기 위해선 당연하지만 디버깅 모드를 꺼야한다. 만약 디버깅을 허용한 체로 apk파일을 생성하고 등록하면 디버깅 모드를 꺼달라는 메세지를 받을 수 있을것이다. 올바른 해결 방법은 buildTypes를 debug와 release 모드로 나누고, debug모드에선 디버깅을 허용하고, release모드엔선 디버깅을 불허하면 된다.  굉장히 간단한 해결방법임에도 그냥 쓰고있었다ㅠㅠㅠ

PlayStore에서 앱이 내려가는 경우

8시간 전에 메일이 왔는데 플레이스토어에 올려둔 앱이 삭제되었다는 내용이였다.... 갑작스럽게 받자마자 내려가있다는게 좀 말이 안되는데... 진짜 이게 맞는건지 확인해봐야겠다ㅠ 우선 이렇게 앱이 내려가는 경우에 대해서 좀 알아둘 필요가 있을것같다. 이번에 내가 내려가게 된 이유는 아이콘의 크기이다ㅠ 1. 아이콘 크기 아이콘의 크기는 최대 2048*2048 을 초과해서는 안된다. 확인결과 앱 아이콘의 크기가 2배가 넘는 아이콘을 사용하고 있었다. ``` 앱을 검토한 결과, 앱이  기기 및 네트워크 남용  정책에 위배되는 것으로 확인되어 Google Play에서 삭제되었습니다. 앱 런처 아이콘의 크기가 커서 일부 사용자 기기의 성능에 부정적인 영향을 끼칩니다. ``` 아래는 해결 방법으로 날아온 메일의 일부이다. 앱이 정책을 준수하도록 앱 아이콘을 변경합니다. 앱 런처 아이콘의 크기는 2048x2048을 초과해서는 안 됩니다. 기기 및 네트워크 남용  정책을 읽고 자세한 내용을 확인한 다음, 앱이  개발자 프로그램 정책 에 명시된 모든 정책에 부합하는지 확인합니다. Play Console에 로그인 하고 정책을 준수하는 업데이트를 제출합니다. 현재는 수정해서 다시 올린 상황이다ㅠ 앞으로 앱이 내려가는 경우에 하나하나 추가해야겠다.

[BUCKET LIST #3] 헌혈 100회 (2/100)

이미지
헌혈한지 2달이 지나서 문자가 왔다. 이렇게 친절하게 알려주니 까먹지 않고 갈 수 있어서 좋았다... 그렇게 다시 역곡 헌혈카페에 가게 되었는데 평일 오후라서 그런지 사람이 생각보다 없었다. 다행히 기다리지 않고 바로 검사받고 헌혈을 할 수 있었다.. 근데 지난달에는 이벤트를 해서 선물을 2개나 줬었는데 이번엔 1개만 주었다. 2개를 받다가 1개를 받으려니 뭔가 덜받은 느낌ㅠㅠㅠ 그래도 헌혈증은 챙겼으니 괜찮다ㅋㅋ 쨋든 이제 2% 달성했는데 언제 100%를 채울수 있을지 막막하다ㅠㅠㅠ

Android Studio - Live templates 기능 사용하기

매우 잘 정리되어있는 링크가 있어서 남겨놓음 https://m.blog.naver.com/PostView.nhn?blogId=eominsuk55&logNo=220759706276&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

IntelliJ로 Swing 개발하기 #1

이미지
# 서론 지금 Swing을 시작하려 한다면 말리고싶다... Swing은 거의 사용하지 않는 기술인것같다. 윈도우 프로그램을 만들려면 C#으로 WPF를 사용하던 하는게 훠~~~~~얼 씬 좋을거다... 지금 Swing에 대해서 쓰는 이유는 그냥 한번 해보고싶기 때문이 가장 크고 윈도우, 리눅스, 맥 등 여러 OS에서 사용해야될 응용프로그램을 개발하기 위해서 쓰는거다. (사실 이렇게 할 이유는 왠만해선 없을거다ㅠ) 자 그럼 Swing을 개발할 수 있는 환경부터 설정해보자 # 환경설정 학교다닐땐 eclipse를 가지고 Swing과 Window builder를 사용해서 개발했었지만 Android개발 이후에 eclipse를 버렸으므로 IntelliJ를 사용해서 개발환경을 설정해보도록 하자. (개인적으로 eclipse보다 intelliJ가 더 좋다고 생각한다.) 우선 IntelliJ를 설치하자. IntelliJ 설치 방법은 매우 쉬우므로 스스로....ㅎ + JDK도 설치하자 IntelliJ Download Link JDK Download Link # 프로젝트 생성 일반적인 Java 프로젝트를 만드는것과 동일하게 진행한다.  첫번째 `Create New Project`를 선택한다.  왼쪽 탭에서 Java를 선택하고 Project SDK는 설치한 JDK 버전을 선택합니다. 그리고 Next를 누릅니다. Next~ 프로젝트의 이름과 경로를 입력합니다. # Window 창 띄우기 가장 먼저 프로그래밍을 하면 배우는 Hello World를 찍어보도록 하자. 일단 어떤 코드인지는 다음에 설명하도록 하고, 일단 아래 있는 스크린샷과 동일하게 진행해보자.  우선 src폴더를 우클릭하고 New > GUI From 을 선택한다.  위와같은 창이 뜨는데 여기에 Form의 이름을 입력한다. 저는 App이라고 입력했어요. 이때 Create bound class도 선택해주세요

Kotlin 기본적인 환경설정 및 문법 링크

정말 잘 설명한 페이지가 있어서 기록하기 위해서 남겨둠... 안드로이드 공식 언어가 된 Kotlin을 알아보자 #0 안녕하세요. 코틀린 #1 안녕하세요. 코틀린 #2 안녕하세요. 코틀린 #3 예제로 배우는 아름다운 코틀린의 기능들 Kotlin과 Anko로 Android 개발하기 Kotlin과 Java 전격 비교

Android Emulator 키보드 사용 설정

이미지
가끔 기기가 없을 때 Emulator를 사용해서 개발을 하곤 한다. 그런데 문제는 키보드를 사용하지 않고 마우스로 하나하나 타이핑을 하고 있으면 화가난다...ㅠ 그래서 키보드를 사용해서 Emulator에 key를 입력하도록 설정했다. # 키보드 설정  우선 Tools > Android > AVD Manager를 선택하여 AVD 설정화면으로 이동한다. 여기서 현재 생성해둔 Emulator의 리스트를 볼 수 있는데 원하는 Emulator를 선택하고 Edit 버튼을 클릭한다. Edit 버튼은 Action에 연필모양이다. 여기서 Show Advanced Setting 을 선택하여 메뉴를 늘린 후 하단에 Enable Keyboard Input을 체크하고 Finish를 클릭하여 마친다. 이후에 Emulator를 실행하면 키보드가 잘 적용될것이다.

Kotlin Android FindViewById없이 사용하기

Kotlin Android Extentions plugin을 사용해서 어떻게 Android 의 Java 를 대체할 수 있는지 살펴보자. # 개요 Android 개발자라면 자연스럽게 findViewById()를 사용하고 있을것이다. 사실 findViewById는 잠제적으로 버그를 유발할 수 있는 메소드이다. 왜냐하면 앞에 강제 캐스팅을 하는데 타입이 맞지 않으면 null이 반환되고 이를 체크하지 않으면 에러가 발생하기 때문이다. 몇몇 Butter Knife 같은 라이브러리들이 이를 도와주고 있지만 runtime에 의존적인 라이브러리고, 각각의 View에 annotation을 붙여야한다. Kotlin Android Extentions plugin은 그런 라이브러리들과 같이 간단한 표현으로 binding할 수 있고, 추가적인 코드나 compile-time에 알 수 있다. # Kotlin Android Extentions plugin 설정 우선 build.gradle 에 다음 코드를 추가한다. ``` apply plugin: 'kotlin-android-extenstions' ``` # 코드 <activity_main.xml> <MainActivity.kr> 코드를 보면 findViewById가 없다. 그냥 바로 View의 id를 불러다 사용할 수 있다. 또한 타입도 잘 정의가 되어있다. 이러한 것들이 가능하도록 하는게 바로 `import kotlinx.android.synthetic.main.activity_main.*` 이부분인데 .xml 파일을 import하여 사용 가능하도록한다.

Java String split메소스 사용시 `.` 문자 주의

애플리케이션에서 버전을 관리를 해야하기 때문에 서버에서 최신 버전을 받아왔다. 버전정보를 요청하면 Android 애플리케이션의 최신 버전이 Semver로 오도록 하였다. ``` JSON {     android: "1.0.0" } ``` 위와같은 식으로 오게 하였는데 앱에서 이 JSON을 받아서 "1.0.0" String을 '.'으로  split하여 String Array에 각각 {"1", "0", "0"} 이 들어오도록 하였다. 그치만 왠걸... split이 되질 않는것이다. 문제를 해결하기 위해 구글링 해보니 stackoverflow에서 이런 글을 찾았다. Java string split with “.” (dot) 흠... 내용을 읽어보시면 알겠지만 . 문자는 정규표현식으로 사용될 수 있기 때문에 "." 문자로 split하는것이 아니라 정규표현식 으로 사용되어 원하지 않는 방식으로 동작한것이다. 따라서 재대로 나오게 하려면 string.split("\\.") 을 해주어야한다.

Android studio 3.0 + Kotlin 튜토리얼

이미지
Google I/O에서 이제 Android가 Java를 대신해서 Kotlin을 사용하겠다고 공식적으로 선언했다. 그래서 Kotlin을 한번 사용해보려고 한다. Android Studio 3.0 부터 지원을 하는데 아직 Preview밖에 없어서 Preview를 통해 사용해보았다. # Kotlin 플러그인 설치 Kotlin 플러그인은 Android studio 3.0 이상부터 빌드가 된다. 만약에 이전 버전을 사용하고 있으면 반드시 Kotlin 플러그인을 설치해야 된다. File -> Setting -> Plugins -> Install JetBrains plugin... 에 들어가서 Kotlin을 검색해서 설치한다. 잘 설치가 되면 다음과 같은 화면을 볼 수 있을것이다. 다음으로는 플러그인을 설정해야하는데 Configure -> Plugins -> Install JetBrains plugin... 에 들어간다. 아마 완료하면 재시작을 해야될것이다. # 프로젝트 생성 이제 프로젝트를 생성해보자. 근데 생각보다 기존거랑 다른게 없다... 먼저 ` Start a new Android Studio project `를 선택한다. 그럼 아래와 같은 창이 나온다. 애플리케이션의 이름을 입력하고, 패키지 명을 입력하고 프로젝트 저장 위치를 입력한다. 중요한건 가장 아래쪽에 체크박스인데 ` Include Kotlin support `를 선택해야한다. 그리고 이후에 진행은 기존과 동일하다. Android Studio 3.0에서는 Activity를 바로 Kotlin으로 생성할건지 안할껀지 선택이 가능하다. 만약 선택하지 않는다면 다음 방법으로 Converting할 수 있다. Android Studio 3.0에서 Java 코드를 Kotlin으로 변환하는 방법 ( 이전 버전에서는 이게 안되서 좀 불편했다고 한다...  ) 일반적으로 가장 쉽게 Kotlin을 사용하는 방법은 자동으로

Android Studio 3.0에서 Java 코드를 Kotlin으로 변환하는 방법

이미지
기본적으로 Android Studio 3.0부턴 Kotlin 설정이 되어있으나 이전 프로젝트의 경우 따로 Converting을 해야한다. 생각보다 어렵지 않으니 한번 보면 금방 따라할 수 있을것이다. # Java 코드를 Kotlin 코드로 변환 우선 Java 코드를 열고 ` Convert Java File to Kotlin File ` 을 선택한다. ` Convert Java File to Kotlin File ` 는 Find Action 이나 Code -> Convert Java File to Kotlin 메뉴를 이용하면 된다. Find Action의 단축키는 맥기준으로 Command + Shift + A 이다. 아니면 아래처럼 바로 찾아서 선택해도 된다. `Convert Java File to Kotlin File`를 선택하면 잘 코드가 바뀐걸 확인할 수 있을것이다. # Kotlin 설정 만약에 Kotlin설정이 안되어있다면 아래 스크린샷처럼 위에 노란줄이 뜰것이다. ( 여기서부턴 내가 직접 해본건 아니고 튜토리얼에 나와있는 내용입니다ㅠ ) 여기서 Configure를 선택하고 Android with gradle을 클릭하면 아래와 같이 팝업이 나올것이다. Kotlin을 적용시킬 범위와 버전을 입력하면 알아서 gradle에 설정이 될것이다. 그리고 난 뒤에 Sync Now를 클릭하면 끝! 이제 Android를 Kotlin으로 개발하면 된다.

[리뷰] 실무에서 바로 통하는 자바

이미지
한빛 미디어 메일을 수신하는데 나는 리뷰어다 7월 이벤트를 하고있어서 별생각없이 신청했다. 여러가지 책들이 있었는데 그중 가장 끌리는 `실무에서 바로 통하는 자바`를 선택했는데 당첨되서 이렇게 리뷰를 쓰고있다...ㅋ 실무에서 바로 통하는 자바 우선 읽으면서 가장 좋은 점이라고 생각되는건 Java 8 내용까지 담고있다는점이다.  지금 나온 대부분의 책들은 출판된지 좀 되서 이전 내용들이 이전것들이 많은데 나름 최신버전 내용들이 많다.  두번째 장점으로는 이미지나 굉장히 많고 설명이 그만큼 디테일하다.  간혹 처음 접하는 사람들은 어떻게 툴을 사용해야되는지 글로만 써있으면 알기 쉽지않다. 아주 간단한 기능이지만 한번도 안보고 글로만 보긴 쉽지 않으니까... 프로젝트를 만들거나, 개발환경을 설정하는곳, 코드 작성하는 부분 등에서 step by step으로 알려주니 같이 따라하는데 큰 어려움이 없었다. 그런면에서 배려가 넘처서 좋았다. 세번째로는 진짜 실무에서 많이 쓰이고 있는 내용이 많았다는것이다. 책 재목에서도 실무에서 바로 통하는 자바라고 했드시 실무에서 자주 사용되는 내용 위주로 구성되어있다. 우선 간단한 문법부터 시작해서 java 8의 람다식까지 배우고 본격적으로 자주 사용되는 부분을 배운다. 문자열 조작, 날짜 또는 시간 클래스, 집합체 등을 다룬다.  이후에 디비나 쓰레드, 테스트도 도움이 많이 되었다. 하지만 가끔 특정 상황에서만 필요한 내용이 나오긴 한다...  Apache-Commons라던가... 당연히 프로젝트에서 사용하고 있다면 도움이 많이 되겠지만 사용하고 있지 않다면 굳이 필요한 내용이 아니니까ㅠ 그리고 입출력 부분에서 굳이 csv파일까지 다룰 필요까지 있나 싶었다.  카페에서 한컷...ㅋㅋㅋ

Android ScrollView의 스크롤 이동

가끔 ScrollView에서 스크롤의 위치를 수정해야될 일이 있다. 예를들면 최상단으로 이동해야되는 경우인데, 꽤 많은경우에서 이러한 기능을 사용한다. 아래 코드는 버튼을 클릭했을 때 스크롤뷰의 최상단으로 이동하는 코드이다. 소스코드

Android Splash 화면을 구현하는 올바른 방법

이미지
시작하면서... 여기 에 있는 글을 보고 정말 좋은 방법이라고 생각해서 번역하고 살짝 수정해서 글을 썼다. 원본이 더 잘 나와있으니 영어가 자신있으신 분들은  여기 를 참고하시는게 더 좋을것같습니다ㅠ 서론 앱을 구현하다보면 자연스럽게 앱이 준비되는동안 사용자에게 보여줄 Splash화면을 추가해야겠다고 생각하게 된다. 이미 많은 앱에서 Splash 화면을 보여주고 있다. Splash 화면을 구현하는데는 여러가지 방법이 있겠으나 사실 Splash화면을 사용하는 이유부터 알고 구현을 해야한다. 그런 의미에서 아래에서 설명할 방법이 개인적으로 가장 잘 구현했다고 생각한다.... 안드로이드 앱중 종종 splash 화면이 없는 경우도 있고, 올바르지 못하게 만드는 경우가 매우 많다. 앱 개발자들이 그런 splash화면을 구현하는데 걸리는 시간은 정말 작다. Splash 가이드 가이드에 나와있는  splash화면을 읽어보면 놀랄지도 모른다. Material Design  스팩을 확인해보자. 항상 그런경우는 아니지만, 구글은 splash화면을 별로 좋아하는것같지 않다. 심지어 이걸 안티페턴이라고까지 부르기도 한다... ( 안티페턴이라고 생각하지는 않는데 뭐 그렇다고 한적이 있다고 한다... ) 아래 이유때문인데 각각 보면 뭐 이해가 안가는건 아니다. 처음부터 가입을 요구하지 마라 splash화면을 사용하지 마라 유명한 서비스와 통합하지 마라 앱의 가치를 높여라 Splash 구현된 화면 사실 구글이 저렇게 왜 말했는지 조금 모순되는 부분이 있다. (혹시라도 아직까지 splash화면이 사용자에게서 시간을 뺏는다고 생각하는 사람은 없길 바란다...ㅠ Splash화면은 분명 목적도 있고, 필요성도 명확하다.) 하지만 안드로이드 앱은 시작하는데 약간의 시간을 소요된다.   (예외적으로 바로 메인에 도달하는 경우도 종종 있긴 하지만;;) 어쨋든 피할 수 없는 딜레이가 존재한다. 이러한 시간동안 아무 것도 없는 화면에