이펙티브 자바에서 소개하는 싱글턴을 만드는 방법은 다음 세 가지이다. public class Item3 { public static final Item3 INSTANCE = new Item3(); private Item3() {} // ... } 첫번째 방법은 생성자를 private 으로 감추고 유일한 인스턴스에 접근할 수 있는 수단으로 public static final 멤버를 하나 만드는 것이다. 생성자는 초기화 할 때 딱 한번만 호출되기 때문에 이 클래스의 인스턴스는 시스템 전체에 하나뿐임을 보증할 수 있다. 물론 리플렉션을 통해 생성자를 호출할 수는 있지만 생성자에서 예외를 던지도록 만들어서 방어할 수있다. 이 방법은 싱근턴임을 명확하게 파악할 수 있고 비교적 코드가 간결해 지는 장점이 있다. p..
보통 클래스의 인스턴스를 생성할 때 new 키워드를 통해 생성자를 사용하는 방법입니다. 하지만 생성자를 사용하는 방법은 때로는 조금 귀찮을 수 있습니다. 생성자 아규먼트의 순서를 헷갈린다거나 때로는 아규먼트가 너무나 많아서 그냥 코드 자체가 지저분해 지는 것이 싫을 수도 있겠죠. 이럴 때 사용할 수 있는 것이 정적 팩더리 메서드(static factory method)를 사용하는 것입니다. public static final List emptyList() { return (List) EMPTY_LIST; } 위 코드는 실제 Collections 클래스에 포함되어 있는 텅 빈 리스트를 반환하는 정적 팩터리 메서드 입니다. 이런 방법에는 장점과 단점이 모두 존재합니다. 장점을 먼저 알아보겠습니다. 1. 이름..
무작위로 0에서 99까지의 숫자들 중 10개를 뽑아서 오름차순으로 정렬한 뒤 출력하는 함수를 작성해 봅시다. 다음과 같은 코드를 만들 수 있겠죠. public void printRandomNumbers() { Set cache = new HashSet(); List result = new ArrayList(); while(result.size() < 10) { int number = (int) (Math.random() * 100); if (cache.contains(number)) { continue; } cache.add(number); result.add(number); } Collections.sort(result); for (int number : result) { System.out.print..
지금 다니는 회사에 입사해서 가장 처음 받게 된 코드리뷰에서 지적당한 것이 열거 타입을 비교하는 부분 이었습니다. public enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE } 저는 위와 같이 enum 으로 선언된 열거 타입의 변수들을 선언하고 다음과 같이 비교했습니다. public String getMessage(Size first, Size second) { if (first.equals(second)) { return "It's same size."; } return "It's not same size."; } 하지만 한 팀원 분께서 enum은 equals 메서드를 쓸 필요가 없다고 하셨습니다. 열거 타입은 인스턴스들이 고정되어 있으므로 간단하게 ==을 사용하면 ..
public interface Student { String getName(); } public interface Citizen { String getName(); } public class Brad implements Citizen, Student{ @Override public String getName() { return "Brad"; } } Student Interface 와 Citizen Interface 를 동시에 구현하는 Brad 라는 클래스가 있습니다. 각 인터페이스는 getName 이라는 문자열을 반환하는 메서드를 가지고 있고 이 인터페이스를 구현하는 Brad 클래스는 반드시 getName 메서드를 오버라이드 해야 합니다. Brad 클래스 에서는 getName 을 오버라이드 하고 있습니다..
Gradle은 JAVA 개발에 엄청난 도움을 주는 강력한 Build Tool이지만 생소한 groovy 문법과 설정 파일, 사용방법 때문에 오히려 신입 개발자 들을 헷갈리게 하기도 합니다. 다행인 점은 gradle 을 사용하기 위한 학습 곡선이 높지 않고 대부분의 팀에서 gradle을 어렵게 사용하지 않는다는 점입니다. 이 포스트에서는 웹 개발에 필요한 최소한의 gradle 지식을 알아 보도록 하겠습니다. Build Tool Gradle 은 일종의 build tool(빌드 도구) 입니다. 여기서 말하는 빌드라는 개념은 단순히 프로그램을 컴파일하여 애플리케이션을 생성하는 작업만을 의미하지는 않습니다. 개발한 소프트웨어가 제품으로 만들어지는 일련의 과정, 즉, 컴파일, 테스트, 배포, 문서화 등의 작업을 포함..
분산 서비스가 대세가된 지금 대부분의 현대 웹애플리케이션의 아키텍쳐는 위 그림과 같은 복잡한 모습을 가지게 됩니다. 보기만 해도 머리가 아플 정도로 복잡한 의존성 관계 때문에 시스템이 깨지기 쉽다는 것을 알 수 있습니다. 카프카는 대용량, 대규모의 데이터를 빠르게 처리하기 위해 개발된 일종의 메세지 발행/구독 시스템입니다. 카프카를 이용해서 현대 웹애플리케이션의 복잡하고 위험한 의존성 관계를 깔끔하게 해결 할 수 있습니다. 위 그림은 카프카를 도입한 웹 애플리케이션의 아키텍쳐를 나타냅니다. 복잡했던 의존관계가 사라지고 카프카를 통하는 단순한 선들만 남아이 있는 것을 볼 수 있습니다. 위 그림에서 Producer, Brokers, Consumers 라는 단어가 등장합니다. 이 단어를 이해하기 위해서는 먼저..
- Total
- Today
- Yesterday
- Warning
- 디자인패턴
- GROUP BY
- java
- 코딩의 기술
- Count
- html
- 마르코프 연쇄
- 동적계획법
- 경고
- markov chain
- Spring in Action
- 로그
- 크롬
- 유지보수
- 문장 생성기
- DP
- 몰라서망신
- Markov
- CONVENTIONS
- 전략패턴
- RESTful
- 마르코프
- 클린코드
- 자바스크립트 개론
- restful api
- REST API
- 자바스크립트개론
- was
- 야근
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |