일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Sort
- 선형자료구조
- 알고리즘잡스
- basic data-structure
- 개념
- 정렬
- 큐
- Advanced Sort
- 고급정렬
- Simple Brute-Force Algorithm
- 완전탐색
- binary search
- heap
- 동적계획법
- 우선순위 큐
- hint
- 내돈후기
- 이진탐색
- 기본자료구조
- Divide and Conquer
- Stack
- 매개 변수 탐색
- Adv. recursive function
- 깊이우선탐색
- 힙
- 간단한 완전탐색
- 스택
- parametric search
- Queue
- dfs
- Today
- Total
목록스터디/이펙티브 자바 (20)
루시와 프로그래밍 이야기
※가변인수란? https://sleepyeyes.tistory.com/29 JDK1.5부터 매개변수의 개수를 동적으로 지정해 줄 수 있게 되었는데 이 기능을 가변인자(variable argument)라고 한다. 가변인자는 내부적으로 배열을 생성해서 사용한다! 가변인수 메서드 가변인수(varargs) 메서드와 제네릭은 함께 사용이 어렵다. 가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해준다. 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어진다. 그런데 내부로 감춰야 했을 이 배열을 클라이언트에 노출시키는 문제가 생겼다. 그 결과 varargs 매개변수에 제네릭이나 매개변수화 타입이 포함되면 알기 어려운 컴파일 경고가 발생한다. static void da..
매개변수화 타입은 불공변(invariant)이다. 서로 다른 타입 Type1과 Type2가 있을 때 List은 List의 하위 타입도 상위 타입도 아니다. List은 List가 하는 일을 제대로 수행하지 못하니 하위 타입이 될 수 없다. (리스코프 치환 원칙에 어긋난다.) ITEM10 때로는 불공변 방식보다 유연한 방식이 필요하다. Stack의 API public class Stack { public Stack(); public void push(E e); public E pop(); public boolean isEmpty(); } 여기에 일련의 원소를 스택에 넣는 메서드를 추가 public class Stack { public void pushAll(Iterable src) { for (E e : s..
메서드도 제네릭으로 만들 수 있다. 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제너릭이다. Collections의 알고리즘 메서드 (binarySearch, sort 등)는 모두 제너릭이다. 로타입 사용 X (ITEM26) ※로타입이란? 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않았을 때 Set 를 제네릭타입 Set로만 선언하여 사용했을 경우 로타입 class Example { public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } } Unchecked call to 'HashSet(Collection
JDK가 제공하는 제네릭 타입과 메서드를 사용하는 일은 일반적으로 쉬운 편이지만, 제네릭 타입을 새로 만드는 일은 조금 더 어렵다. Object 기반 스택 "Generic이 절실한 강력 후보! 스택!" public class Stack { private Object[] elements; private mnt size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() ..
https://codingwell.tistory.com/96 compareTo는 Object의 메서드가 아니다 두가지 성격만 빼면 Object의 equals와 같다 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하다. Comparable을 구현했다는 것은 그 클래스의 인스턴스들에 자연적인 순서(natural order)가 있음을 뜻한다. 그래서 Comparable을 구현한 객체들의 배열은 손쉽게 정렬할 수 있다. Array.sort(a); 규약 순서를 비교할 때 이 객체가 주어진 객체보다 작으면 음의정수(-1), 같으면 (0), 크면 양의정수(+1) 반환 비교할 수 없는 타입의 객체가 주어지면 ClassCastException 을 던짐 1) x.compareTo(y) == -y.compare..
clone 규약 더보기 https://jaehun2841.github.io/2019/01/13/effective-java-item13/#Cloneable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%8A%94-%EB%AC%B4%EC%8A%A8%EC%9D%BC%EC%9D%84-%ED%95%A0%EA%B9%8C x.clone() != x은 참이다. 복사한 객체와 원본 객체는 서로 다른 객체이다. x.clone() .getClass() == x.getClass()은 일반적으로 참이다. 하지만 반드시 만족해야 하는 것은 아니다. x.clone.equals(x) 은 참이다. 복사한 객체와 원본객체는 논리적 동치성이 같다. x.clone().getClass() == x.g..
toSting Default : PhoneNumber@adbbd (클래스_이름@16진수로_표시한_해시코드) toString 규약 : 모든 하위 클래스에서 이 메서드를 재정의하라 toString를 잘 구현한 클래스는 사용하기 훨씬 좋고, 디버깅하기 쉽다. 객체가 가진 중요 정보 모두를 반환하는게 좋다. 포맷을 명시하든 아니든 여러분의 의도는 명확히 밝혀야 한다 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자 package effectivejava.chapter3.item12; // PhoneNumber에 toString 메서드 추가 (75쪽) public final class PhoneNumber { private final short areaCode, prefix, line..
Object 명세 규약 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야한다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다. equals(Object)가 두 객체를 다르다고 판단했더라도, 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해야 해시 테이블의 성능이 좋아진다. hashCode hashCode 재정의를 잘못했을 떄 크게 문제가 되는 조항은 두 번째다. 논리적으로 같은 객체는 같은 해시..