자바(SE)
-
이번 포스트에서는 람다표현식의 짝궁인 functional package의 interface들에 대해 살펴보자. java.util.functional 일반적인 의도(함수)의 전달 java는 객체지향 언어이다. 전통적으로 객체지향 언어에서는 의도만 따로 전달할 수 있는 방법이 없었다. 의도를 전달하기 위해서는 의도가 속한 클래스를 객체화 하고 거기서 정확한 메서드의 이름과 형태(구조: 파라미터, 리턴타입)가 중요하다. 하지만 함수형 프로그래밍에서는 의도를 직접 전달 할 수 있다! 이 함수는 이름이 필요없고 내용(실행문)만 필요한데 일반적으로 함수의 형태(구조)는 고정되어있다. 표준 함수형 인터페이스 자바 진영에서는 이런 함수형 프로그래밍 기법이 탐나서 람다식을 도입했는데 매번 의도를 전달할 때마다 @Func..
[람다표현식]functional interface이번 포스트에서는 람다표현식의 짝궁인 functional package의 interface들에 대해 살펴보자. java.util.functional 일반적인 의도(함수)의 전달 java는 객체지향 언어이다. 전통적으로 객체지향 언어에서는 의도만 따로 전달할 수 있는 방법이 없었다. 의도를 전달하기 위해서는 의도가 속한 클래스를 객체화 하고 거기서 정확한 메서드의 이름과 형태(구조: 파라미터, 리턴타입)가 중요하다. 하지만 함수형 프로그래밍에서는 의도를 직접 전달 할 수 있다! 이 함수는 이름이 필요없고 내용(실행문)만 필요한데 일반적으로 함수의 형태(구조)는 고정되어있다. 표준 함수형 인터페이스 자바 진영에서는 이런 함수형 프로그래밍 기법이 탐나서 람다식을 도입했는데 매번 의도를 전달할 때마다 @Func..
2022.07.13 -
이번 포스트에서는 본격적으로 lambda 표현식을 작성해보자. lambda 표현식 lambda를 이용한 정렬 이전 포스트(https://goodteacher.tistory.com/548)에서 이야기 했듯이 lambda 표현식이란 anonymous inner class를 이용한 처리 방식을 간결하게 처리하기 위한 것이다. 이를 위해 함수형 프로그래밍의 방식을 도입해서 객체를 전달하는데 클래스의 형태가 아닌 함수 블럭의 형태로 전달한다. 예를 들어 배열을 정렬하기 위해서는 Arrays.sort 메서드에 Comparator 타입의 객체가 필요하다. public static void sort(T[] a, Comparator
[람다표현식]Lambda 표현식이번 포스트에서는 본격적으로 lambda 표현식을 작성해보자. lambda 표현식 lambda를 이용한 정렬 이전 포스트(https://goodteacher.tistory.com/548)에서 이야기 했듯이 lambda 표현식이란 anonymous inner class를 이용한 처리 방식을 간결하게 처리하기 위한 것이다. 이를 위해 함수형 프로그래밍의 방식을 도입해서 객체를 전달하는데 클래스의 형태가 아닌 함수 블럭의 형태로 전달한다. 예를 들어 배열을 정렬하기 위해서는 Arrays.sort 메서드에 Comparator 타입의 객체가 필요하다. public static void sort(T[] a, Comparator
2022.07.11 -
이번 포스트에서는 람다 표현식에 대해서 살펴보자. 람다라는 이상한 녀석을 알기 위해서는 왜 람다식이 필요한지 알아야 하는데 그 기원은 inner class에서 찾아볼 수 있다. Inner Class inner class의 필요성 만약 우리가 SmartPhone 이라는 클래스를 만든다고 생각해보자. SmartPhone은 Battery, WifiModule, GpsModule 등 다양한 클래스들을 has-a 관계로 구축되어있을 것이다. 일반적으로 파일 하나 당 하나의 Java Class를 구성하므로 아래와 같은 클래스가 구성될 것이다. public class SmartPhone1 { private Battery battery = new Battery(); private GpsModule gps = new G..
[람다표현식]inner class이번 포스트에서는 람다 표현식에 대해서 살펴보자. 람다라는 이상한 녀석을 알기 위해서는 왜 람다식이 필요한지 알아야 하는데 그 기원은 inner class에서 찾아볼 수 있다. Inner Class inner class의 필요성 만약 우리가 SmartPhone 이라는 클래스를 만든다고 생각해보자. SmartPhone은 Battery, WifiModule, GpsModule 등 다양한 클래스들을 has-a 관계로 구축되어있을 것이다. 일반적으로 파일 하나 당 하나의 Java Class를 구성하므로 아래와 같은 클래스가 구성될 것이다. public class SmartPhone1 { private Battery battery = new Battery(); private GpsModule gps = new G..
2022.07.11 -
java debugger 설정 과정에서 "Skip synthetic methods when stepping" 항목이 있는데 과연 이 synthetic method가 무엇인지 살펴보자. 이번 포스트는 Synthetic Constructs in Java | Baeldung를 참조해서 작성되었습니다. 참고로 synthetic method나 synthetic constructor는 JDK 11 부터는 없어졌다고 한다. Synthetic Constructs in Java | Baeldung synthetic ? synthetic 즉 합성이라는 말은 하기는 쉽지만 쉽게 받아들여지지는 않는 개념이다. 자바에서 합성된 요소는 컴파일 결과물 중에서 소스 코드에 대응하는 구성 요소가 없는 구성 요소 중 기본 생성자, 클래..
[java] Skip "synthetic" methods when steppingjava debugger 설정 과정에서 "Skip synthetic methods when stepping" 항목이 있는데 과연 이 synthetic method가 무엇인지 살펴보자. 이번 포스트는 Synthetic Constructs in Java | Baeldung를 참조해서 작성되었습니다. 참고로 synthetic method나 synthetic constructor는 JDK 11 부터는 없어졌다고 한다. Synthetic Constructs in Java | Baeldung synthetic ? synthetic 즉 합성이라는 말은 하기는 쉽지만 쉽게 받아들여지지는 않는 개념이다. 자바에서 합성된 요소는 컴파일 결과물 중에서 소스 코드에 대응하는 구성 요소가 없는 구성 요소 중 기본 생성자, 클래..
2022.04.03 -
이번 글에서는 List가 제공하는 subList라는 메서드에 대해서 살펴보자. List subList(int fromIndex, int toIndex); 무엇에 쓰는 물건인고? 이름 그대로 어떤 리스트의 구성 요소 중 fromIndex에서 toIndex까지의 요소를 반환해준다. 예를 들어 List nums = new ArrayList(); for(int i=0; i
[Java]List의 subList 살펴보기!이번 글에서는 List가 제공하는 subList라는 메서드에 대해서 살펴보자. List subList(int fromIndex, int toIndex); 무엇에 쓰는 물건인고? 이름 그대로 어떤 리스트의 구성 요소 중 fromIndex에서 toIndex까지의 요소를 반환해준다. 예를 들어 List nums = new ArrayList(); for(int i=0; i
2022.02.10 -
Thread의 선후 작업과 CountDownLatch 일련의 작업을 Thread로 구성했을 때 선/후 관계가 있는 경우가 왕왕 있다. 이때 하위 Thread의 작업이 완료될 때까지 main Thread가 기다려야 하는데 이때 join()이 사용된다. 아래의 경우를 살펴보자. void useJoin() throws InterruptedException { List threads = new ArrayList(); for (int i = 0; i < 5; i++) { Thread t = new SubThread(); threads.add(t); t.start(); } // t가 끝날 때까지 대기할 것!! for(Thread t: threads) { t.join(); } System.out.println("완전..
[Java]Thread의 선/후 작업과 CountDownLatchThread의 선후 작업과 CountDownLatch 일련의 작업을 Thread로 구성했을 때 선/후 관계가 있는 경우가 왕왕 있다. 이때 하위 Thread의 작업이 완료될 때까지 main Thread가 기다려야 하는데 이때 join()이 사용된다. 아래의 경우를 살펴보자. void useJoin() throws InterruptedException { List threads = new ArrayList(); for (int i = 0; i < 5; i++) { Thread t = new SubThread(); threads.add(t); t.start(); } // t가 끝날 때까지 대기할 것!! for(Thread t: threads) { t.join(); } System.out.println("완전..
2021.02.16 -
Comparing identical expressions Comparing identical expression은 다음과 같은 문장을 작성할 때 이클립스에서 표시되는 warning 메시지이다. 어차피 완벽하게 동일한 결과인데 왜 확인하려는건지 모르겠다는 정도로 해석해볼 수 있다. 그런데 위 메시지를 쫒다가 stackoverflow.com에서 재밋는걸 발견하고 포스팅 해본다. 재밋는거 하나 추가요.. int a = 1; int b = 3; System.out.println((a == (a = b)) +" : "+a+" : "+b); // false : 3 : 3 a = 1; System.out.println(((a = b) == a)+" : "+a+" : "+b); // true : 3 : 3 당연히 최강..
Comparing identical expressionsComparing identical expressions Comparing identical expression은 다음과 같은 문장을 작성할 때 이클립스에서 표시되는 warning 메시지이다. 어차피 완벽하게 동일한 결과인데 왜 확인하려는건지 모르겠다는 정도로 해석해볼 수 있다. 그런데 위 메시지를 쫒다가 stackoverflow.com에서 재밋는걸 발견하고 포스팅 해본다. 재밋는거 하나 추가요.. int a = 1; int b = 3; System.out.println((a == (a = b)) +" : "+a+" : "+b); // false : 3 : 3 a = 1; System.out.println(((a = b) == a)+" : "+a+" : "+b); // true : 3 : 3 당연히 최강..
2021.01.16 -
Annotation Annotation은 Java 1.5에 추가된 녀석으로 지금은 새로울게 없지만 당시만해도 이거뭐하는거야 했던 녀석이다. Annotation이란? Annotation의 사전적 의미는 주석이라는 뜻인데 다만 우리를 위한 주석은 아니고 컴파일러나 JVM, 프레임워크 등이 보는 주석이다. 즉 코드상에 annotation을 달아놓으면 상황에 따라 컴퍼일러가 읽어서 무슨 처리를 하고 프레임워크가 읽어서 무슨 처리를 하는 형태이다. 흔히 이제까지 봐왔던 annotation으로는 @Override나 @Deprecated등이 있다. @Override라고 쓰고 override 문법을 지키지 않으면 컴파일 시 오류가 발생하고 이클립스에서도 오류가 표시되는 것을 경험한 적이 있을 것이다. @Deprecat..
Annotation(에너테이션) 사용법Annotation Annotation은 Java 1.5에 추가된 녀석으로 지금은 새로울게 없지만 당시만해도 이거뭐하는거야 했던 녀석이다. Annotation이란? Annotation의 사전적 의미는 주석이라는 뜻인데 다만 우리를 위한 주석은 아니고 컴파일러나 JVM, 프레임워크 등이 보는 주석이다. 즉 코드상에 annotation을 달아놓으면 상황에 따라 컴퍼일러가 읽어서 무슨 처리를 하고 프레임워크가 읽어서 무슨 처리를 하는 형태이다. 흔히 이제까지 봐왔던 annotation으로는 @Override나 @Deprecated등이 있다. @Override라고 쓰고 override 문법을 지키지 않으면 컴파일 시 오류가 발생하고 이클립스에서도 오류가 표시되는 것을 경험한 적이 있을 것이다. @Deprecat..
2020.10.20