본문 바로가기

Java

(6)
BigDecimal의 toString(), toPlainString(), toEngineeringString() BigDecimal먼저 BigDecimal에 대해서 간단히 알아보도록 하자. BigDecimal은 큰 수를 표현하거나 부동소수점을 해결할 수 있는 클래스이다.거두절미하고 코드를 보자.@Test public void primitive() { System.out.println(2.0 - 1.1); } 위 코드에서는 무엇이 출력이 될까? 0.9가 나오길 기대하겠지만, 위코드는 0.8999999999999999 라는 이상한 값을 반환한다. 자바 기본서를 보던 옛날로 돌아가보자. 우리는 첫장에서 primitive type들에 대해서 공부를 했을 것이다. 그리고 각각의 type은 고유의 bit 크기를 가지고 있다. double같은 경우에는 32bit이고 이는 4.94065645841246544E-324 ~ 1.79..
Java의 ScheduledExecutorService를 이용해서 스케줄러를 만들어보자 ScheduledExecutorService는 concurrent 패키지에 포함되어 있으며, '일정 시간 후' 또는 '주기적'으로 command(작업)를 실행시켜줄 수 있는 녀석이다.스프링을 사용했다면 간편하게 @Scheduled를 사용했겠지만, 쌩 자바를 쓸 일이 있어서 ScheduledExecutorService를 사용해봤다. 코드 자체가 직관적이기 때문에 거두절미하고 코드를 보자.import java.time.Duration; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; impo..
[Jackson] JsonInclude 속성에 대해 알아보자. Json 형식으로 데이터를 주고받을 때 Jackson의 ObjectMapper를 자주 이용한다.그런데 기본값으로 Serialize 하게 되면 null, "" 같은 (상황에 따라) 필요 없는 값 또한 모두 변환시켜준다.이를 아래의 메소드를 통하여 Serialize할 때 원하는 값만을 포함시킬 수 있다.objectMapper.setSerializationInclusion();아래 주석처럼 어노테이션으로도 이용할 수 있다. 객체마다 Include 방식이 다르면 어노테이션을 활용하자.그럼, 다양한 데이터를 가진 객체로 테스트를 해보자. jackson-databind 2.9.5를 기준으로 테스트가 진행되었다.@Getter //@JsonInclude(JsonInclude.Include.ALWAYS) public s..
Java로 날씨 알림 서비스를 만들어보자 (OOP, Clean Code) 개발동기비 오는 날만 알림을 받고 싶다. 세상에 좋은 날씨 애플리케이션은 많다. 그러나 매일 날씨 애플리케이션을 확인하는 것은 번거롭고, 내가 딱 필요한 정보만을 제공해주는 서비스도 (아마) 없다. 그래서 날 위한 서비스를 내가 만들기로 했다. 왜? 난 개발자니깐 작년에 개발실력을 향상하기 위해 온갖 서적과 영상 등을 봤다. 점차 이러한 학습량은 많아졌고, 아는 듯한 느낌은 많이 들었다. 그러나 막상 해보니 겉만 조금 알고 있었고 한계에 직면했다. 다르게 표현하자면 실질적으로 해보지 않고 한 행위들은 마치 연애를 책으로 배운듯한 느낌이 들었다. 그래서 올해부터는 실질적인 코딩에 좀 더 집중하기로 했다. 신경쓴 것OOPClean Code Test Code스케치 간단하다.스케줄러를 통해서 7시가 되면날씨 A..
Java의 List를 상황에 맞게 생성해보자 ( asList(), emptyList(), singletonList() ) 우리는 평소에 개발을 하면서 자바의 List를 많이 쓴다.이번 글에서는 List를 상황에 맞게, 좀 더 우아하게 사용하는 방법을 알아보도록 하겠다.1. 기본적인 List 생성List list = new ArrayList(); list.add("민수"); list.add("미선"); list.add("석훈");ArrayList는 최초에 생성자를 통해 객체를 만들 때 스태틱에 있는 빈 Array를 할당하는 작업만 한다.private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }이후 add() 메소드를 실행하게..
Intellij로 자바 프로젝트 만들기 + 라이브러리 추가하기 Intellij로 스프링 부트 프로젝트를 만드는 글은 많은데, 일반 자바 프로젝트를 만드는 글은 많이 보이지 않아 작성합니다. 프로젝트는 Gradle의 도움을 받아 만들어 보겠습니다. 그러나 Gradle을 모르셔도 전혀 겁먹으실 필요가 없으시며 프로젝트 생성과 함께 필요한 라이브러리를 추가해보겠습니다. 1. 프로젝트 생성 [File] - [New] - [Project]를 클릭합니다. 2. 프로젝트 종류 선택 좌측에서 Gradle, 중앙에서 Java를 선택합니다. 3. 프로젝트 기본 정보 설정 GroupId : 주로 URL을 반대로 작성합니다. ArtifactId : 프로젝트 이름을 작성합니다.Version : 버전을 입력합니다. (저는 디폴트 값으로 했습니다.) 4. Gradle 프로젝트 설정 Use a..