본문 바로가기
반응형

java24

Effective Java : (5) Singleton 생성 방식 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어렵습니다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜 구현으로 대체할 수 없기 때문입니다. [1] public static final 필드 방식의 싱글턴의 예 입니다. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuilding() { ... } } 위 방식은 INSTANCE를 초기화할 때 딱 한번만 호출됩니다. public, protected 생성자가.. 2020. 4. 24.
Effective Java : (4) Builder Pattern 정적 팩터리와 생성자에는 똑같은 제약이 있습니다. 선택적 매개변수가 많을 때 적절하게 대응하기가 어렵다는 점입니다. 첫 번째 대안으로, 점층적 생성자 패턴(telescoping constructior pattern)을 주로 사용하게 됩니다. 그러나 매개변수가 많고, 인자로 전달하기 원치 않는 변수가 있을 때 혼란을 초래합니다. 다음과 같이 어떤 한 생성자를 선택하여 객체를 생성했다고 봅시다. NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 27); 네 번째 인자는 지방을 의미하는 인자를 전달해야하는데, 굳이 전달 할 필요가 없지만 0을 전달하였습니다. 또한, 각 매개변수가 어떤 것을 뜻하는지 한 눈에 파악하기 어렵습니다. 두 번째 대안으.. 2020. 4. 24.
Effective Java : (3) Construction Injection 의존성을 주입할 때, Field Injection을 권장하고 있지 않습니다. 대신 Construction Injection을 권장합니다. 또한, IntelliJ에서 Field Injection은 Warnning으로 감지합니다. public class Testclass { @Autowired // -> Warnning 발생 private ClassName claseVariable; public Testclass() { } } 단일 책임의 원칙 Field Injection은 의존성을 주입하기 쉽습니다. @Autowired Annotation만 선언하면 여러 개의 변수를 쉽게 나열할 수 있습니다. Constrction Injection을 사용하면 생성자에 파라미터가 많다는 것을 느끼고, 리팩토링을 자연스럽게 .. 2020. 4. 24.
Effective Java : (2) 정적 팩터리 메서드 다음 사항을 관리하는 방법에 대해 설명합니다. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 방법 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법 제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업 생성자 대신 정적 팩터리 메서드를 고려하라 클래스는 클라이언트에 public 생성자 대신 정직 팩토리 메서드를 제공할 수 있다. 장점은 다음과 같다. 1. 이름을 가질 수 있다. BigInteger(int, int, Random)와 BigInteger.probablePrime 중 값이 소수인 BigInteger를 반환의 의미를 더 갖고 있는가 ? 클래스를 설명하는 문서를 참고하지 않다고 쉽게 의미부여를 할 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 인스턴스를 .. 2020. 4. 24.
Java에서 자주 사용하는 lamda식 문법 저는 Java에서 Lamda를 자주 사용하는 편입니다.. Front End 개발을 한 동안 하면서 Lamda식 문법이 헷갈려서 한 곳에 정리를 하려 합니다. List 를 Map 으로 변환 Map의 Value에 Instance를 그대로 넣고 싶을 때는 Function.identy()를 사용합니다. public Map convertLitToMap(List objectList) { return objectList.stream().collect(Collectors.toMap(InstanceNm:getId, Function.identy(), (v1, v2) -> v1, HashMap::new)); } 2020. 4. 24.
Effective Java : (1) 소개 C언어 개발자로 신입으로 입사하여 2년을 보낸 후, JAVA 개발자로 전환하여 어느덧 3년이 지났습니다. 이 시기에 필도서로 꼽히는 Effective Java를 읽으며서 한 층 더 앞으로 도약하고자 합니다. Java의 아버지인 제임스 고슬링(James Gosling)이 말했다. 자바는 '아주 단순한' '노동자용 언어' 다. C++의 아버지인 비아네 스트롭스트룹(Bjarne Stroustrup)이 말했다. C++는 '한 가지 방식만 지원하도록 고안된 언어들과는 현격히 다른' '다중-패러다임 언어' 다 그리고 그는 초창기 Java를 보고 이렇게 말했다. 갓 탄생한 언어 대부분이 그렇듯, 자바가 상대적으로 간결해 보이는 이유는 어느 정도는 허상이도 어느.. 2020. 4. 24.
반응형