Java | Android 8

롬복(Lombok)의 어노테이션들 - (SneakyThrows, Synchronized, Log)

11. @SneakyThrows논란의 여지가 있는 어노테이션이라고 소개되고 있다. 메소드 선언부에 사용되는 throws 키워드 대신 사용하는 어노테이션으로 예외 클래스를 파라미터로 입력받는다.public static String utf8ToString(byte[] bytes) throws UnsupportedEncodingException{ return new String(bytes, "UTF-8"); } @SneakyThrows(UnsupportedEncodingException.class) public static String utf8ToStringWithLombok(byte[] bytes) { return new String(bytes, "UTF-8"); }val bytes = "Hello!".ge..

Java | Android 2017.05.31

롬복(Lombok)의 어노테이션들 - (EqaulsAndHashCode, XArgsConstructor, Data, Value, Builder)

6. @EqualsAndHashCodeequals(Object) 메소드와 hashCode() 메소드를 오버라이드한다. @ToString 어노테이션과 마찬가지로 exclude 파라미터로 필드를 제외하거나 callSuper 파라미터로 부모 객체를 생략하거나 포함할 수 있다. 또, 필드에 객체 직렬화(Serializable)에서 제외할때 사용하는 transient 키워드를 사용하면 exclude 파라미터로 입력한 것과 같이 두 메소드에서 제외된다.@EqualsAndHashCode(exclude = "value") private static class LombokClass1 { private String name = "lombok"; @Setter private int value; } @EqualsAndHash..

Java | Android 2017.05.31

롬복(Lombok)의 어노테이션들 - (val/var, NonNull, Cleanup, ToString)

개인적으로 현 시점 자바 프로그래밍에서 롬복(Lombok)은 빼놓을 수 없는 라이브러리라고 생각한다. 많은 사람들이 JAVA를 싫어하는 이유인 보일러 플레이트 코드(Boilerplate code : 반복적으로 사용되는 코드) 대부분을 어노테이션 추가만으로 깔끔하게 해결해주기 때문이다. 그만큼 롬복은 자주 사용하고 있지만 생각보다 모르고 있던 어노테이션도 많고, 새로운 어노테이션도 생겼기에 정리하고자 한다. 롬복은 프로젝트 폴더에 lombok.config 파일을 만들어 세부적인 설정을 적용할 수 있다. 기본적으로 disable로 설정되어있는 어노테이션은 flagUsage를 ALLOW로 설정해야 사용이 가능해진다.lombok.---.flagUsage = ALLOW---는 어노테이션명 1. val정말 굉장한 ..

Java | Android 2017.05.30

Java HTML parser, Jsoup로 원하는 값 얻어내기 - Ajax

1. Chrome 개발자도구 Network 탭 크롬에서 F12키나 Ctrl+Shift+I 혹은 메뉴의 '도구 더 보기'에서 열 수 있는 개발자도구는 아주 강력하다. HTML dom 탐색은 물론 javascript나 css 소스를 탐색하고 수정할 수 있을뿐 아니라 수정해 곧바로 적용해 볼 수 있다. 이번 포스트에서 주로 사용하는 Network탭에서는 실시간으로 Request / Response 정보를 확인 수 있다. 각 요청이 시작되기 전/후를 스크린샷으로 남기는 기능과 원하는 요청만 표시하는 필터같은 유용한 기능도 있다. 다양한 기능을 한번씩 사용해 보면 많은 도움이 된다. 2. Jsoup로 네이버 검색어 자동완성 목록 얻어오기 네이버 검색창에 단어를 입력했을 때 나오는 검색어 자동완성 목록을 Jsoup..

Java | Android 2017.05.27

Android 버전에 따라 실행되는 코드

안드로이드 어플리케이션의 하위 호환성을 위해 버전에 따라 기능을 제한할 필요가 있다. 그러기 위해서는 몇 가지 설정이 필요하다. 1. Build.gradle먼저 어플리케이션의 타겟 Sdk 버전과 지원가능한 최소 Sdk버전을 정해야 한다. 여기서 최소 Sdk 버전(minSdkVersion)에 따라 앱을 설치할 수 있는 최소 버전의 안드로이드가 정해지고 타겟 Sdk 버전(targetSdkVersion)에 따라 빌드할 때 앱에서 상위 버전 코드를 아예 제외할지 여부가 결정된다.minSdkVersion 18 targetSdkVersion 22 이렇게 설정하면 젤리빈MR2(Sdk 18)부터 설치가 가능하고 롤리팝(Sdk 22) 이후 버전에서 지원되는 기능은 모두 제외된 앱이 만들어진다. 2. 버전에 따른 실행 분..

Java | Android 2017.05.09

Java HTML parser, Jsoup로 원하는 값 얻어내기 - 로그인

이 포스트에서는 로그인이 필요한 사이트와 Request Header를 검사하는 사이트를 파싱하는 과정을 적어둔다. 0. 웹 사이트 로그인 먼저 웹 사이트에 로그인에 대해 다시 생각해 볼 필요가 있다. 최근 웹 사이트에서 사용되는 로그인 방법은 크게 두 가지로 볼 수 있다. 첫 번째는 세션을 이용한 방법이고, 두 번째는 Restful API에 주로 사용되는 토큰 인증이다. 발급 받은 토큰을 이용하는 방법은 이전 포스트에서 원하는 값을 Jsoup의 Document를 파싱해 얻어낸 것처럼 간단하게 얻어낼 수 있다. 물론 토큰이 HTML요소가 아니라 Script 요소로 있는 경우도 많지만 정규식이나 replace, split 같은 메소드를 이용하면 별 어려움이 없다. 다시 첫 번째, 세션 로그인으로 돌아가면 세..

Java | Android 2017.05.08

Java HTML parser, Jsoup로 원하는 값 얻어내기 - 기본

Jsoup는 아주 강력하고 재미있는 라이브러리다. 단순한 HTML 문서 파싱을 넘어 웹 사이트에 대한 Request, Response를 모두 처리할 수 있다. 덕분에 일부 특별한 경우(플래시, 애플릿, ActiveX같은 비표준이나 WebSocket)가 아니라면 브라우저로 사이트를 이용하는 상황을 그대로 재현해낼 수 있다. 다시 말해, 대부분의 사이트의 원하는 정보만 뽑아내는 '뷰어'를 만들 수 있다는 것이다. 몇 가지 간단한 예제를 통해 사이트에서 원하는 정보만 뽑아내는 과정을 적어보려 한다. 0. Gradle 디펜전시 추가compile group: 'org.jsoup', name: 'jsoup', version: '1.10.2'Maven Repository를 통해 간단하게 디펜전시를 추가 할 수 있다...

Java | Android 2017.05.04

Android Activity 스와이프해서 닫기(SwipeBackLayout)

최근 출시되는 대부분의 앱은 스와이프해서 액티비티를 닫는 기능을 지원한다. 사용자 측면에서 생각해도 엄지손가락에 힘주고 닫기버튼을 찾아 누르는 것보다 화면을 스와이프하는게 당연히 더 편하다. 아무튼, 액티비티를 스와이프해서 닫는 가장 기본적인 방법은 Layout에 onTouchEvent를 구현하는 방법이다. new View.OnTouchListener(){ private float x; @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN : x = motionEvent.getX(); break; case MotionEv..

Java | Android 2017.05.04