Reading Book

    [이펙티브 자바] private 생성자나 열거 타입으로 싱글턴임을 보증하라

    싱글턴(Singleton) 싱글턴: 인스턴스를 오직 하나만 생성할 수 있는 클래스 무상태(stateless) 객체 설계상 유일해야 하는 시스템 컴포넌트 클래스를 싱글턴으로 만들면 테스트하기가 어려워질 수 있다. 타입을 인터페이스로 정의하여 구현체를 만든 싱글턴이 아니라면, 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문 싱글턴 만드는 방식 1) public static 멤버가 final 필드인 방식 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { } public void leaveTheBuilding() {...} } Elvis 클래스가 초기화될 때 만들어진 인스턴스가 전체 시스템에서 ..

    [이펙티브 자바] 생성자에 매개변수가 많다면 빌더를 고려하라

    [이펙티브 자바] 생성자에 매개변수가 많다면 빌더를 고려하라

    생성자나 정적 팩터리에 선택적 매개변수가 많을 때 대응하기가 어렵다. 매개변수가 많은 경우 어떤 식으로 개발자들은 처리했는지 다음을 봐보자. 1. 점층적 생성자 패턴 프로그래머들은 선택적 매개변수에 대응하는 방법으로 점층적 생성자 패턴을 이용하였다. 필수 매개변수만 받는 생성자 필수 매개변수 + 선택 매개변수 1개를 받는 생성자 필수 매개변수 + 선택 매개변수 2개를 받는 생성자 ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려 만드는 방식이다. 보통 이런 점층적 생성자 패턴 방법을 사용하면 사용자가 설정하길 원치 않는 매개변수까지 포함할 수 있는데, 어쩔 수 없이 그런 매개변수에도 값을 지정해줘야 한다. 때문에 매개변수 개수가 많아지면 클라이언트 코드의 가독성 및 작성이 어려워진다. 2. 자..

    [이펙티브 자바] 생성자 대신 정적 팩터리 메소드를 고려하라

    [이펙티브 자바] 생성자 대신 정적 팩터리 메소드를 고려하라

    정적 팩터리 메소드가 생성자보다 좋은 장점 1. 이름을 가질 수 있다. 한 클래스에 시그니처가 같은 생성자가 여러 개가 되면 생성자만으로는 각각의 차이를 들어내기가 쉽지 않다. 정적 팩터리 메소드를 사용하면 각각의 차이가 잘 드러나게 할 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. 생성 비용이 큰 객체가 자주 요청되는 상황이라면 이와 같은 방식이 성능을 올려준다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } //객체를 생성하지 않는 예 Boo..

    3장 리서치 & 프레젠테이션

    3장 리서치 & 프레젠테이션

    📌출처와 현장을 조사하라 현장에 가서 '1차 정보'를 얻어야 합니다. (제일 정확한 사실이기 때문입니다.) 설문을 위한 설문을 하지 말아야 한다. (질문을 계기로 상대방도 의식하지 못한 잠재적인 니즈를 발굴해내야 하기 때문입니다.) 예를 들어 설문 조사에 '이 디자인은 좋습니까, 실습니까?' 같은 문항이 나오면 굳이 싫지 않아서 '좋습니다'에 투표를 한다. '좋다'는 의견이 많아서 이 디자인으로 만들었지만 전혀 팔리지 않는 경우가 발생한다. 좋은 질문의 예 [원인을 찾는 질문] 왜 되지 않았나요? / 무엇이 일어났나요? / 무엇이 멈춰 있나요? [해결책을 이끌어내는 질문] 어떻게 하면 잘할 수 있나요? / 지금 무엇을 하면 되나요? [시점을 바꾸는 질문] 이문제는 언제부터 시작되었나요? / 부하(상사)라..

    2. '가설'을 세우자

    2. '가설'을 세우자

    📌가설을 검증하는 '이슈 트리' 문제를 해결할 때 가설, 즉 가상의 해답을 세우는 것이 중요합니다. 바꿔 말하면 '해답'을 찾는 것입니다. 가설이 필요한 이유는 가설을 빨리 세우면 그것이 올바른 답인지 아닌지도 빨리 검증할 수 있기 때문입니다. 예를 들어, 어떤 문제인지를 파악했다면, 그 파악에 대한 가해결책(가설)을 빨리 세워 가설이 옳은지 그른지를 검증해야 합니다. 만약 틀렸다면, 다음 가설을 세워 다시 검증합니다. 이러한 반복 작업이 올바른 해결책으로 인도하는 길이 됩니다. 이를 위해 사용하는 것이 '이슈 트리'입니다. 이슈 트리란 가장 중요한 과제(이슈)를 출발점으로 하여, 그 가설이 올바른지, 아닌지를 'YES/NO'로 검증해 나가는 것입니다. 로직 트리가 요인(Why/Where)을 특정하는데 ..

    1. '진짜 문제' 찾기

    1. '진짜 문제' 찾기

    📌 '문제 해결'이란 무엇을 하는 것인가 Q. 문제가 일어났을 때 문제를 해결하지 못하는 이유는 무엇일까? A.바로 문제라고 생각했던 것이 실은 진짜 문제가 아니기 때문이다. ⇒즉, 무엇이 진짜 문제인지 정확히 파악하지 못하면, 정확한 해결책 또한 이끌어내지 못한다. 맥킨지에서는 '진짜 문제'를 발견하면 십중팔구 정확하게 문제를 해결할 수 있다고 한다. 많은 사람들은 문제가 발생하면 즉시 그 해결책을 찾으려하는데 그전에, 지향점 확인 무엇이 문제인지를 설정 (문제 파악) 이 두 가지를 명확히 하는 것이 중요하다. 📌문제 해결의 흐름 Step1. 문제를 정리하고 구조화하여 '진짜 문제'를 명확히 한다. 눈 앞에 일어난 일을 정리하고 구조화하여, '무엇이 문제인지,(문제 정의. 지향점 확인)' '그 문제가 ..

    4장. 내 말이 먹히기 시작하는 실전 설명의 기술

    4장. 내 말이 먹히기 시작하는 실전 설명의 기술

    4장에서는 능숙하게 설명하기 위한 몇 가지 기술과 자료 작성법 등을 소개한다. 설명력의 응용 편으로 몇 가지 방식들이 있다. 상대를 끌어당기는 '통설 BUT' 설명법 보통 알려지기로는 OO 이다(통설). 그러나(but) 실은 OO 이다. 설명 도입부에서 이렇게 제시한 후 각 요소의 설명으로 들어간다. 지금까지 이렇게 이해했겠지만, 실은 OO 이다. →'통설 But' 그것은 이런 것이다. →자세한 설명, 핵심은 최대 세 가지로 압축 예를 들면 OO 이다. →구체적인 예, 에피소드, 데이터 제시 즉 이렇다. →전체 정리 논문이 대부분 이런 형태를 취한다. 통설을 제시하고 '사실은' 이라고 하면서 내용을 전개해간다. 단, 논문에서도 통설 소개가 너무 장황하면 서론이 길어져 글이 지루해질 수가 있기 때문에 설명..

    3장. 일상생활에서 기르는 탄탄한 설명 내공

    3장. 일상생활에서 기르는 탄탄한 설명 내공

    3장에서는 일상에서 설명력을 키우는 트레이닝 방법을 소개한다. 자신의 경험과 연관지어 나만의 설명을 만든다. 어려운 내용이라도 친숙한 에피소드를 잘 곁들이면 본질이 간결하게 전해져 이해하기 쉽다. 15초 트레이닝 간결하게 설명하려면 일단 불필요한 말을 없애는 습관을 들여야 한다. 15초라는 시간은 짧은 듯하지만 설명하기에는 충분히 긴 시간이다. 그러므로 이때도 흐름을 갖춰야 한다. 빨리 끝내도 안 되고, 정보가 너무 적어도 안 된다. 15초라는 시간 동안 의미를 얼마나 담느냐가 중요하다. 15초 동안 간결하게 설명하는 방법을 익힌 다음, 그 15초 부분을 4개로 구성 하면 1분짜리 설명이 된다. 이를 테면 한 가지 핵심에 15초를 사용하는 것이다. 앞서 핵심을 세 가지로 설명하라고 했으니 이를 모두 설명..