Java 입출력 스트림 Java I/O는 스트림(stream)을 기반으로 작동합니다. 스트림은 데이터를 순차적으로 처리하는 연속적인 데이터 흐름을 의미하며, Java에서는 java.io 패키지를 통해 다양한 입출력 기능을 제공합니다. 스트림의 분류 바이트 스트림: 바이트 데이터를 처리하는데 사용되며, InputStream과 OutputStream이 기본 클래스입니다. 문자 스트림: 문자 데이터를 처리하는데 사용되며, Reader와 Writer가 기본 클래스입니다. 파일 읽고 쓰기 파일 읽기: FileInputStream 또는 FileReader를 사용하여 파일로부터 데이터를 읽어올 수 있습니다. 파일 쓰기: FileOutputStream 또는 FileWriter를 사용하여 파일에 데이터를 쓸 수 있습니다..
스레드(Thread)란? 스레드는 프로그램 내에서 실제로 작업을 수행하는 실행 단위입니다. 모든 Java 프로그램에는 메인 스레드가 존재하며, 추가적으로 사용자 정의 스레드를 생성하여 병렬 작업을 수행할 수 있습니다. 스레드를 사용하면 여러 작업을 동시에 처리할 수 있어, 애플리케이션의 반응성과 성능을 향상시킬 수 있습니다. 스레드 생성 및 실행 Java에서 스레드를 생성하고 실행하는 방법은 주로 두 가지입니다: Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법입니다. Thread 클래스 상속 class MyThread extends Thread { public void run() { System.out.println("MyThread is running."); } } My..
람다식(Lambda Expressions) 개념 람다식은 간단히 말해서 익명 함수의 일종입니다. 람다식을 사용하면 메소드를 하나의 식(expression)으로 표현할 수 있으며, 이는 코드를 더 간결하게 만들어 줍니다. 람다식은 주로 함수형 인터페이스(단 하나의 추상 메소드를 가진 인터페이스)와 함께 사용됩니다. 기본 문법 (parameters) -> expression 또는 (parameters) -> { statements; } 예시 // 람다식을 사용하지 않은 경우 new Thread(new Runnable() { @Override public void run() { System.out.println("Thread running"); } }).start(); // 람다식을 사용한 경우 new Thr..
제네릭 프로그래밍의 필요성 제네릭 프로그래밍이 도입되기 전, Java에서는 타입 변환(casting)을 통해 다양한 타입의 객체를 처리했습니다. 하지만 이 방법은 타입 안전성을 보장할 수 없고, 런타임에 ClassCastException과 같은 오류를 발생시킬 위험이 있습니다. 제네릭 프로그래밍은 이러한 문제를 해결해 줍니다. 제네릭의 장점 타입 안전성(Type Safety): 컴파일 시점에 타입 체크를 수행하여 타입 오류를 방지합니다. 코드 재사용성(Reusability): 다양한 타입에 대해 같은 코드를 재사용할 수 있습니다. 캐스팅 제거(Reduction in Casting): 명시적인 타입 변환을 줄여 코드의 가독성을 높입니다. 제네릭의 기본 사용법 제네릭 클래스 정의 public class Bo..