일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- javascript value
- webstorm
- ECMA2015
- javascript
- effectivejava
- you don't know js
- webpack
- java
- spring security
- JetBrains
- Spring Session
- ES6
- Intellij
- Babel
- javascript type
- javascript 값
- javascript native
- java.util.LinkedHashMap cannot be cast
- Redis
- Effective Java
- Spring
- 이펙티브 자바
- 자바스크립트
- nodeJS
- 자바
- CAS
- javascript 기초
- requestbody
- 이펙티브자바
- spring batch #스프링 배치 #스프링 배치 중복 실행
- Today
- Total
목록이펙티브 자바 (6)
귀찮지만 만들어보자
다중정의는 신중히 사용하라 public class CollectionClassfier { public static String classify(Set s) { return "집합"; } public static String classify(list list) { return "리스트"; } public static String classify(Collection c) { return "그 외"; } public static void main(String[] args) { Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().values() }; for (Collecstion c: collections) { System.out..
메서드 시그니처를 신중히 설계하라 - 메서드 이름을 신중히 짓자.이게 제일 어렵다 우웩 - 편의 메서드를 너무 많이 만들지 말자이건 유틸성으로 사용하는 메서드를 만들어서 사용하는 경우뿐만 아니라, 외부 라이브러리를 사용하는 경우 또한 마찬가지다. 자바의 장점이 활용할 수 있는 라이브러리가 많다는 점인데.. 간혹 이게 장점인지 단점인지 분간이 안갈때가 있다. 분명 같은 역할을 하는 유틸인데 spring에서 만든것도 있고, apache에서 만든것도 있고.. 그래서 협업하는 단계에서 골치아플 때가 많다. - 매개변수 목록은 짧게 유지하자4개 이하가 좋다고한다. 과하게 긴 매개변수 목록을 짧게 줄이는 방법 1. 메서드를 쪼갠다 - 여러개의 메서드를 조합해서 사용하는 방식이다. 잘못하면 메서드의 개수만 많아질 수..
적시에 방어적 복사본을 만들라 자바로 작성한 클래스는 시스템의 다른 부분에서 무슨짓을 하든 그 불변식이 지켜진다.하지만 다른 클래스로부터의 침범을 아무런 노력없이 막을 수 있는 건 아니다.클라이언트가 불변식을 깨뜨리려고 혈안이 되어있다고 가정하고 방어적으로 프로그래밍해야한다 그니까 요점은 생성된 객체 내부의 값을 변조할 수 없게 코딩해야한다는 말이다. Date를 매개변수로 받는 경우를 생각해보면, Date는 가변이기 때문에 어렵지 않게 불변식을 깨뜨릴 수 있다.자바8에 추가된 Instant나 LocalDateTime 등을 사용하면 이런 점을 방지할 수 있다.얘네들은 불변이기 때문에 생각해보니 우리 프로젝트는 아직 Date를 사용한다또 다른 방법으로는 매개변수를 그대로 사용하지 않고, 생성자에서 값을 복사..
매개변수가 유효한지 검사하라 메서드 몸체가 시작되기 전에 매개변수를 검사해야한다. 사실은 이게 핵심이다.미리 확인한다면 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다. 매개변수 검사를 제대로 하지 않았을때의 문제점- 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. - 메서드는 잘 수행됐지만 잘못된 결과를 반환할 수 있다. - 메서드에 포함된 객체를 이상한 상태로 만들어놔서 미래의 알수 없는 시점에 메서드와 관련없는 오류를 발생 시킬수있다. 간략하게 정리를 하자면 메서드가 외부의 잘못된 변수로 인해 영향을 받지 않게 해야한다.가장 문제가 자주 발생하는건 null에 대한 처리인데..이 때문에 불변성을 보장해주는 언어가 각광받는게 아닐까 싶다. ex) kotlin, scala 자바7에 추가된..
스트림 병렬화는 주의해서 사용하라 자바5에서는 concurrent 라이브러리, executor 프레임워크자바7에서는 fork / join 그리고자바8에서는 parallel로 벙렬 프로그래밍을 지원한다. 사용하는 것은 간단하게 메서드를 호출하는 것으로 가능하지만,제약 사항이 많고 올바르게 사용하기에는 제약사항이 많다. parallel로 성능개선을 할 수 없는 경우- 데이터 소스가 Stream.iterate 인 경우 - 중간 연산에 limit를 사용하는 경우 - 스틀팀의 소스가 LinkedList와 같이 꼬리를 물고 있는 경우 일반적으로 parallel을 사용해서 성능개선을 할 수 있는 경우- 스트림의 소스가 ArrayList, HashMap, HashSet, ConcurrentHashMap, 배열, int..
반환 타입으로는 스트림보다 컬렉션이 낫다 스트림에서는 일반적인 컬렉션에서 지원하는 iteration(반복)을 제공하지 않는다.사용하지 말라는 가장 큰 이유가 이것이다.스트림 인터페이스는 iterable 인터페이스가 정의한 추상 메서드를 포함할 뿐만아니라,iterable 인터페이스가 정의한 방식대로 동작한다.그럼에도 불구하고 foreach로 스트림을 반복할 수 없는 이유는 스트림이 iterable을 상속받지 않아서다.그러니까 어설프게 스트림을 반환하는 것 보다는 컬렉션이 낫다스트림을 반복처리하도록 만드는 방법이 아예 없진 않지만 어지간하면 지양하자... 원소의 개수가 많다면(ex. 2^30-1) 처리할 수 있는 전용 컬렉션을 구현하거나,그것이 불가능 할 경우에 stream과 iterable 중 더 자연스러..