
int가 들어오면 아무거나 받기 때문에 너무 범용적이다.값을 제한할수가 없다.과일의 종류가 변경될 때 문제를 찾는 시점이 프로그램을 찾는 도중이다.enumeration을 사용하면 컴파일 타임에 알 수 있다.클라이언트 코드바이트코드APPLE_PIPPIN이 1이라서 ICO

ENUM은 순서의 기반대로 하는걸 알아야 되기 때문에 잘 모르고, ALPHABET 순서대로 하고 싶다라고 바꾸면 큰일이 나게 된다.그래서 안티패턴이다.필드와 메서드를 통해서 표현하는게 좋다.

낯선 코딩 기법이고 실수할 수 있다.|은 추가가 되는 것이다.&연산은 각각 자기 자신이 나오게 되어있다. &연산은 뭔가를 담고 있는지 확인 할 때 주로 사용을 한다.XOR은 같은 자리가 1과 0 일 때 1이다.NOT은 비트를 반대로 뒤집어준다.allOf는 모든 걸 담아

stream을 사용하면 짧게 사용할 수 있다. stream을 사용하면 EnumMap을 사용하지 않는다. HashMap을 사용한다.그렇게 하지 않으려면 맵을 만들어주고, Set으로 담는다.없는 종류는 EnumMap을 만들어주지 않아서 더 효율적이다.ordinal을 사용해

enum이 확장된게 아니다. 그냥 Operation을 상속받아서 다른 "%"인 경우의 Operation을 쓸수도 있다 이런 뜻이다.BasicOperation으로 해도 다음과 같이 실행가능하다.

@Tests인 경우 실행이 안된다.테스트가 실행되는 도중에 어떠한 예외를 발생시키고 싶다고 하면 testThrowException.... 등으로 모든 매개변수를 표현하는 것은 쉽지 않다.명명패턴을 이용해서 개발을 한다.애노테이션을 정의해서 사용하는 것을 권장한다.리플렉

Override를 활용하려면 override를 제대로 사용해야 한다.hashcode가 없기 때문에 override를 사용하지 않는다.같은 애들이 많이 들어가 있다.애플리케이션을 실행했을 때 알게 되었기 때문에 별로 좋지가 않다.재정의 하는 경우에는 일관되게 Overri


재정의할 객체가 하나인 경우 함수객체라고 한다. 해당 함수 객체를 함수형 인터페이스와 람다를 사용가능하다.인터페이스를 구현할 클래스나 인스턴스가 구현해야 될 게 딱 하나인 경우에는 함수형 인터페이스라고 볼 수가 있다.이전 코드이후 코드this는 new Comparato


type이 1개이다.이것도 가능하다.unary는 인자로 받는게 딱 하나다라는 의미이다.Binary에서는 인자로 받는게 2개라는 것이다.Predicate는 boolean으로 받는다.입력이 같지 않은 경우에는 Function으로 정의가 가능하다.인자가 없고 값을 retur

너무 복잡해진다.이렇게 하면 적절하게 사용할 수 있다.중간 연산(intermediate operations) 과 종단 연산(terminal operation)https://docs.oracle.com/javase/8/docs/api/java/util/strea

외부에 있는 것을 사용하기 때문에 위에꺼는 적절하지 않다.

이렇게는 되지만 이렇게는 안되고이렇게 붙여주면 된다.결국에 저 함수가 맨 위에 잇는 함수와 동일하다.위 2개는 알아서 보기.

limit이나 iterate를 Serializable이 필요하기 때문에 parallel이 적절하지 않다.limit은 전체를 순환한 후에 가져오기 때문에 너무 느리다. 병렬적으로 분해되는 데이터 소스가 아니다.그래서 parallel을 잘못 쓰면 더 느려진다.array는

처음에 검사를 다 하고 실행시키는 것이 낫다.if(name == null){ throw new NullPointerException("error");}보다 requireNonNull도 좋다고 한다.정상적인 것만 들어올 가정을 하고 있어서 value가 정상적일 때만 가져

Date라는 객체가 변경이 가능한 객체다.외부에서 값의 변경이 가능해진다.방어적 복사를 한다.setYear은 Period가 제공해 준 메서드가 아닌데 외부에서 바뀐게 period에 적용이 되어 버렸다.이렇게 new Date로 해서 넘겨준다.이렇게 하면 둘다 78년으로

편의성 메서드를 너무 만들지 말자.너무 많은 매개변수를 많이 하면 헷갈린다.Order라는 매개변수를 하나 만들어서 매개변수가 줄어들었다.빌드 패턴을 사용해서 필수값, optional값을 검증할 수 있다.매개변수에서 인터페이스를 넣어서 가져와라 boolean 보다는 en

실제 인스턴스 타입은 무시가 되고 실제 부를 때 사용한 Collection 타입으로만 실행이 된다.각자 자기 자신이 구현한 것을 가져온다. 오버라이딩이다.오버로딩은 작성하고 있는 컴파일 타입의 코드로 정의가 된다.매개변수 수가 같을 때는 다중정의를 만들지 않는다.가변인

인수가 비워있어도 되냐?뭔가 하나를 받아야 된다면 별개의 매개변수에 넣는 것이다.가변인수를 쓰는게 성능에 문제가 있을 수 있다.

비어있으면 null을 return하는게 아니라 비어있는 Collections를 리턴한다.이렇게 할 수도 있다.null을 return하는 코드를 만들면 불편하다.

없을 경우에는 Optional.empty()를 주고, 잇는 경우에는 Optional.of에다 넣어준다.null이 들어가는 경우 Optional.ofNullable로 사용가능하다.에러를 나오게 하려면 orElseThrow를 사용할 수도 있다.반드시 값이 있을 것이라 믿으

사이드 이펙트도 같이 기술한다.조회하는 용도의 메서드랑, 데이터를 변경하는 메서드랑은 룰을 좀 분리해서 쓰면 좋다.제네릭 타입에 대해서도 문서를 남겨라T가 입력받는 타입, P가 리턴되는 타입열거형도 주석을 남겨라.상수와 모든 필드에도 주석을 달아라.패키지에다가도 주석을