지금까지 인스턴스를 생성할 때 생성자만 사용했던 것 같다. 사실 이 책을 읽으면서 정적 팩토리 메소드를 처음 접해서 두 개의 차이를 먼저 구분해보고자 한다.
Item6 시작해보자~! 불필요한 객체 생성을 피하라! 요리조리똑같은 기능의 객체를 매번 생성하기 보단 객체 하나를 재사용하는 편이 좋다.위의 코드는 실행될 때마다 String 인스턴스를 새로 생로 생성한다. 수 백만개 인스턴스 생성될 가능성 있다.위 코드는 매번 인스
equals 메소드를 정의하기 생각보다 쉽지 않다. 재정의하지 않는 것이 최선이지만 재정의가 필요한 상황에서는 아래 가이드에 따라 정의해보자!값을 표현하는 것 아니라 동작하는 개체를 표현하는 클래스일 경우ThreadObject.equals()Bean에 등록해두는 객체
clone이 뭘까...? git clone도 아니고.복제해도 되는 클래스임을 명시하는 믹스인 인터페이스💡믹스인 : 다른 클래스의 부모클래스가 되지 않으면서 다른 클래스에서 사용할 수 있는 메서드를 포함하는 클래스'상속' 이 아닌 '포함'clone 메소드: 원본 객체의
💡 상속 : 하위 클래스가 상위 클래스의 특성을 재정의 한 것 (IS-A 관계)💡 컴포지션 : 기존 클래스가 새로운 클래스의 구성요소가 되는 것 (HAS-A 관계) 상속은 캡슐화를 위반한다.상속은 설계에 유연하지 못하다.상속은 다중 상속이 불가능하다.상위 클래스가
추상 클래스와 인터페이스 추상 클래스와 인터페이스를 한 번 알아보자! > 💡 추상 클래스 : 일부 메소드가 구현되어있지 않고 선언만 되어있는 클래스, 상속을 통해서 클래스를 완성하도록 유도하는 클래스 > 💡 인터페이스 : 동일한 목적하에 동일한 기능을 수행하게끔
💡 제네릭(Generic) : 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 뜻제네리은 java
배열공변 (conariant)Sub가 Super의 하위 타입이라면 배열은 Sub\[] 은 배열 Super\[]의 하위 타입이 된다.즉, 함께 변한다.배열은 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 있다.컴파일에는 아무런 영향을 끼치지 않지만 런타임시 Arra
💡 타입 안전 이종 컨테이너 (Type Safe Heterogeneous Container) : 여러 다른 종류들로 이루어진 값을 저장하는 타입에 안전한 객체컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공\-> 이렇게
💡 해당 상수가 그 열거 타입에서 몇 번째 위치하는지 반환하는 메소드배열은 제네릭과 호환되지 않기 때문에 비검사 형변환이 수행되고, 컴파일이 안된다.초기화를 할 때, 정수 값을 잘못 입력하면 ArrayIndexOutOfBoundException이 발생한다.orinal
💡 람다 : 익명 메소드만 전달하여, 인터페이스르 구현한 익명 클래스의 인스턴스를 생성하는 방법, 메소드만 전달하지만, 결과적으로 익명 구현 객체를 만듬💡 익명 클래스 : 추상 클래스를 상속하거나 인터페이스를 구현한 이름 없는 클래스, 재사용이 필요없는 인스턴스를
Java8에서 추가된 기능으로 컬렉션 데이터를 선언형으로 쉽게 처리할 수 있고 병렬처리를 별도의 멀티 스레드 없이 쉽게 구현할 수 있게 도와준다.Stream은 반복을 지원하지 않는다.Iterable의 추상 메소드를 모두 구현하고 있지만 정작 extand는 하고 있지 않