본문 바로가기

728x90
반응형

회고/이펙티브 자바 3판

(23)
[ 아이템 52 ] 다중 정의는 신중히 사용하라 이해는 했는데 양이 너무너무 많잖아.... 천천히
[ 아이템 51 ] 메서드 시그니처를 신중히 설계하라 메서드 이름을 신중히 짓자 항상 표준 명명 규칙을 따라야 한다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표다. 그다음 목표는 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하는 것이다. 긴 이름은 피하자. 애매하면 자바 라이브러리 API 가이드를 참고하자 편의 메서드를 너무 많이 만들지 말자 모든 메서드는 자신의 소임을 다해야 한다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다. 인터페이스도 마찬가지다. 메서드가 너무 많으면 이를 구현하는 사람과 사용하는 사람 모두를 고통스럽게 한다. 확신이 서지 않으면 만들지 말자 매개변수 목록은 짧게 유지하자 4개 이하가 좋다. 4개가 넘어가면 매개변수를 전부 기억하기가 쉽지 않..
[ 아이템 49 ] 매개변수가 유효한지 검사하라 이번 아이템은 워낙 내용이 길어서 가독성을 높이기 위해, 스스로 소제목을 달아서 구분했습니다. 보다 읽는 사람이 명확하고 쉽게 이해되기를 빕니다. 매개변수에 대한 일반 원칙 메서드와 생성자의 매개변수 값은 음수이면 안되며, 객체 참조는 null이 아니어야 한다. 이런 제약은 반드시 문서화 해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다. 이는 "오류는 가능한 빨리 발생한 곳에서 잡아야 한다"는 일반 원칙의 한 사례이다. 매개변수의 검사를 간과하면 생기는 문제 1. 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 2. 메서드가 잘 수행되지만 잘못된 결과를 반환한다. 3. 메서드가 문제없이 수행됐지만, 어떤 객체를 이상한 상태로 만들어놓아서 미래의 알 수 없는 시점에 문제가 발생한다. ..
[ 아이템 68 ] 일반적으로 통용되는 명명 규칙을 따르라 식별자 타입 예 패키지와 모듈 org.junit.jupiter.api.com.google.common.collect 클래스와 인터페이스 Stream, FutureTask,LinkedHashMap,HttpClient 메서드와 필드 remove, groupingBy, getCrc 상수 필드 MIN_VALUE, NEGATIVE_INFINITY 지역변수 i, denom, houseNum 타입 매개변수 T, E, K, V, X, R, U, V, T1, T2 패키지와 모듈 *철자 패키지와 모듈 이름은 각 요소를 점(.)으로 구분하여 계층적으로 짓는다. 요소들은 모두 소문자 알파벳 혹은 드물게 숫자로 이우진다. 조직 바깥에서도 사용된다면 인터넷 도메인 이름을 역순으로 사용한다. edu.cmu, com.google, ..
[ 아이템 67 ] 최적화는 신중히 하라 섣불리 진행하는 최적화는 좋은 결과보다는 해로운 결과를 낸다. 빠르지도 않고 제대로 동작하지도 않으면서 수정하기는 어려운 소프트웨어를 탄생시키는 것이다. 성능 때문에 견고한 구조를 희생하지 말자. 빠른 프로그램보다는 좋은 프로그램을 작성하라 좋은 프로그램이지만 원하는 성능이 나오지 않는다면 그 아키텍처 자체가 최적화할 수 있는 길을 안내한다. 좋은 프로그램은 정보 은닉 원칙을 따르므로 개별 구성요소의 내부를 독립적으로 설계할 수 있다. 따라서 시스템의 나머지에 영향을 주지 안혹도 각 요소를 다시 설계할 수 있다. ( 이는 성능 문제를 프로그램 완성까지 무시하라는 것이 아니다. 구현상의 문제는 나중에 최적화 할 수 있지만, 아키텍처의 결함이 성능을 제한하는 상황이라면 시스템 전체를 다시 작성하지 않고는 해..
[ 아이템 67 ] 네이티브 메서드는 신중히 사용하라 자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 프로그램이 네이티브 메서드를 호출하는 기술이다. 여기서 네이티브 메서드란 C나 C++같은 네이티브 프로그래밍 언어로 작성된 메서드를 말한다. 네이티브 메서드의 주요 쓰임은 다음 3가지이다. 하지만 반박이 더 내용이 많다. 1. 레지스트리 같은 플랫폼 특화 기능을 사용한다. -> 자바가 성숙해가면서 OS같은 하부 플랫폼의 기능들을 점차 흡수하고 있다. 그래서 네이티브 메서드를 사용할 필요가 계속 줄어들고 있다. 예컨대 자바 9은 새로 process API를 추가해 OS 프로세스에 접근하는 길을 열어주었다. 2. 네이티브 코드로 작성된 기존 라이브러리를 사용한다. 레거시 라이브러리이다. -> 대체할만한, 자바라이브러리가 없다면..
[ 아이템 65 ] 리플렉션보다는 인터페이스를 사용하라 리플렉션에 대해 공부하고 쓰기
[ 아이템 64 ] 객체는 인터페이스를 사용해 참조하라 적합한 인터페이스만 있다면 매개변수 뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 객체의 실제 클래스를 사용해야 할 상황은 '오직' 생성자로 생성할 때뿐이다. 좋은 예, 인터페이스를 타입으로 사용했다. Set sonSet = new LinkedHashSet(); 나쁜 예, 클래스를 타입을 사용했다.!!! LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 유연해질 것이다. 나중에 구현 클래스를 교체하고자 한다면 그저 새 클래스의 생성자를 호출해주기만 하면 된다. 예컨데, LinkedHashSet은 다음처럼 바뀐다. Set sonSet = new HashSet(); 주의사항 원래의 클래스가 인터..

728x90
반응형