반응형 All205 [이펙티브자바 3판] ITEM53. 가변인수는 신중히 사용하라 이번장의 핵심은... 인수 개수가 일정하지 않은 메서드를 정의해야 한다면 가변인수가 반드시 필요합니다 메서드를 정의할 때 필수 매개변수는 가변인수 앞에 두고, 가변인수를 사용할 때는 성능문제까지 고려합시다 가변인수 메서드 명시한 타입의 인수를 0개 이상 받을 수 있습니다 예제) 간단한 가변인수 활용 예 static int sum(int... args) { int sum = 0; for (int arg : args) sum += arg; return sum; } sum(1,2,3) -> 6 sum(0) -> 0 잘못 구현한 예) 인수가 1개 이상이어야 하는 가변인수 메서드 // 코드 53-2 인수가 1개 이상이어야 하는 가변인수 메서드 - 잘못 구현한 예! static int min(int... args).. 2021. 1. 16. [루씬 인 액션] 9. 고급 검색 기법(2) - 스팬질의, 검색필터 스팬 질의 스팬(span)이란 특정 필드에서 토큰의 시작 위치와 끝 위치를 말합니다 루씬은 SpanQuery 클래스를 기반으로 하는 다양한 종류의 질의를 지원합니다 토큰의 위치 증가 값과 SpanQuery의 하위 클래스를 활용하면 섬세한 형태의 질의로 검색할 수 있습니다 TermQuery는 단순하게 문서를 찾아내지만, SpanTermQuery 질의는 TermQuery와 같은 문서를 찾아내면서 동시에 질의에 해당하는 텀의 위치까지 모두 파악합니다 (따라서 계산량이 훨씬 많아집니다) 6가지 종류의 SpanQuery를 구현한 클래스 1. SpanTermQuery 다른 종류의 스팬 질의와 함께 사용하는 기본 질의입니다 SpanTermQuery 자체로는 TermQuery와 동일하게 동작하지만, 스팬 질의이기 때문.. 2021. 1. 16. [루씬 인 액션] 8. 고급 검색 기법(1) - 필드 캐시, 정렬 고급 검색 기법에서는 아래와 같은 방법을 알아보겠습니다 1. 텀의 위치 정보를 활용한 스팬 질의 사용 방법 2. 유사어를 검색할 수 있는 MultiPhraseQuery 클래스 3. FieldSelector 클래스를 사용해 검색 결과 문서에서 원하는 필드만 불러오는 방법 4. 어러 개의 루씬 색인을 대상으로 검색하는 방법 5. 일정 시간이 지나면 진행 중인 검색 작업을 중단하는 방법 6. QueryParser에 기반을 둔 별도의 클래스를 사용해 여러 개의 필드를 한 번에 검색하는 방법 필드 캐시 필드 캐시는 특정 필드값을 순차적으로 조회할 목적으로 만들어졌습니다 사용자에게 노출하게 준비한 기능은 아니며, 검색 애플리케이션 입장에서 고급 검색 기능을 구현할 때 사용할 수 있는 API라고 봐야합니다 어디에 사.. 2021. 1. 4. [이펙티브자바 3판] ITEM52. 다중정의는 신중히 사용하라 이번장의 핵심은... 프로그래밍 언어가 다중정의를 허용한다고 해서 다중정의를 꼭 활용하란 뜻은 아닙니다 일반적으로 매개변수 수가 같을 때는 다중정의를 피하는 게 좋습니다 다중정의 (overloading) 매개변수의 타입과 개수가 다르면서 이름이 같은 메서드를 여러개 가지는 것을 의미합니다 컴파일 타임에 어떤 메서드를 호출할지 정해집니다 // 코드 52-1 컬렉션 분류기 - 오류! 이 프로그램은 무엇을 출력할까? public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List lst) { return "리스트"; } public static Stri.. 2021. 1. 4. [우아한테크캠프Pro] 3주차 - JPA 안녕하세요~ 잭코딩입니다! (해당 업체에서 광고를 받지 않았으며, 교육비를 직접 내고 교육을 받고 있습니다) 교육을 받으며 느낀 점을 적기 위한 포스팅입니다 우아한테크캠프 Pro 3주차 수업과 미션은 JPA 관련된 내용이었습니다 JPA의 개념, 영속성 컨텍스트, 연관 관계 매핑(다대일, 일대다, 일대일, 다대다)이 주된 내용이었습니다 미션은 총 3단계로 나눠져있고, 지하철역과 노선에 대한 도메인 설명을 보고 엔티티 클래스의 연관 관계를 매핑해보는 미션입니다 실무에서 JPA를 단순하게만 사용했어서 이번 기회에 조금 더 깊게 공부를 해야겠다고 생각했습니다 인프런의 김영한님의 JPA 강의를 통해 학습하면서 미션을 진행했습니다 실제 코드로 작성하기 전에 각 엔티티의 관계를 그림으로 그려보았습니다 그리고 코드를 .. 2020. 12. 27. [이펙티브자바 3판] ITEM51. 메서드 시그니처를 신중히 설계하라 이번장의 핵심은... API 설계 요청 5가지를 알아봅시다 API 설계 요령 메서드 이름을 신중히 짓자 1. 표준 명명 규칙을 따릅시다 2. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓습니다 3. 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용합시다 4. 긴 이름은 피합시다 편의 메서드를 너무 많이 만들지 말자 1. 모든 메서드는 각각 자신의 소임을 다하도록 합니다 2. 메서드가 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵습니다 → 인터페이스도 마찬가지입니다 3. 확신이 서지 않으면 만들지 말아야 합니다 매개변수 목록은 짧게 유지하자 1. 4개 이하가 좋습니다 (4개가 넘어가면 매개변수를 전부 기억하기가 쉽지 않습니다) 2. 같은 타입의 매개변수 여러.. 2020. 12. 27. [이펙티브자바 3판] ITEM50. 적시에 방어적 복사본을 만들라 이번장의 핵심은... 클래스가 클라이언트로부터 받는 혹은 클라이언트로 반환하는 구성요소가 가변이라면 그 요소는 반드시 방어적으로 복사해야 한다 복사 비용이 너무 크거나 클라이언트가 그 요소를 잘못 수정할 일이 없음을 신뢰한다면 방어적 복사를 수행하는 대신 구성요소를 수정했을 때의 책임이 클라이언트에 있음을 문서에 명시하자 Date 자바에서 제공하는 Date 클래스는 가변입니다 자바 8부턴 Date 대신 LocalDateTime와 ZonedDateTime같은 불변클래스를 사용합니다 Period 얼핏보면 Period 클래스는 불변처럼 보이고, 시작 시간이 종료 시간보다 늦을 수 없다는 불변식이 지켜질 것 같지만, Date가 가변이라는 사실을 이용하면 쉽게 깰 수 있습니다 // 코드 50-1 기간을 표현하는 .. 2020. 12. 22. 이전 1 ··· 10 11 12 13 14 15 16 ··· 30 다음 반응형