Development

Study/이펙티브 자바

[Effective Java] 반환 타입으로는 스트림보다 컬렉션이 낫다

💥 개요 원소 시퀀스, 즉 일련의 원소를 반환하는 메소드는 많다. 자바 7까지는 이런 메서드의 반환 타입으로 Collection, List, Set 같은 컬렉션 인터페이스나 Iterable이나 배열을 썼다. 그런데 자바 8이 스트림이라는 개념을 들고 오면서 문제가 발생했는데 스트림은 반복(iteration)을 지원하지 않는다. API를 스트림을 반환하도록 작성하면 for-each로 반복하길 원하는 사용자는 불만을 토론할 것이다. 사실 Stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함할 뿐만 아니라, Iterable 인터페이스가 정의한 방식대로 동작한다. 그럼에도 for-each로 스트림을 반복할 수 없는 이유는 extend하지 않아서다. 🔎 해결방법 이 문제를 해결해줄..

Study/이펙티브 자바

[Effective Java] 정확한 답이 필요하다면 float와 double은 피하라

💥 개요 float과 double은 과학과 공학 계산용으로 설계됐다. 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 정밀한 '근사치'로 계산하도록 설계됐다. 정확한 결과가 필요하면 사용하면 안되며, 특히 금융 관련 계산과 맞지않는다. 1.03 - 0.42 는 출력시 0.6100000000000001을 출력한다. 이건 특수한 사례도 아니다. ⚠️ 금융 계산에 잘못된 예시 public class Change { // 코드 60-1 오류 발생! 금융 계산에 부동소수 타입을 사용했다. (356쪽) public static void main(String[] args) { double funds = 1.00; int itemsBought = 0; for (double price = 0.10; funds >= p..

Study/이펙티브 자바

[Effective Java] 공개된 API 요소에는 항상 문서화 주석을 작성하라

💥 개요 API를 작성함에 있어서 잘 작성된 문서는 중요하다. 공식 언어 명세에는 없지만 자바 프로그래머라면 알아야하는 업계 표준 API라 할 수 있다. 자바에서는 이 귀찮은 작업을 자바독이라는 유틸리티가 도와준다. https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html How to Write Doc Comments for the Javadoc Tool Javadoc Home Page This document describes the style guide, tag and image conventions we use in documentation comments for Java programs written at Java Sof..

Study/Next Step

[Next Step] ATDD, 클린 코드 with Spring 8기 3주차 리뷰

🎈 테스트와 의존 의존은 무조건 나쁜가에 대해서 이야기했다. 물론 답은 아니다. 의존이 없으려면 하나의 객체가 모든걸 다 처리해야하고, 변경 요구사항이 발생할 때 복잡해진다. 이를 위해서 적절한 범위로 책임을 나누는게 좋고, 불필요한 의존 대상은 정리해야한다. 🔎 테스트와 관련한 궁금증 1.통합 테스트인 경우 외부 라이브러리를 테스트해야 할까? 외부 라이브러리의 기능을 검증할 필요는 없다. 하지만, 그 부분을 활용하는 로직에 대한 검증은 필요할 수 있고, 외부 라이브러리는 변경할 수 없으니 실제 객체를 활용하는게 좋다. 의존성 테스트를 할때는 실제 외부 의존성을 사용하거나, Stub 혹은 Fake로 대체하자. ❤️ 3주차 후기 외부에 의존하는 인수 테스트 미션을 통해 외부 의존성에 대한 고민을 했던 것 ..

Study/이펙티브 자바

[Effective Java] 스트림 병렬화는 주의해서 적용하라

💥 개요 자바에서 동시성 프로그램을 작성하기가 점점 쉬워지고 있지만, 이를 올바르고 빠르게 작성하는 일은 어렵다. 동시성 프로그래밍을 할 때는 안정성(safety)과 응답 가능(liveness) 상태를 유지하기 위해 애써야 하는데, 병렬 스트림 파이프라인 프로그래밍에서도 다를 바 없다. ☠️ 스트림을 잘못 사용하는 예 아이템 45에서 다룬 메르센 소수를 생성하는 프로그램을 살펴보자 public class MersennePrimes { static Stream primes() { return Stream.iterate(TWO, BigInteger::nextProbablePrime); } public static void main(String[] args) { primes().map(p -> TWO.pow(..

Study/Next Step

[Next Step] ATDD, 클린 코드 with Spring 8기 2주차 리뷰

🎈 인수테스트 격리하기 인수 테스트를 격리하는 방법은 아래와 같다. @Transactional 어노테이션 활용 @DirtiesContext 어노테이션 활용 @Sql 혹은 쿼리 수행 코드 상으로 테이블 truncate 나의 경우에는 3번째 방법 중 쿼리를 사용하고 @interface로 선언하여 클래스단에 어노테이션을 붙이면 쉽게 사용할 수 있도록 하였다. 이 방법은 DB마다 동작하지 않을 수 있지만, JPA에서 @Embeddable과 같이 중간 테이블이 생기는 경우도 초기화를 쉽게 할 수 있어서 이 방법을 선택했다. @Transactional RANDOM_PORT나 DEFINED_PORT 사용 할 경우 실제 서블릿 환경이 제공됨 HTTP Client와 Server는 다른 스레드에서 동작 따라서 @Trans..

Study/Next Step

[Next Step] ATDD, 클린 코드 with Spring 8기 1주차 리뷰

ATDD-Subway-Map 이라는 프로젝트를 Next Step에서 시작하게 되었다. Book-Crew 라는 기술서적을 읽고, 서로 리뷰하고 모르는걸 찾아보면서 공부하는 스터디를 진행하고 있는데, 스터디원중에 한분께서 Next Step을 추천하셨고, 정말 많은 도움을 얻었다고 들었다. 이번 교육의 일정은 아래와 같다. 📻 교육일정 교육 기간은 2024-01-22(월) ~ 2024-02-29(목) 입니다. 교육기간 동안 온라인 강의는 라이브로 진행될 예정이며 교육기간 중 매주 목요일에 5회 진행됩니다. 첫 강의 전에 교육이 시작되는 이유는 사전 미션 및 강의 수강 준비를 위해서입니다. 1월 25일: 1주차 강의 2월 1일: 2주차 강의 2월 3일: 모짝미(모여서 짝 프로그래밍 미션) 희망자에 한해서 오프라..

Languege/Java & Spring

[String Constant Pool] Heap? PermGen? 오해와 진실

🎈 개요 기술 면접을 준비하고 보던 도중, 한 면접관님께서 이런 질문을 하셨습니다. Q.문자열을 String str = "hello"; 라고 선언하면 어떻게 되나요? A.JVM 메모리 내의 Heap 영역에 있는 String Constant Pool에 저장이 됩니다. Q.String Constant Pool이 Heap영역에 저장되는게 맞아요?? 저는 당연히 Heap 영역 내부에 저장되는거 아니야? 라고 생각했습니다.(블로그를 통해서 학습 하신분은 반은 맞다. 라고 생각하실 수 있을거 같아요, 보통 Heap안에 PermGen안에 String Constant Pool이 있다고 설명함) 정확히, JAVA 7까지는 Permgen에 저장되고 JAVA 8 이후부터는 NativeMemory 내부의 Metaspace에 ..

mntdev
'분류 전체보기' 카테고리의 글 목록 (2 Page)