인터페이스 17

클린코드 7장(경계), 8장 (단위 테스트)

경계 Map과 같은 공개된 인터페이스를 사용할 때 2가지 문제가 있다 1. 전달되는 map에 clear와 같은 삭제 명령어가 있어서 전달해주는 쪽에서 알지 못하고 지워지는 이슈가 있을 수 있다. 2. 전달된 Map 형태가 generic 하게 전해 졌어도 받는 쪽에서 Map map 등으로 받아 버린다면 캐스팅을 해서 사용하는 등의 문제나 변경의 소지가 크다. 또한 Map의 사용 방식이 변경된다면 이를 해결하기 위해 모든 부분에서 수정되어야 하는 문제가 있다. 그래서 이를 해결하기 위해서 Map에 사용 되는 Value 값의 객체에서 Map을 품어서 쓰는 방식으로 캡슐화하여 사용하기도 한다. public classs Sensors { private Map = new HashMap(); public Sensor..

JAVA/클린코드 2020.07.01

규칙 62 - 메서드에서 던져지는 모든 예외에 대해 문서를 남겨라.

메서드를 올바르게 사용하려면 메서드에서 던져지는 예외에 대한 설명이 문서에 있어야 한다. 그리고 메서드가 던질수있는 모든 무점검 예외까지 선언할 필요는 없지만 점검지점 예외들과 마찬가지로주의해서 문서로 남겨놓으면 좋다. 특히 Javadoc @throws 태그를 사용해서 메서드에서 발생 가능한 모든 무점검 예외에 대한 문서를 남겨야 한다. 하지만 메서드 선언부의 throws 뒤에 무점검 예외를 나열하지는 말아야 한다. 요약하자면 메서드가 던질 가능성이 있는 모든 예외를 문서로 남겨라. 점검지점 예외, 무점검 예외도 남겨라. 이를 지키지 않으면 해당 API를 사용하는 다른사람들이 효과적으로 사용하는게 어려워진다. 출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(201..

JAVA/Effective Java 2018.06.01

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..

JAVA/Java 8 2018.05.31

자바 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..

JAVA/Java 8 2018.05.31

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

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

JAVA/Java 8 2018.05.30

Java8 기초 설명

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

JAVA/Java 8 2018.05.30

클래스와 인터페이스 - 규칙22 멤버 클래스는 가능하면 static으로 선언하라.

중첩 클래스 (nested class)는 다른 클래스안에 선언된 클래스이다. 이런 중첩 클래스는 4가지 종류로 구성되어있다. 1. static member class 2. non-static member class 3. anonymous class 4. local class. 2 ~ 4번 클래스는 내부 클래스(inner class)이다. 상황별 중첩 클래스 사용 그럼 위에 출력한 4가지의 중첩 클래스의 적절한 사용 시기를 알아보자. 1. 정적 멤버 클래스 (static member class) - 정적 멤버 클래스는 바깥 클래스의 모든 멤버에 접근할 수 있다. (private 멤버 변수도 접근 가능) - 다른 정적 멤버와 동일하게 접근 권한 규칙을 따른다. - private static member cl..

JAVA/Effective Java 2018.05.29

클래스와 인터페이스 - 규칙 21 전략을 표현하고 싶을 때는 함수 객체를 사용하라.

호출 대상에 대해 어떠한 작업을 수행하는 것을 전략 패턴이라고 한다. 12345class StringCompare { public int compare (String s1, String s2) { return s1.length() - s2.length(); }}Colored by Color Scriptercs 두 개의 문자열을 받아서 비교하는 클래스를 사용할 수 있는 전략 패턴이다. 비교가 필요할 경우 매번 StringCompare 클래스를 생성하지 말고, 싱글톤 패턴을 정의하여 가져다가 사용하면 더욱 편리하다. 하지만 이 StringCompare 클래스의 경우 객체를 메서드에 전달하기 위해서는 인자의 자료형이 String이어야 한다. 따라서 Compareator 인터페이스를 정의 하여 이를 String..

JAVA/Effective Java 2018.05.29

클래스와 인터페이스 - 규칙 20 태그 달린 클래스 대신 클래스 계층을 사용하라.

클래스에 상황에 따라서 역할을 변경하는 태그 달린 클래스를 볼 수 있다. 예를 들어, 아래 유형과 같이 탈것을 나타내는 클래스는 어떤 형태로 사용하느냐에 따라서 자동차가 될수도, 자전거가 될 수도 있다. 12345678910111213141516171819202122232425class Vehicle { enum Type { CAR, BICYCLE }; final Type type; public Vehicle (double pedalCount) { this.type = Type.BICYCLE; } public Vehicle (double license, int sheetCount) { this.type = Type.CAR; } // 바퀴수를 반환하는 메서드 public int getWheelCount()..

JAVA/Effective Java 2018.05.29