반응형

JAVA

    Java8 스트림(stream) 연산

    리덕션 연산 Stream의 reduce 메소드는 2개의 인자를 받아 인자와 같은 값을 리턴하는 (T,T) -> T 메소드이다. 첫 번째 인자는 누적되는 값이 되고, str2는 foreach처럼 순서대로 요소가 들어오는 방식이다. public static void main(String args[]) { List list = Arrays.asList(new String[] {"a", "b", "c"}); Stream stream = list.stream(); Optional opt = stream.reduce((str1, str2) -> str1 + str2); opt.ifPresent(System.out::println); } =>> 리턴 값 "abc" 또 다른 형태의 reduce 메소드 위에서 소개한 r..

    Java8 스트림(Stream) API

    Java8의 람다식, 인터페이스의 변화에 이어서 더 좋은 기능이 바로 스트림이다. 스트림(Stream) 정의 - 스트림이란 리눅스에서 사용되는 파이프 라인 처럼 한번에 한 개 씩 만들어지는 연속적인 데이터 항목들의 모임이다. Ex) ps -ef | grep pnp | grep -v drop 조금 더 자세히 설명하면, 집계 연산을 지원하는 요소의 순서(a sequence of elements from a source that supports aggregate operations) 라고 소개 되어 있다. - Stream은 정의된 엘리먼트의 속성에 따라서 처리할 수 있는 인터페이스를 제공하지만 실제 엘리먼트들을 저장하지 않고 계산하는 데만 쓰인다. - 스트림은 컬렉션, 배열, I/O 리소스 등에서 제공받은 데..

    Java8 인터페이스의 정적 메소드

    인터페이스의 정적 메소드 Java 8 부터는 인터페이스에 정적 메소드를 추가할 수 있다. 원래부터 인터페이스에 정적 메소드를 추가하면 안되는 이유는 없었으나, 단지 추상 명세로서 변하면 안된다는 인터페이스의 정신에 어긋 나는 것으로 여겨져 금지되어 왔다. 지금 까지는 일반적으로 인터페이스와 동반하는 클래스들에 정적 메소드를 두었다. 하지만 이제는 사용이 가능하다.

    Java8 인터페이스 default Method (디폴트 메소드)

    인터페이스의 디폴트 메서드 Java8에서 추가된 람다식을 제외하고도 편리한 기능이 추가되었다. 그 중 하나가 인터페이스의 default 메소드이다. Java8에서는 interface에 default 키워드를 통해 메서드를 구현할 수 있다. 또, 이를 구현하는 클래스는interface의 메서드를 @Override 할 수 있다. Default 매서드 구현 방법은 다음과 같다. 123456789101112131415161718192021222324252627282930// getName이라는 default 메소드 선언public interface WedulInterface { default String getName() { return "wedul"; }} // getName이 없는 DTO 클래스 생성publ..

    Java8 변수 유효 범위

    변수 유효 범위 종종 람다 표현식에서 해당 표현식을 감싸고 있는 메서드나 클래스에 있는 변수에 접근하고 싶은 경우가 있다. 예를 들어 repeatMessage(String text, int count) 같은 메소드가 있고 repeatMessage("Hello", 1000);를 통해 호출하였다고 가정하여 보자. 1234567891011121314public static void repeatMessage(String text, int count) { Runnable r = () -> { for (int i = 0; i { While( count > 0 ) { count--; // 캡쳐 변수는 변경되는 값을 포함할 수 없다. System.out.println(text); Thread.yield(); } }; ..

    Java8 생성자 레퍼런스

    생성자 레퍼런스 생성자 레퍼런스는 메서드의 이름이 new라는 점을 제외하면 메서드 레퍼런스(Class::Method)와 유사하다. 12345678910111213141516171819202122232425262728// 생성자 레퍼런스에서 사용될 클래스 WedulObjectpublic class WedulObject { private String name; private WedulObject(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } // 생성자 레퍼런스public static void main(String ar..

    Java8 메서드 레퍼런스

    메서드 레퍼런스 - 메서드 레퍼런스는 이름과 동일하게 메서드를 대상으로 한 람다식의 간략형이며, 메서드 참조를 나타내는 예약어로서 (::)를 사용한다. 다시 말해서 메서드 레퍼런스는 말 그대로 메소드를 참조해서 매개 변수의 정보 및 리턴 타입을 알아내어, 람다식에서 불 필요한 매개 변수를 제거하는 것이 목적이다. - 메소드 참조의 예와 그에 대한 람다식은 다음과 같다. 기본 구조 String::valueOf x -> String.valueOf(x) Object::toString x -> x.toString() x::toString () -> x.toString() 왼쪽은 메서드 레퍼런스이고 오른쪽은 람다식이다. 메서드 레퍼런스의 3가지 형태 :: 연산자는 객체 또는 클래스와 메서드 이름을 구분하며, 세 ..

    Java8 기초 설명

    Java8과 Java7은 많은 부분이 바뀌어서 이제 Java8을 모르는 사람은 다른사람들과 협업하기 어려워 질 수도 있다. 작년에 공부하였던 부분을 다시 복습 할겸 포스팅을 진행한다. Java8이 도입되면서 많이 변경된 부분이 함수형 프로그램이 가능하도록 되었다는 것이다. 그것의 중심에는 람다식 표현식이 있다. 람다 표현식(lambda expression) - 람다식 이란? 단순히 정의하면, 프로그래밍에서 식별값 없이 실행 할 수 있는 함수 표현 방법, 함수를 변수에 할당, 파라미터로 전달하는게 가능 이미 많은 언어에서 지원하고 있다. Ruby, C#, Python,,,,, 그러나 자바는 함수형 프로그램 언어가 아니 여서 기존에 사용할 수 없었다. - 함수형 인터페이스(functional interfac..

    규칙 60 - 표준 예외를 사용해라

    예외를 사용할 때 기존에 정의되어있는 표준예외를 사용하는 것이 좋다. 그 이유는 다음과 같다. - 배우기 쉽고 사용하기 편리한 API를 만들수 있으며 다른 프로그래머들도 친숙한 널리 퍼진 관습을 따르기 때문이다. - 잘모르는 예외가 없어 API 가독성을 높일수있다. - 예외클래스를 별도로 만들어서 클래스를 늘리지 않으면 프로그램의 메모리 요구량이 줄어들고 클래스를 로딩하는 시간도 줄어든다. 대표적인 표준 예외 예외용례lllegalArgumentExceptionnull이 아닌 인자값이 잘못되었을때llegalStateException객체 상태가 메서드 호출을 처리하기에 적절치 않을때NullPointerExceptionnull 값을 받으면 안 되는 인자에 null이 전달되었을 때IndexOutOfBoundsE..

    규칙 59 불필요한 점검지정 예외 사항은 피하라.

    점검지점 예외 (checked error) 은 프로그래머에게 예외상황을 처리하도록 강제함으로써 안전성을 키울수있다. 하지만 모든것이 넘치면 부족하니 못한것처럼 점점지점 예외도 너무 남발하면 사용하기 불편한 API가 될수있다. 다음과 같은 경우를 예를 들어보자 12345try { obj.action(args);catch (Exception e) { ....}cs 만약 위에 코드에서 예외가 발생되지 않도록 미리 체크하는 부분이 있으면 굳이 점검지점예외를 사용하지 않아도된다. 12345if (obj.check(args)) { obj.action(args);} else { ...}cs 이렇게 리팩터링을 사용하면 좀더 유연하게 사용가능한 API가 될 것이다. 하지만 이런경우처럼 리팩터링을 진행할 수 없는 경우가 ..

반응형