(Effective Java) 규칙7. 다 쓴 객체 참조를 해제하라 C, C++ 처럼 손수 메모리 관리를 해야 하는 언어를 쓰다 쓰레기 수집가 포함된 언어를 사용하기 시작하면 프로그래밍이 아주 쉬워진다. 볼 일 없는 객체는 자동적으로 반환되기 때문에 메모리 누수가 발생하는 Stack 클래스 //"메모리 누수(memory leak)가" 어디서 생기는지 보이는가? public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } p..
들어가며 Gson을 사용하여 ZonedDateTime 객체를 Serialize/Deserialize 하는 경우가 있다. public void test() { String json = new GsonBuilder().create().toJson(ZonedDateTime.now()); ZonedDateTime dateTime = new GsonBuilder().create().fromJson(json, ZonedDateTime.class); } 위와 같이 기본 세팅으로 실행할 경우 오류가 발생한다. java.lang.RuntimeException: Failed to invoke java.time.ZoneId() with no args 이에 대한 해결방법을 공유하고자 한다. ※Gson 사용법은 아래 이전 글을..
(Effective Java) 규칙22. 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스의 목적 인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형(type) 역할을 하게 된다. 해당 클래스의 객체로 어떤 일을 할 수 있는지 클라이언트에게 알리는 행위임 인터페이스의 목적은 여기까지이며 다른 목적으로 인터페이스를 정의 하고 사용하는 것은 적절치 못함 인터페이스를 잘못 사용하는 예 상수 인터페이스(constant interface) 형태 메서드가 없고, static final 필드만 있는 형태로 모든 필드는 상수 정의임 대체로 상수 이름 앞에 클래스 이름을 붙이는 번거로움을 피하기 위해서임 //상수 인터페이스 안티패턴 - 사용하지 말 것! pub..
들어가며 기존에 Apache Commons 라이브러리를 통해서 Zip 압축 기능을 구현했는데 파일을 각각 ZipArchiveEntry로 추가해줘야 하는 방식이었다. public long compressZip(List fileList, File targetFile) throws IOException { try (ZipArchiveOutputStream zos = new ZipArchiveOutputStream(new FileOutputStream(targetFile))) { int readSize; byte[] buf = new byte[BUFFER_SIZE]; for (File file : fileList) { ZipArchiveEntry ze = new ZipArchiveEntry(file.getNam..
(Effective Java) 규칙20. 추상 클래스 보다는 인터페이스를 우선하라 추상 클래스, 인터페이스 자바 언어에는 여러 가지 구현을 허용하는 자료형을 만드는 방법이 두가지 포함되어 있음. 인터페이스, 추상클래스(abstract class) 이 두 방법의 분명한 차이는 추상 클래스는 구현된 클래스를 포함할 수 있지만 인터페이스는 아니라는 것임. 자바 1.8 부터는 'default' 메서드를 통해 인터페이스에도 구현을 포함시킬 수 있음 좀 더 중요한 차이는 추상 클래스를 자료형으로 사용하기 위해서는 반드시 계승이 필요하다는 것이다. 인터페이스는 포함된 모든 메서드를 정의하고 인터페이스가 규정하는 일반 규약을 지키기만 하면됨 자바는 다중 상속(multiple inheritance)를 허용하지 않기 때문..
들어가며 Java를 사용하여 문자메시지 발송 기능을 구현하는 방법을 알아보겠습니다. 구현 방법 쿨 엠에스 API 쿨 엠에스 API는 문자메시지 발송 서비스를 REAT API를 통하여 연동할 수 있는 상용 서비스 입니다. 유료 서비스이며 회원가입시 300포인트를 주는데 일반 문자의 경우 1개당 20원 입니다. 테스트 용도로 사용할 수 있으며 필요한 경우 금액을 충전해서 사용가능 개발환경 세팅 1. SDK 적용 SDK를 별도로 제공하고 있어서 SDK를 적용해보겠습니다. 사이트에서 사용하고 있는 Build 방법에 따라서 SDK를 적용해줍니다. 필자는 gradle을 사용하고 있기에 gradle로 적용함 dependencies { testCompile group: 'junit', name: 'junit', ver..
들어가며 List에 있는 Item들을 대상으로 고유한 ID별로 합계를 구해야 하는 상황이 발생했다. 문제 상황 id와 duration을 가지는 MyClass가 있고 MyClass List을 받아 id별 duration의 합을 가지는 Map을 반환해야 한다. class MyClass { public String id; public Float duration; } private Map sum(List list) { return ???? } 해결방법 일단 코드부터 보자면 아래와 같다. private Map sum(List list) { return list.stream().collect(Collectors.toMap(e -> e.id, e -> e.duration, Float::sum)); } 좀더 자세하게 ..
들어가며.. Selenium으로 파싱을 하는데 iframe 안에 있는 정보를 파싱을 하고자 했다. (Java 사용) 이리저리 알아보다 간단한 방법을 알아내었다. 방법 iframe 파싱 예졔 코드 'driver.switch_to.frame' 메서드를 사용하여 iframe element로 switch를 해주는 것으로 보임 아래 코드 사용 후 iframe 안에 컨텐츠를 파싱 //파싱 하고자하는 iframe elements를 찾아 switch함 //파이썬 예제 driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) //자바 예제 driver.switchTo().frame(driver.findElement(By.tagName("iframe"))) 다시..
- Total
- Today
- Yesterday
- 텐트
- 일본 배낭여행
- springboot
- 일본 자전거 여행
- effectivejava
- git
- JavaFX Table View
- 스프링부트
- 이펙티브 자바
- 자바
- JavaFX 종료
- 배낭여행
- 일본여행
- JavaFX 테이블뷰
- 인텔리제이
- JavaFX
- 방통대 과제물
- 일본 여행
- 이펙티브
- JavaFX Window Close
- effective java
- intelij
- TableView
- 배낭 여행
- Java UI
- 이펙티브자바
- 자전거 여행
- 자전거
- windows
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |