[Java] Stream API
·
Java
Stream API 개요Stream API의 등장 배경자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성해야 함→ 가독성, 재사용성 떨어짐..⇒ 이러한 문제점을 극복하기 위해서 Java SE 8부터 스트림(stream) API를 도입스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공함→ 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있게 됨.Stream API의 특징스트림은 외부 반복을 통해 작업하는 컬렉션과는 달리 내부 반복을 통해 작업을 수행함.스트림은 재..
[Java] Lambda Expression
·
Java
람다 표현식(Lambda Expression)람다 표현식이란 간단히 말해 메소드를 하나의 식으로 표현한 것메소드를 람다 표현식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 메소드를 사용할 수 있음.익명 클래스: 단 하나의 객체만을 생성할 수 있는 클래스자바라는 언어 특성상 모든 메소드는 객체 안에 있어야 함⇒ 자바에서 람다 표현식은 익명 클래스의 객체와 같다고 할 수 있음.// 람다 표현식 = 사실상 객(x, y) -> x 이러한 람다 표현식은 메소드의 매개변수로 전달될 수도 있으며, 메소드의 결괏값으로 반환될 수도 있음 (결국은 객체니까)람다 표현식을 사용하면, 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높여줌→ 함수형 프로그래밍 가능람다 표현식 작성화살표(->) 기호를 사용하..
[Java] 자바 컬렉션 프레임워크
·
Java
Collections framework컬렉션(collection)여러 객체(데이터)를 모아 놓은 것을 의미프레임웍(framework)표준화, 정형화 된 체계적인 프로그래밍 방식컬렉션 프레임웍(collections framework)컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스 제공java.util 패키지에 포함. JDK1.2부터 표준화되어 제공.컬렉션 클래스(collection class)다수의 데이터를 저장할 수 있는 클래스(예. Vector, ArrayList, HashSet)Collection Framework의 핵심 인터페이스List순서가 있는 데이터의 집합, 데이터의 중복 허용구현 클래스: ArrayList, LinkedList, ..
[Java] 자바 API 클래스
·
Java
Object 클래스모든 클래스의 최고 조상 클래스로, 모든 Java 클래스는 Object를 상속받음오직 11개의 메소드만을 가지고 있음notify(), wait() 등은 쓰레드와 관련된 메소드clone() 메소드는 단지 필드의 값만 복사하므로, 필드가 배열이나 객체인 경우 제대로 복제되지 않음. 이를 위해 해당 클래스에서 clone() 메소드 오버라이딩 필요protected로 표시된 메소드는 오버라이딩이 필요equals()는 객체 자신과 주어진 객체를 비교하며, 기본적으로 객체의 주소를 비교함. 따라서 객체의 인스턴스 변수 값을 비교하려면 equals()를 오버라이딩 필요hashCode()는 객체의 해시코드를 반환함. equals()를 오버라이딩하면, hashCode()도 오버라이딩해야 함. equals..
[Java] 예외 처리
·
Java
오류의 종류컴파일 에러(compile-time error)프로그램을 컴파일할 때 발생하는 에러로, 컴파일러가 코드의 문법 및 타입 오류를 감지함.종류구문 에러: 문법적으로 잘못된 코드 (예: 세미콜론 누락).타입 체크 에러: 데이터 타입이 맞지 않을 때 발생 (예: 문자열과 숫자 연산 시도).컴파일 최적화 실패: 컴파일러가 코드를 최적화하는 과정에서 발생.런타임 에러(runtime error)프로그램 실행 중 발생하며, 프로그램이 비정상적으로 종료됨.예시NullPointerException: null 참조를 호출할 때 발생.ArrayIndexOutOfBoundsException: 배열의 범위를 벗어난 인덱스를 접근할 때 발생.ArithmeticException: 0으로 나누기.논리적 에러(logical ..
[Java] 자바 기본 개념 정리 (기본 문법 제외)
·
Java
상속(Inheritance)기존의 클래스로 새로운 클래스를 작성하는 것 = 코드의 재사용두 클래스를 부모와 자식으로 관계를 맺어주는 것class 자식 클래스 extends 부모클래스 { // ... }자식은 조상의 모든 멤버를 상속받는다. (생성자, 초기화 블럭 제외)자손의 멤버 개수는 조상보다 적을 수 없음. (같거나 많다.)자손의 변경은 조상에 영향을 미치지 않는다.포함 관계포함(composite)클래스의 멤버로 참조변수를 선언하는 것작은 단위의 클래스를 만들고, 이들을 조합해서 클래스를 만든다// 이건 아무 관계 xclass Circe { int x; int y; int r;}// 이건 포함 관계class Circle { Point c = new Point(); in..
[Java] Garbage Collection
·
Java
Garbage Collection 개념가비지 컬렉션(Garbage Collection, GC): 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스가비지 컬렉터가 없어 수동으로 메모리 할당과 해제를 해주어야 하는 C/C++과 달리, Java는 가비지 컬렉터가 메모리 관리를 대신 수행해줌=> 메모리 누수(Memory Leak) 문제에서 대해 관리없이 개발에만 집중 가능가비지 컬렉션(GC)이 한번쓰이고 버려지는 객체들을 주기적으로 비워줌 => 한정된 메모리를 효율적으로 사용 가능단점메모리가 언제 해제되는지 정확하게 알 수 없어 제어하기 힘듦Stop-The-World(STW..
[Java] JVM / JRE / JDK
·
Java
컴파일 언어와 인터프리트 언어 컴파일 언어와 인터프리트 언어는 프로그래밍 언어를 실행하는 방식이 다르다.컴파일 언어'컴파일러(compiler)'를 사용하여 소스 코드를 기계어로 번역한 후 실행 파일을 만들고, 이를 실행컴파일러(compiler): 고급 언어로 작성 된 소스 코드를 저급 언어로 번역하는 프로그램고급 언어: 사람이 이해하기 쉽도록 작성된 프로그래밍 언어 ex) C, C++, Java, Python, ..저급 언어: 컴퓨터 내부에서 바로 처리 가능한 프로그래밍 언어. ex) 기계어, 어셈블리어 등대표적인 컴파일 언어: C, C++, Java장점: 실행 속도가 빠르고, 실행 파일이 독립적으로 동작 가능딘점: 컴파일 과정이 번거롭고, 플랫폼 의존성이 있음플랫폼 의존성이란, A라는 OS에서는 동작하..
[Java] Annotation
·
Java
애노테이션 정의애노테이션은 해석 가능한 주석이라고 생각하면 편하다. 일반 주석과 달리, 애노테이션은 컴파일러나 런타임에서 해석될 수 있는 메타데이터를 제공한다. 즉, 애노테이션은 코드에 메모를 달아놓는 것처럼 특정 정보나 지시를 추가하는 도구로, 코드에 대한 메타데이터를 표현하는 방법이다.=> 애노테이션은 코드에 대한 추가적인 정보를 주석처럼 달아놓는 것이고, 이는 컴파일러나 런타임에 사용된다예시 코드@Retention(RetentionPolicy.RUNTIME)public @interface AnnoElement { String value(); int count() default 0; String[] tags() default {}; //MyLogger data(); // 다른 타입은 적용X ..
[Java] Reflection
·
Java
Reflection(리플렉션)이란?: 클래스가 제공하는 다양한 정보를 동적으로 분석하고 사용하는 기능=> 리플렉션을 통해 프로그램 실행 중에 클래스, 메서드, 필드 등에 대한 정보를 얻거나, 새로운 객체를 생성하고 메서드를 호출하며, 필드의 값을 읽고 쓸 수 있다리플렉션을 통해 얻을 수 있는 정보클래스의 메타데이터(metadata); 클래스 이름, 접근 제어자, 부모 클래스, 구현된 인터페이스 등필드 정보: 필드의 이름, 타입, 접근 제어자를 확인하고, 해당 필드의 값을 읽거나 수정 가능메서드 정보: 메서드 이름, 반환 타입, 매개변수 정보를 확인하고, 실행 중에 동적으로 메서드를 호출 가능생성자 정보: 생성자의 매개변수 타입과 개수를 확인하고, 동적으로 객체 생성 가능클래스 메타데이터클래스 메타데이터 ..