개발자의 필독서라고 선정될 만큼, 개발자로서 태도/마인드/전략에 대한 이야기를 담고 있습니다. 개발자로서 답답함이 많은 요즘, 저에겐 이 책 한권이 힐링으로 다가옵니다. 그 중에서도 눈길이 가는 세 이야기를 발췌했습니다. 1. 제자리 걸음 벗어나기 ( 성장!(몰입)하는 환경으로 변화하기 ) 개발을 할 때 실력과 작업난이도가 비슷하면, 작업에 몰입할 수 있고 성장 할 수 있는 환경이라고 합니다. 그런데, 비슷하지 않으면 지루함이나 불안함을 느끼게 됩니다. 지루함과 불안함을 느끼면, 성장할 수 없는 환경이라고 필자는 말합니다. 지루함을 느끼는 케이스는 "실력 > 작업의 난이도"인 케이스이고, 불안함을 느끼는 케이스는 "작업의 난이도 > 실력"인 케이스 입니다. 이 두 케이스에 대해 몰입이 가능한 상태로 가기..
정적팩터리와 생성자 모두 선택적 매개변수가 많을 때 적절히 대응하기가 어렵다. 매개변수가 많을 때 사용할 수 있는 방법들을 살펴보자. 점층적 생성자 패턴 public class NutrionFacts { private final int servingSize; //필수 private final int servings; //필수 private final int calories; //선택 private final int fat; // 선택 private final int sodium; // 선택 private final int carbohydrate; // 선택 public NutrionFacts(int servingSize, int servings) { this(servingSize, servings, 0)..
public class UtilityClass { // 기본 생성자가 만들어지는 것을 막는다. (인스턴스화 방지용) private UtilityClass() { throw new AssertionError(); } ... (생략) } 이따금 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있을 것이다. - java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드 - java.Util.Collections 처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드 - final 클래스와 관련한 메서드들을 모아놓음. final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능하기 때문이다. 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 ..
설계와 아키텍처의 차이 -> 없다. - '설계'는 저수준의 구조 또는 결정사항 - '아키텍처'는 저수준의 세부사항과 분리된 고수준의 무언가를 가리킴. - '설계'와 '아키텍처'를 구분 짓는 것는 경계는 모호하다. 고수준에서 저수준으로 향하는 연속적인 의사결정이 있을 뿐.. - 즉, 대상 시스템의 구조를 정의 소프트웨어 아키텍처의 목표 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. 실례로, 초기 성장 모드에서는 개발자의 생산성이 큰 반면, 일정이상 성장의 상태가 된 후에는 생산성의 증가하지 않는다. 고용하는 개발자는 증가하는데, 생산성에는 변화가 없다. 경영진의 입장에서 보면, 답답할 노릇이다 비용은 증가하고 있는데, 생산성에는 변화가 없으니 말이..
IOC 컨테이너 1. IOC 컨테이너 사용 : Bean을 관리함 Bean 들을 담고 있는 컨테이너 Bean을 가져와서 개발을 진행 2. Bean : Ioc 컨테이너에서 관리하는 객체 xml로 설정 오늘날 : annotation으로 등록( auto Scan ) 장점 의존성 관리 스코프 싱글톤, 하나 프로토타입 : 매번 다른 객체 라이프사이클 인터페이스 ( ex . postConstruct ) 3. BeanFactory life cycle --> 통해서 여러가지 기능 제공 * 중요 * getBean,
equals는 일반 규약을 지켜 재정의하라 equals 메서드는 Object의 정보들에 대해 동등성을 비교하는 목적으로 사용한다. equals 메서드를 잘못 작성하면 잘못된 결과를 만들 수 있다. equals를 재정의하지 않는 경우 각 인스턴스가 본질적으로 고유하다 값이 아닌 동작을 개체로 표현하는 경우 (ex. Thread) 논리적 동치성(p->q, q->p)을 확인 할 필요가 없다 클라이언트가 원치 않거나 애초에 필요치 않다고 판단 할 수 있다(기본 equals로 해결). 상위클래스에서 재정의한 equals가 하위 클래스에도 적용된다. set, Map, List의 경우 Abstract(Type)의 equals를 쓴다. 클래스가 private, package-private여서 equals를 호출할 일이..
try-finally(JAVA 6) 보다는 try-with-resources(JAVA 7)를 사용하라 try-fianally를 사용할 때 보다 try-with-resources를 사용할 때 코드가 짧아지고, 예외 처리가 유용하다. try-with-resources는 try가 종료될 때 자동으로 자원을 해체해준다(AutoCloseable 구현 된 경우, close() 메소드를 호출한다) static String firstLineOfFile(String path) throws IOException{ try(BufferedReader br = new BufferReader( new FileReader(path))){ return br.readLine(); } } try(...) 안에 Reader 객체가 할당 ..