Home
Youngho's Devlog
Cancel

[이펙티브자바] 아이템67-최적화는 신중히 하라

핵심 정리: 빠른 프로그램을 작성하려 안달하지 말자. 좋은 프로그램을 작성하다 보면 성능은 따라오게 마련이다. 하지만 시스템을 설계할 때, 특히 API, 네트워크 프로토콜, 영구 저장용 데이터 포맷을 설계할 때는 성능을 염두에 두어야 한다. 시스템 구현을 완료했다면 이제 성능을 측정해보자. 충분히 빠르면 그것으로 끝이다. 그렇지 않다면 프로파일러...

[이펙티브자바] 아이템59-라이브러리를 익히고 사용하라

핵심 정리: 바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면 누군가 이미 라이브러리 형태로 구현해놓았을 가능성이 크다. 그런 라이브러리가 있다면, 쓰면 된다. 있는지 모르겠다면 찾아봐라. 일반적으로 라이브러리의 코드는 여러분이 직접 작성한 것보다 품질이 좋고, 점차 개선될 가능성이 크다. 코드 품질에도 규모의 경제가 적용된다. 라...

[이펙티브자바] 아이템58-전통적인 for문보다는 foreach문을 사용하라

핵심 정리: 전통적인 for문과 비교했을때 foreach문은 명료학, 유연하고, 버그를 예방해준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each문을 사용하자. 전통적인 for문의 단점 // 컬렉션 순회하기 - 더 나은 방법이 있다. for (Iterator<Element> i = c.iterator()...

[이펙티브자바] 아이템52-다중정의는 신중히 사용하라

다중정의된 메서드는 컴파일 타임에 실행이 결정된다. 다음은 컬렉션을 집합, 리스트, 그 외로 구분하고자 만든 프로그램이다. “집합”, “리스트”, “그 외”를 차례로 출력할 것 같지만, 실제로 수행해보면 “그 외”만 세 번 연달아 출력한다. 이유가 뭘까? 다중정의(overloading. 오버로딩)된 세 classify 중 어느 메서드를 호출할지...

[이펙티브자바] 아이템53-가변인수는 신중히 사용하라

가변인수 가변인수는 명시한 타입의 인수를 0개 이상 받을 수 있다. 가변인수 메서드를 호출하면, 가장 먼저 인수의 개수와 길이가 같은 배열을 만들고 인수들을 이 배열에 저장하여 가변인수 메서드에 건네준다. // 코드 53-1 간단한 가변인수 활용 예 (320쪽) static int sum(int... args) { int sum = 0; ...

[이펙티브자바] 아이템45-스트림은 주의해서 사용하라

스트림 스트림 API는 다량의 데이터 처리 작업(순차적이든 병렬적이든)을 돕고자 자바8에 추가되었다. 이 API가 제공하는 추상 개념 중 핵심은 두 가지다. 1) 스트림(Stream)은 데이터 원소의 유한 혹은 무한 시퀀스(sequence)를 뜻한다. 2) 스트림 파이프라인(stream pipeline)은 이 원소들로 수행하는 연산 단계를 표현하...

[이펙티브자바] 아이템43-람다보다는 메서드 참조를 사용하라

람다보다 메서드 참조를 사용해야 하는 이유 - 간결함 map.merge(key, 1, (count, incr) -> count + incr); 위 코드는 자바 8때 Map에 추가된 merge 메서드를 사용했다. merge 메서드는 키, 값, 함수를 인수로 받으며, 주어진 키가 맵 안에 아직 없다면 주어진 {키, 값} 쌍을 그대로 저장한다....

[Spring] Spring EventListener

출처 https://sunghs.tistory.com/139

[Java] 객체지향 생활체조 원칙

https://hudi.blog/thoughtworks-anthology-object-calisthenics/ 포스팅 본문에서도 설명하고 있지만 왜(Why?) 이러한 원칙이 나왔는지, 어떠한 문제점들을 해결하고자 하는지에 대해 초점을 맞춰서 읽으면 좋을 것 같다. Why? 에 대해 아주 적절하게 잘 설명되어 있어서 읽으면서 공감이 많이 갔는데, 이...

[이펙티브자바] 아이템41-정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

마커 인터페이스와 관련하여 여기를 먼저 참고하면 좋다. 마커 인터페이스 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스를 마커 인터페이스(marker interface)라 한다. Serializable 인터페이스는 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통...