자바 46

Optional

Optional 만드는 법 • of – Null이 아닌 오브젝트를 이용해 Optional을 만들 때 • empty – 빈 Optional을 만들 때 • ofNullable – Null인지 아닌지 알지 못하는 오브젝트로 Optional을 만들 때 private static final Optional EMPTY = new Optional(null); public static Optional of(T value) { return new Optional(Objects.requireNonNull(value)); } public static Optional empty() { Optional t = (Optional) EMPTY; return t; } public static Optional ofNullable(T ..

stream 함수

filter 함수 : 만족하는 데이터만 걸러내는데 사용 map 함수 : 데이터를 변형하는데 사용 sorted 함수 : 데이터가 순서대로 정렬된 stream을 리턴 distinct 함수 : 중복되는 데이터가 제거된 stream을 리턴 flatMap 함수 : Map + Flatten ( Stream 을 Stream으로 반환) filter 함수 : 만족하는 데이터만 걸러내는데 사용 • Predicate에 true를 반환하는 데이터만 존재하는 stream을 리턴 Stream filter(Predicate

클린코드 8장 - 경계

외부 코드 사용하기 외부 코드(다른 팀의 컴포넌트 또는 오픈소스)는 기능성과 유연성을 제공하기 위해 필요이상의 기능을 제공할 수가 있다. 아래와 같이 Sensor를 담는 Map(외부 인터페이스)을 사용하면, get할때마다 캐스팅을 해야 한다. Map sensors = new HashMap(); ... Sensor s = (Sensor)sensors.get(sensorId); 아래와 같이 Generics를 사용하면 조금 나아지지만, Map인터페이스가 변하면 소스를 다 수정해야 한다. Map sensors = new HashMap(); ... Sensor s = sensors.get(sensorId); 아래와 같이 Map을 Sensors 안으로 숨기면, Map이 변해도 나머지 프로그램에 영향을 미치지 않는다..

클린코드 7장 - 오류처리

오류 코드보다 예외를 사용하라 오류를 코드로 관리하면, 함수를 호출하는 호출자 코드가 복잡해진다. 예외를 던지면, 실제 로직과 오류처리 로직이 뒤섞이지 않으니까 호출자 코드가 더 깔끔해진다. // Bad public class DeviceController { ... public void sendShutDown() { DeviceHandle handle = getHandle(DEV1); // Check the state of the device if (handle != DeviceHandle.INVALID) { // Save the device status to the record field retrieveDeviceRecord(handle); // If not suspended, shut down if..

Functional Interface

Function Interface package java.util.function; import java.util.Objects; @FunctionalInterface public interface Function { R apply(T t); } 아래와 같이 T를 받아 R을 리턴하는 apply 함수 구현하여 사용 public static void main(String[] args) { Function myAdder = x -> x + 10; int result = myAdder.apply(5); System.out.println(result); } ByFunction Interface package java.util.function; import java.util.Objects; @FunctionalIn..

클린코드 6장 - 객체와 자료구조

6장에서는 자료구조와 객체의 두가지 개념을 소개한다. 자료구조는 자료를 그대로 공개하며 별다른 함수를 제공하지 않는게 좋다. VO나 DTO 객체를 의미한다. 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료구조 형식의 클래스 public class Point { public double x; public double y; } 추상적인 객체 방식의 클래스 public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } (자료구조를 사용하는) 절차적인..

클린코드 5장 - 형식 맞추기

형식을 맞추는 목적 오늘 구현한 기능은 다음 버전에서 바뀔 확률이 높다. 그런데, 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 적절한 행 길이를 유지하라 JUnit, FitNesse, testNG, Time and Money, JDepend, Ant, Tomcat 등 대규모 프로젝트 소스를 분석해서 보여주는데, 500줄을 넘어가는 파일이 거의 없으며 대다수가 200줄 미만이다. 500줄을 넘지 않고도 커다란 시스템을 구축할 수 있다는 것이다. 신문 기사처럼 작성하라 좋은 신문기사는 최상단에 기사..

Java Long-Term Support Version

Java버전 선택시 LTS(Long-Term Support) 버전인지가 선택의 기준이 될 수 있다. java8, 11, 17 버전 형태로 업그레이드를 고려해야 할 것으로 보인다. https://www.oracle.com/java/technologies/java-se-support-roadmap.html Oracle Java SE Support Roadmap Release GA Date Premier Support Until Extended Support Until Sustaining Support 7 (LTS) July 2011 July 2019 July 2022***** Indefinite 8 (LTS)** March 2014 March 2022 December 2030***** Indefinite 9..

자바 2022.05.15

클린코드 4장 - 주석

주석은 나쁜 코드를 보완하지 못한다 코드로 의도를 표현하지 못하니, 주석을 사용하는 경우가 많다. 주석이 필요한 상황에서는 상황을 역전해 코드로 의도를 표현하도록 노력해야 한다. 변화하는 코드안에서 주석은 관리되지 못한다. 코드로 의도를 표현하라! 의도를 주석으로 달기 보다는 함수로 만들어 표현하는 등 코드로 표현하라.. 좋은 주석 구현한 의도를 주석으로 달거나, 표준 라이브러리여서 의미를 좀더 명료히 표현할 필요가 있는 경우, 결과를 경고하는 경우(멀티쓰레드에 안전하지 않다는 등). //TODO 주석도 많이 남지 않도록 주기적으로 점검해 없애준다. 중요성을 강조하는 주석은 필요할 때가 있다. 나쁜 주석 코드에 있는 내용을 주석으로 반복할 필요는 없다. 오해할 수 있는 주석도 나쁘며, 의무적으로 달거나 ..

반응형