JAVA 34

아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라

아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. //인스턴스를 만들 수 없는 유틸리티 클래스 public class UtilityClass{ //기본 생성자가 만들어지는 것을 막는다 (인스턴스화 방지용) private UtilityClass(){ throw new AssertionError(); } } 명시적 생성자가 private..

JAVA/Effective Java 2022.05.20

아이템3. private 생성자나 열거 타입으로 싱글턴임을 보증하라

아이템3. private생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴(Singleton) : 인스턴스를 오직 하나만 생성할 수 있는 클래스 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 싱글턴을 만드는 방식은 세가지가 있다. 1. public static final 필드 방식의 싱글턴 public class Elvis{ public static final Elvis INSTACNE = new Elvis(); private Elvis(){...} public void leaveTheBuilding(){...} } private 생성자는 pulic static final 필드인 Elvis.INSTANCE를 초기화할 때 딱 한번만 호출된다. public 이나 prot..

JAVA/Effective Java 2022.05.20

아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라

아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리와 생성자에 선택적 매개변수가 많을 때 1. 점층적 생성자 패턴 (telescoping constructor pattern) // 점층적 생성자 패턴 - 확장하기 어려움 public class NutritionFacts{ private final int servingSize; // (ml, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 선택 private final int fat; // (g/1회 제공량) 선택 private fianl int sodium; // (mg/1회 제공량) 선택 private fina..

JAVA/Effective Java 2022.05.20

아이템1. 생성자 대신 정적팩터리 메서드를 고려하라.

아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라. 클래스는 클라이언트에 public 생성자 대신 (혹은 생성자와 함께) 정적 팩터리 메서드를 제공할 수 있다. 정적 팩터리 메서드 (static factory method) : 클래스의 인스턴스를 반환하는 단순한 정적 메서드 (리턴값이 그 클래스의 인스턴스값인 메서드) // 정적 팩터리 메서드의 예시: 기본타입인 boolean 값을 받아 Boolean 객체 참조로 변환해준다 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 팩터리 메서드가 생성자보다 좋은 점 (= 장점) 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객..

JAVA/Effective Java 2022.05.20

Comparator/ Comparable / Sort / 내림차순

sort 메소드를 통해 내림차순에 대해서 알아보다가 여기까지왔다.. Arrays.sort(배열이름) Collections.sort(리스트이름) 위의 두 배열은 오름차순이 기본이다. 그런데 오름차순이 아닌 내림차순이 하고싶다면? Comparable / Comparator * Comparable : 기본 정렬기준을 구현하는데 사용 (ex. 오름차순 기본의 정렬 사용. sort() ) - compareTo(Object o) * Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용 -> 내림차순 정렬 혹은 다른기준으로 정렬할 때 사용 - compare(o1, o2) compare()과 compareTo()는 두 객체를 비교한다는 같은 기능을 목적으로 고안된 것. : 비교하는 객체가 같..

HashMap

HashMap은 Map을 구현했으므로 Map의 특징인 키(key)와 값(value)을 묶어서 하나의 데이터로 저장한다는 특징을 갖는다. 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보인다. HashMap은 키와 값을 각각 Object타입으로 지정한다. 키(key) : 컬렉션 내의 키 중에서 유일해야 한다. 값(Value) : 데이터의 중복을 허용한다. Set entrySet() : HashMap에 저장된 키와 값을 엔트리(키와 값의 결합)의 형태로 Set에 저장해서 반환. Object get(Object key) : 지정된 키(key)의 값(객체)를 반환. Set keySet() : HashMap에 저장된 모든 키가 저장된 Set을 반환. Collection..

ArrayList : 저장 순서가 유지되고 중복을 허용하는 컬렉션 클래스

ArrayList - 컬렉션 프레임웍에서 가장 많이 사용되는 컬렉션 클래스일 것이다. - List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다. - Object배열을 이용해서 데이터를 순차적으로 저장한다. ArrayList() : 크기가 10 인 ArrayList를 생성 ArrayList(Collection c) boolean add(Object o) void add(int index, Object element) void clear() boolean contains(Object o) Object get(int index) int indexOf(Object o) Iterator iterator() Object remove(int index) Object set(int index..

컬렉션 프레임웍 / Collection인터페이스 / List / Set/ Map

컬렉션 프레임웍 (Collections Framework) ? - 데이터 군을 저장하는 클래스들을 표준화한 설계 - 다수의 데이터(=데이터 그룹)을 표준화된 프로그래밍 방식 - JDK1.2 부터 컬렉션 프레임웍이 등장하면서 다양한 종류의 컬렉션 클래스가 추가되고, 모든 컬렉션 클래스를 표준화된 방식으로 다룰수 있도록 체계화되었다. 컬렉션 프레임웍에서는 컬렉션 데이터 그룹을 크게 3가지 타입이 존재한다고 인식하고, 3개의 인터페이스를 정의하였다 -> List / Set / Map - List와 Set의 공통적인 부분을 뽑아서 새로운 인터페이스인 Collection을 추가로 정의하였다. * 컬렉션 프레임웍의 핵심 인터페이스와 특징 List 순서가 있는 데이터 집합. 데이터의 중복을 허용한다. ex) Arra..

생성자에서 다른 생성자 호출하기/ 참조변수 this와 생성자 this()

참조변수 this 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있다. 생성자를 포함한 모든 인스턴스메서드에는 참조변수 'this'가 지역변수로 숨겨진 채로 존재한다. ex. long a, b; -> this.a, this.b 가 진짜 이름이지만 this를 생략해서 사용 가능하다. static메서드 에서는 this 사용불가하다. 인스턴스멤버만 this를 사용할 수 있다. 생성자와 모든 인스턴스메서드 내에서 사용가능하다. this(), this(매개변수) - 생성자. 같은 클래스의 다른 생성자를 호출할 때 사용한다. * this와 this()는 비슷하게 생겼을 뿐 완전히 다른 것이다. this는 '참조변수'이고 this()는 '생성자'이다. this : 인스턴스 자신을 가리키는 참조변수. ..

생성자 ( Constructor) / 기본생성자/ 매개변수가 있는 생성자

생성자 ? 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드' - 인스턴스 초기화 : 인스턴스 변수들을 초기화 하는 것 생성자의 조건 1. 이름이 클래스 이름과 같아야 한다. 2. 리턴값이 없다. (void 안붙임) 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있다. 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. 생성자는 단순히 인스턴스변수들의 초기화에 사용되는 특별한 메서드일 뿐이다. Card c = new Card(); Card클래스의 인스턴스를 생성하는 코드의 수행되는 과정은 단계별로 아래와 같다. 1. 연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다. 2. 생성자 Card()가 호출되어 수..