✔️ Stream Stream이란? 데이터를 다루는데 자주 사용되는 메소드 정의로, 컬렉션 타입의 데이터를 Stream 메소드에서 내부 반복을 통해 정렬, 필터링 등을 할 수 있음 내부 반복을 사용하여 반복 처리를 진행하기 때문에 불필요한 코딩 과정을 줄일 수 있어 코드의 가독성이 향상됨 병렬 처리에 유리하며 원본 데이터의 변경이 불가능함 중간 연산과 최종 연산이 존재 파이프라이닝이 가능한 중간 연산 : filter, map, flatMap, limit 등 스트림을 닫는 최종 연산 : allMatch, findFirst, collect, count 등 중간 연산을 여러 개 작성 시 모두 합쳐서 진행한 후 합쳐진 연산을 최종 연산에서 한 번에 처리함 저장된 데이터를 꺼내서 처리하는 용도이므로 최종 연산이 ..
✔️ Lambda Lambda란? 메소드를 하나의 식으로 표현한 것 매개변수, ->, {} 구조로 이루어지며 메소드의 매개변수로 전달할 수도 있고, 메소드 결과로 반환할 수도 있음 인터페이스 내에 한 개의 추상 메소드만 정의하는 함수형 인터페이스를 통해서만 사용이 가능함 예) Compartor, Runnuable 람다를 이용하면 기존에 익명 함수로 작성하던 코드를 줄여 간단하게 작성이 가능해 가독성이 증가하고 병렬 프로그래밍에 용이 하지만 남용할 경우 코드를 이해하는데 어려우면 재귀 활용과 디버깅에 까다로움 컴파일러는 invokedynamic을 사용해 람다 표현식 구현을 위한 코드 생성을 런타임 시까지 연기한 후, 런타임 시 어떤 방법으로 객체를 생성할지 결정하는 성능 향상을 위한 최적화된 방법을 사용해..
✔️ 어노테이션 어노테이션이란? 본래 주석이라는 뜻으로 인터페이스를 기반으로 한 문법 주석과는 그 역할이 다르지만 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있음 어노테이션에는 크게 세 가지 종류가 존재 JDK에 내장되어 있는 어노테이션인 Build-In Annotation 어노테이션에 대한 정보를 나타내기 위한 어노테이션인 Meta Annotation 개발자가 직접 만들어 내는 어노테이션인 Custom Annotation
✔️ 컬렉션 프레임워크 컬렉션 프레임워크란? 객체들을 관리하기 위해 사용하는 컨테이너 클래스들의 집합 컨테이너 클래스들의 종류는 크게 List, Set, Queue, Map 계열로 구분하며 각 계열에 따라 객체들을 저장하고 관리하는 방식의 차이가 있음 다수의 데이터를 다루는데 표준화된 클래스들을 제공해주기 때문에 데이터 구조를 직접 구현하지 않고 편하게 사용할 수 있음 또한 배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않아도 되므로 상황에 따라 객체의 수를 동적으로 정할 수 있어 프로그램의 공간적 효율성을 높여줌 Collection List 저장 요소를 순차적으로 관리하며 중복된 값과 null 값을 요소로 가질 수 있음 요소에 대해 인덱스를 통해 접근함 List 인터페이스를 구현한 대표 클래스..
✔️ 제네릭 제네릭이란? 모든 종류의 타입을 다룰 수 있도록 일반화된 타입 매개 변수로 클래스나 메서드를 선언하는 기법 컴파일 과정에서 타입 체크를 해주는 기능을 가지므로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에서 사용 특정 객체만 추가될 수 있도록, 또는 특정한 클래스의 특징을 갖고 있는 경우에만 추가될 수 있도록 해주므로 내가 원하는 값인지 별도의 로직 처리를 구현할 필요가 없어짐 제네릭을 사용하기 위해서는 Wrapper 클래스를 사용해야 함
✔️ 캐스팅 캐스팅이란? 타입을 변환하는 형변환을 뜻하며 이때, 상속 관계에 있는 부모와 자식 클래스 간에서 서로 형변환이 가능함 캐스팅을 통해 오버라이딩된 함수를 분리해서 사용할 수 있으며, (다형성) 범용적인 프로그래밍이 가능함 (상속) 업캐스팅 (묵시적 형변환) 자식(서브) 클래스가 부모(수퍼) 클래스 타입으로 캐스팅 되는 것 부모(수퍼) 클래스의 참조변수는 자식(서브) 클래스로 객체화된 인스턴스를 가리킬 수 있게 됨 캐스팅이 자동으로 발생함 Parent p = new Child(); // Parent를 상속받은 Child는 Parent의 속성을 포함하므로 (Parent) new Child()할 필요가 없음 다운캐스팅 (명시적 형변환) 부모(수퍼) 클래스가 자식(서브) 클래스 타입으로 캐스팅 되는..
✔️ Wrapper class (오토 박싱 & 언박싱) Wrapper 클래스란? 기본 자료형에 대한 클래스 표현을 Wapper 클래스라고 함 산술 연산을 위한 클래스가 아니기 때문에 불변하므로 값에 대한 변경이 불가능하고 새로운 객체의 할당이나 참조만 가능함 객체로 저장해야 하는 경우 매개변수로 객체가 요구될 경우 객체 간의 비교가 필요할 경우 제네릭이나 컬렉션에서 사용하는 경우 null 값을 반환해야만 하는 경우 하지만 위와 같은 상황을 제외하고 일반적인 상황에서는 Wrapper 클래스를 사용해야 하는 이유가 없음 자바에는 기본 타입과 Wrapper 클래스가 존재함 기본 타입 : byte, short, int, long, float, double, char, boolean Wrapper 클래스 : By..
✔️ 오브젝트 클래스 오브젝트 클래스란? Java의 최상단 클래스 자바의 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 암시적으로 오브젝트 클래스를 상속하게 됨 따라서 자바의 모든 클래스는 오브젝트 클래스의 자식이거나 자손 클래스가 됨 오브젝트 클래스는 필드가 없고 메소드로 구성되어 있으며 이 메소드들은 모든 클래스들이 오브젝트 클래스를 상속하므로 모든 클래스에서 이용할 수 있음 오브젝트 클래스가 가지고 있는 메서드 equals()은 객체를 비교해 두 객체가 동일한 객체라면 true, 그렇지 않으면 false를 반환함 하위 클래스에서 재정의하여 논리적으로 동일한 데이터를 저장하고 있는지 동등 비교에 사용할 수 있음 hashCode()는 객체의 메모리 번지를 이용해서 객체를 식별..