728x90
728x90
많은 클래스가 하나 이상의 자원에 의존한다. 예를들어 맞춤법 검사기는 사전에 의존하는데, 이런 클래스를 정적 유틸리티 클래스로 구현한 모습을 드물지 않게 볼 수 있다. public class SpellChecker { private static final Lexicion dictionary = ...; private SpellChecker() { } // 객체 생성 방지 public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... } } 비슷하게 싱글턴으로 구현하는 경우도 흔하다. public class SpellChecker { private final Lexicon dictionar..
이 책을 사주며 꼭 빨리 성장하라고 했던 선배(라고 부르고 은인 + 스승이라 부른다)의 당부를 잊고 벌써 몇개월을 소비한 것인가... 빨리 읽어야지 종종 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있다. 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이지만, 분명 나름 쓰임새가 있다. 예를들어 java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있고, java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(or 팩터리)를 모아놓을 수도 있다(자바8부터는 이런 메서드를 인터페이스에 넣을 수 있다). 마지막으로, final 클래스와 관련한 메서드들을 모아놓을 때도 사용..
예전에 구글 스타트업 센터에서 플러터를 알려주는 행사를 진행했었고, 참여해서 간단한 앱을 만들어 본적이 있다(거의 예제를 복붙하는 방식이긴 했지만...!) 플러터가 다트라는 언어를 이용한 것이고.... 또 크로스 플랫폼이니 해서 안드로이드, ios 전부다 호환이 되어서 앱 개발자에게 유용하고, 또 플러터는 최근(작년 기준)에 구글에서 공식 지정 언어로 선정되었다는 그런 얘기(추가적으로 앵귤러 얘기를 하면서 뒷통수를 조심해야한다는 농담도...)를 들었었다. 웹 개발자를 지향하고 있지만 앱 개발에 흥미가 없는 것은 아니다. 처음 개발자가 되고 싶다고 생각한 이유는 모바일 앱을 만들고 싶어서였다. 아니 정확히는 창업 아이템으로 만들어야 했는데 만들지 못했던 아쉬움이 커서였다. 웹 개발자인 나에게 안드로이드와 ..
한빛미디어 서평단 두 번째 서적이다! 이번에는 저번과는 달리 관심이 있었던 AWS 구축에 관련된 책이었다. 평소 관심이 있어서 그런지 색상부터 매우 영롱하게 느껴진다. 책의 구성은 총 6파트로 나뉘고 제목처럼 14가지의 패턴으로 구성되어 있다. 책 구성 Part 1. 웹 시스템 패턴1. 이벤트 사이트 패턴2. 기업 웹사이트 패턴3. 성능을 중시하는 인트라 웹 패턴4. 가용성을 중시한 인트라 웹 Part 2. 스토리지 시스템 패턴5. 백업 패턴6. 파일 서버 Part 3. 데이터 분석 시스템 패턴7. 구조화된 데이터 분석 패턴8. 비구조화된 데이터 분석 패턴9. AI와 IoT Part 4. 애플리케이션 쾌속 개발 패턴10. 서버 애플리케이션 쾌속 개발 패턴11. 모바일 앱 쾌속 개발 Part 5. 클라우드..
(이번 장은 잘 이해하지 못하는 부분이 많았다. 2회독 3회독을 하면서 이 부분이 점점 익숙해지기를 바란다..) 싱글톤(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 대표적인 예는 함수와 같은 무상태(stateless) 객체나 (설계상 유일해야하는) 시스템 컴포넌트가 있다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식은 보통 둘 중 하나이다. 두 방식 모두 생성자는 private로 감춰두고, 유일한 인스턴스에 접근하는 수단으로 public static 멤버를 하나 만든다. 첫번째 방법. public static 멤버가 final 필..
아이템 1에서 언급한 정적 팩터리와 생성자에게는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 공통적인 제약사항이 있다. 식품 포장의 영양정보를 포함하는 클래스를 생각해보자. 영양정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리같은 필수 항목 몇개와 총 지방, 트랜스지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄진다. 그런데 대부분 제품은 이 선택 항목 중 대다수의 값이 0이다. 이런 클래스용 생성자 혹은 정적 팩터리는 어떤 모습일까? 프로그래머들은 이럴 때 점층적 생성자 패턴(telescoping constructor pattern)을 즐겨 사용했다. 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지..