분류 전체보기 102

롬복(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의 Builder Pattern과 Scala의 Default Parameter

1. Java에서의 Builder Pattern자바에서 빌더 패턴(Builder Pattern)은 두 가지 경우에 주로 사용된다. 1) 생성자 파라미터가 많거나 선택적인 생성자 파라미터가 필요할 때생성자 파라미터가 많은 경우 빌더 패턴을 적용하면 훨씬 사용하기 편해진다. 특히 생성자에서 선택적으로 사용되는 파라미터가 필요한 경우에는 선언해야 하는 생성자의 수가 많아지게 되는데, 최악의 경우 파라미터 조합의 수만큼 생성자가 필요해진다. 이런 상황에 빌더 패턴을 이용하면 선언이 필요한 생성자의 수를 크게 줄일 수 있다. 2) 파라미터에 기본 값이 필요할 때위 경우와 개념적으로는 같다. 자바는 파라미터의 기본 값이 지원되지 않기 때문에 기본 값을 사용한다고 가정하면 오버로드된 메소드들(혹은 생성자)이 필요해진..

Scala 2017.05.28

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

Scala와 Java의 String interpolation(문자열 덧붙이기)

String Interpolation은 자주 쓰이고 유용한 구문이다. 대부분의 뷰 템플릿 엔진에서는 지원하고 있고, 당연하게 쓰이고 있다. 간단하게 설명하자면 문자열을 출력하거나 선언할 때 중간중간 다른 변수를 끼워넣는 구문이다. 간단하게 예를 들자면 JSP에서 123456 cs 으로 쓰는 바로 그 기능이다. 1. 스칼라에서의 String interpolationval str1 = "Hello" val str2 = "World" val int1 = 100 val string = s"$str1 $str2 - $int1" println(string) // Hello World - 100 // 값으로 선언해 사용할 수 있다. println(s"${str1} World!") // Hello World! // {..

Scala 2017.05.27

Java의 Enum과 Scala의 Enum

Enumeration, 줄여서 enum이라고 부르는 열거 자료형은 자바나 스칼라 모두에서 아주 유용하게 쓰인다. Effective Java에 따르면 enum은 JVM에서 지원하는 싱글톤으로써 syncronized된 'getInstance' 메소드들을 선언할 필요 없이 아주 간편하게 만들 수 있고(메소드나 필드에서는 syncronized 키워드가 필요할 수 있다), 프로그램 전역에서 호출이 가능한 장점이 있다. 1. 자바에서의 enum자바의 enum은 열거 자료형으로써의 역할을 충실하게 수행해준다. public enum Fruits { Apple, Banana } public static void main(String[] args) { // 기본적인 호출 Fruits fruits = Fruits.Apple..

Scala 2017.05.16

Scala의 Symbol(심볼)

스칼라에는 심볼 혹은 심볼 리터럴이라고 불리는 특이한 객체가 있다. 심볼은 String과 다르게 단 하나의 객체만을 가진다는 특징이 있다. JVM에서 String은 값은 같지만 '다른' 객체가 생길 수 있다. 옛날 코드, 특히 URL을 인코딩하는 예제에 많이 보이는 이상한 경우다.val str1 = new String("String") val str2 = new String("String") println(str1 eq str2) // false // 스칼라에서 eq는 자바의 ==와 같다. // 반대로, 스칼라에서 ==는 자바의 .equals() 메소드와 같다. new String()을 이용하지 않고 "..." 구문으로 문자열을 만들거나 intern() 메소드를 이용하면 다른 결과가 나타난다. 두 가지 ..

Scala 2017.05.15

Scala와 Java에서 일반적인 파일 입출력

자바는 1.7부터 Paths와 Files 클래스를 이용해 이전보다 훨씬 간편하게 파일 입출력이 가능해졌다. 1. Path 객체// 상대주소나 절대주소를 이용한 Path Path path = Paths.get("/resources/test.txt"); // URI를 이용한 Path ClassLoader classLoader = FileInputOutputJava.class.getClassLoader(); URL url = classLoader.getResource("test.txt"); Path resourcePath = Paths.get(url.toURI()); // throw URISyntacExceptionPaths.get() 메소드를 이용해 직접 파일의 위치를 입력하거나 URI 객체를 이용해 파일을..

Scala 2017.05.11

Scala 부분 함수(PartialFunction)의 runWith, andThen

두 메소드는 모두 부분 함수(PartialFunction) 트레잇에 구현된 함수들이다. 따라서 PartialFunction 트레잇을 구현한 함수에서 사용할 수 있다. 심지어 위 메소드들이 반환하는 값이 부분 함수라는 점을 이용해 메소드 체이닝도 가능하다. 1. runWith 메소드runWith는 함수의 apply를 수행하고 얻은 값을 Action 함수에 전달하는 새로운 함수를 만드는 메소드다. 만들어진 함수가 반환하는 값은 파라미터로 입력받은 값이 apply 함수를 호출할 수 있는지 여부에 해당하는 Boolean 값이다. Scala의 Collection들은 PartialFunction Trait을 구현하고 있기 때문에 Collection에서도 사용이 가능하다. Map의 apply 함수는 Key를 입력받아..

Scala 2017.05.10