반응형

java

    규칙 61 - 추상화 수준에 맞는 예외를 던져라

    메서드가 하는 일과 관련성이 없는 예외가 메서드에서 발생하면 디버깅하기 어렵거나 관리하기 어려울 수 있다. 이는 추상화 수준이 낮은 곳에서 발생한 예외를 그대로 밖으로 전달하면 이런일이 발생한다. 이런 문제를 해결하기 위해서 상위계층에서는 하위계층에서 발생하는 예외를 반드시 받아서 상위 계층 추상화 수준에 맞는 예외로 바꿔서 던져야한다. 이를 예외 변환(exception translation)이라고 한다. 예를 들어 몇가지 사례를 살펴보자. 우선 AbstractSequentialList 클래스를 살펴보자. 이 클래스의 get 메서드의 명세를 보면 예외가 발생되었을 때 예외 변환을 해서 보내달라는 것을 확인할 수 있다. 12345678910111213141516 /** * Returns the elemen..

    Maven 다운로드 및 환경변수(Path) 등록방법

    Spring boot cli에서 maven관련 명령어를 사용을 위해서는 Maven이 환경변수 되어있어야 한다. Maven을 윈도우에서 환경변수로 설정하는 방법을 알아보자. 1. 다운로드 경로 : https://www.apache.org/dyn/closer.cgi 아파치 메이븐의 다운로드 페이지가 변경되어서 조금 헷갈린다. 잘모르겠으면 여기서 받으면 된다. http://mirror.navercorp.com/apache/maven/maven-3/3.5.3/ 2. 환경변수 등록 1) 먼저 시스템 변수에서 MAVEN_HOME을 설정해준다. (이미지 참고) 2) Path에서 편집을 눌러 다음과 같이 설정한다. %MAVEN_HOME%\bin 만약 이렇게 설정하여도 정상동작 하지 않으면 다음과정을 확인한다. 1) S..

    기타 자바8에 추가된 편리기능

    String.joiner 구분자를 이용해서 입력된 데이터를 구분해서 String으로 반환 123456789101112131415161718192021public class Java8Test { public static void main(String args[]) { StringJoiner sj = new StringJoiner(","); sj.add("babo"); sj.add("wedul"); sj.add("pnp"); System.out.println(sj.toString()); // 2, 3번재 매개변수를 이용하여 prifix, suffix를 붙힐 수 있다. sj = new StringJoiner(",", "자기소개 -- ", " -- 끝"); sj.add("babo"); sj.add("wedul"..

    Java8 람다식의 지연실행 (Lazy Programming)

    지연실행 -> 람다를 이용하면 필요할때만 호출해서 사용할 수 있는 Lazy Programming을 구현 할 수 있다. 기존에 다음과 같이 사용하면 당장 사용하지 않아도 실행이 되는 문제가 있었다. 1234567891011121314151617181920212223public class Heavy { Heavy() { System.out.println("Heavy created"); } } Hodler 클래스 Holder 클래스는 heavy 클래스를 포함하고 있다. public class Holder { public Holder() { System.out.println("Holder created"); } Heavy heavy = new Heavy(); public Heavy getHeavy() { ret..

    Java8 함수형 인터페이스 만들어서 사용하기

    Java8 함수형 인터페이스 만들어서 사용하기 함수형 인터페이스 사용 -> 정의한 함수형 인터페이스를 람다식을 이용하여 사용할 수 있다. 12345678910111213141516171819// 함수형 인터페이스 선언 // 함수형 인터페이스를 만들고자 할 경우에는 @FunctionalInterface 애노테이션을 붙혀야 한다. @FunctionalInterfacepublic interface WedulInterface { public void print(int x);} public static void main(String args[]) { WedulInterface wedul = new WedulInterface() { @Override public void print(int x) { System.ou..

    자바 8에서 java.util.function 패키지에 추가된 기본 함수형 인터페이스 정리

    자바 8에서 java.util.function 패키지에 추가된 기본 함수형 인터페이스 정리 Function => T를 입력으로 R을 출력하여 반환 1234567891011121314151617public class Java8Test { public static void main(String args[]) { Function mapStrToInt = new Function() { public Integer apply(String str) { if (str == "wedul") { return 1; } return 2; } }; List testData = Arrays.asList("wedul","dd","babo"); testData.stream().map(mapStrToInt).forEach(System..

    Java8 스트림을 이용한 데이터 추출

    스트림에 있는 데이터를 List, String, Set등 다양한 형태로 변경하여 추출 할 수 있다. toArray Stream.toArray는 Object[]를 리턴한다. 올바른 타입의 배열을 원하는 경우 다음과 같이 배열 생성자를 전달한다. String[] result = words.toArray(String[]::new); Collect 메소드 - Collect : 종료 작업으로 인자로 받은 형태의 데이터 타입으로 결과물을 생성한다. - Collect는 병렬화를 지원한다. 또한 공급자, 누산자, 결합자를 기본적인 파라미터로 받으며 이는 Collectors라는 클래스를 통해 간편하게 정의하여 사용할 수 있다. 1) List, set, String 1234567Stream data = Stream.of(..

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

반응형