본문 바로가기

Java18

Java | 인스턴스화를 막으려거든 private 생성자를 사용하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심의도치 않게 클래스가 인스턴스화 되는 것을 막기 위해서는 prviate 생성자를 추가해라 이유추상 클래스로 만든다고 하더라도 하위 클래스를 만들어 인스턴스화 하면 같은 문제가 생긴다. 관련 코드 및 예시// 기본 생성자가 만들어지는 것을 막기 위함public class ExampleClass { private ExampleClass() { throw new AssertionError(); }}주석을 다는 것도 좋은 방법이다. 2024. 7. 4.
Java | private 생성자나 열거 타입으로 싱글턴임을 보증하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다.핵심열거 타입 방식의 싱글턴 - 바람직한 방법원소가 하나인 열거 타입을 선언하자. 이유싱글턴(sigleton)이란?인스턴스를 오직 하나만 생성할 수 있는 클래스클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려워진다.싱글턴을 만드는 방식private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련한다.장점명백히 싱글톤임이 들어남간결함 ... public static final Elvis INSTANCE = new Elvis(); ...정적 팩터리 메서드를 public static 멤버로 제공API를 바꾸지 않고도 싱글턴이 .. 2024. 7. 4.
Java | 생성자에 매개변수가 많다면 빌더를 고려하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다. 핵심생성자나 정적 팩터리가 처리해야 할 매개 변수가 많다면, 빌더 패턴을 선택하는 것이 낫다.매개변수 중 다수가 필수가 아니거나 같은 타입이라면 특히 더 그렇다. 빌더는 점층적 생성자보다 클라이언트 코드를 읽고 쓰기 훨씬 간결하고, 자바빈즈보다 훨씬 안전하다. 이유1. 점층적 생성자 패턴도 쓸 수 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다.점층적 생성자 패턴은 생성자에 매개변수를 점차 늘려가며 필요한 생성자를 사용하는 것2. 자바빈즈 패턴 - 일관성이 깨지고, 불변으로 만들 수 없다.자바빈즈 패턴은 매개변수가 없는 생성자로 객체를 만들고 setter로 메서드.. 2024. 7. 4.
Java | 생성자 대신 정적 팩터리 메서드를 고려하라 (Effective Java 3/E - joshua bloch) 해당 글은 이펙티브 자바 (Effective Java 3/E - joshua bloch) 를 읽고 정리한 글입니다.핵심정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적으로 장단점을 이해하고 사용할 것.그러나 정적 팩터리를 사용하는 게 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관은 고치자. 이유1. 이름을 가질 수 있다.반환될 객체의 특성을 쉽게 묘사2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.이로인해 불변 클래스(Immutable class)는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성 피함플라이웨이트 패턴(Flyweight pattern)과 비슷한 기법인스턴스 통제(Instance-co.. 2024. 7. 4.
Java | Stream에 대하여 Stream에 대해서 설명해주세요. 스트림(Stream) 자바8에 새롭게 추가된 기능으로, 선언형으로 데이터(컬렉션, 배열, 파일, iterate...)를 처리할 수 있습니다. Stream을 사용하면 데이터를 쉽게 필터링, 변환, 집계할 수 있습니다. Stream은 병렬처리가 가능하도록 설계되었으므로 멀티 코어 프로세서를 활용하여 처리 속도를 높일 수 있습니다. Stream의 특징 Stream은 데이터 구조가 아닙니다. Stream은 데이터를 저장하지 않습니다. Stream에서 요소를 추가하거나 제거할 수 없습니다. Stream은 생성, 중간, 최종 작업으로 나뉩니다. 아래에서 더 자세히 알아보겠지만, 대부분의 Stream 작업은 또 다른 새 Stream을 반환하며 함께 연결되어 작업 파이프 라인을 형성.. 2023. 8. 28.
Java | interface와 abstract class차이에 대해서 설명해주세요. interface와 abstract class차이에 대해서 설명해주세요. 추상 클래스(abstract class) 추상 클래스(abstract class) abstract 키워드로 선언된 클래스 하나 이상의 추상 메서드를 포함하는 클래스 반드시 사용되어야 하는 메서드를 추상 클래스에 추상 메서드로 선언해 놓으면, 해당 클래스를 상속받는 모든 클래스에서는 이 추상 메서드를 반드시 재정의해야 한다. 추상 메서드(abstract method) 정의: 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드 오버라이딩(Overriding): 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메서드로 다시 정의하는 것 문법 abstract class 클래스이름 { .. 2023. 8. 28.