[Java] 멀티 스레드 프로그래밍
·
🛠️Backend/☕Java
✅ 1. 프로세스와 스레드 개념(1) 프로세스프로그램의 통상적 실행 단위를 의미하며, 쉽게말해 프로그램 하나를 실행하면 실행 단위를 프로세스라고 부른다.즉, Java도 프로그램이기 때문에 실행을 하면 하나의 프로세스로 만들어져서 실행을 하게 된다.프로세스로 구분하는 이유는, 여러 프로그램을 함께 돌리기 위해 프로세스 단위로 구분을 하는 것이다.프로그램이 실행이 되면 프로세서가 되는데, CPU는 여러 프로세스를 돌림 이걸 멀티테스킹이라고 함.(2) 스레드프로세스 내에 존재하는 소규모 실행 흐름을 의미한다.하나의 프로세스 내에 여러 스레드가 동시에 실행이 될 수 있음.하나의 프로세서안에는 여러 스레드가 만들어질 수 있으며, 프로세서가 할당받은 자원을 스레드가 공유받음.자바는 하나의 프로세스가 자원을 할당받아..
[Java] 자바 스트림(Stream) 개념 + 예제 총정리 📚
·
🛠️Backend/☕Java
✅ 1. 외부반복과 내부반복List names = Arrays.asList("Alice", "Bob", "Charlie");// 외부 반복: for-each문for (String name : names) { System.out.println(name);}// 내부 반복: Stream + forEachnames.stream().forEach(name -> System.out.println(name)); (1) 외부반복개발자가 루프 구조를 직접 작성해서 원소를 하나씩 처리하는 방식을 의미한다.쉽게 말해, for문 while문 Iterator 같은 반복문을 직접 사용해서 어떻게 반복할지 직접 명시해서 제어하는 경우이다.(2) 내부반복반복의 제어를 라이브러리나 프레임워크에게 맡기고, 개발자는 무엇을 할지만..
[Java] 컬렉션 프레임워크 정리: List, Set, Map 인터페이스와 대표 구현체 총정리
·
🛠️Backend/☕Java
✅ 1. 컬렉션(Collection)이란?Collection 자체는 영어로 "수집된 것, 모음"을 의미하며, 프로그래밍 전반에서 데이터의 모음을 표현할 때 자주 쓰인다.프로그래밍에선 여러 원소를 하나의 그룹으로 묶어 관리하기 위한 자료구조를 의미한다.즉, 데이터를 효율적으로 저장하고, 관리(검색, 정렬, 삭제 등) 할 수 있는 자료구조들의 집합을 의미한다.자바에선 JCF(Java Collections Framework)라고 부르며, 인터페이스와 클래스로 해당 자료구조를 제공한다.자바 컬렉션의 주요 인터페이스로는 Collection, List, Set, Queue, Map 이 있다✅ 2. JCF(Java Collections Framework) 구조 (1) JCF(Java Collections Framew..
[Java] java.nio 사용법 | Path, Files, FileChannel 예제 모음
·
🛠️Backend/☕Java
✅ 1. java.nio 패키지NIO(New Input Output)는 기존 java.io 패키지를 개선한 새로운 입출력 패키지이다.JDK 7부터는 파일 I/O를 개선한 NIO2도 등장을 함( 이때 java.nio.file 패키지가 등장함 )java.nio.file, java.nio.channels, java.nio.charset 등이 있음File 클래스보다 다양한 기능을 제공하는 Path 클래스를 제공함. java.nio.file 안에 Path 클래스가 있음.Files 클래스를 제공하며, 파일/디렉터리의 조작, 파일의 읽기/쓰기 기능을 제공함파일 입출력 모두 가능한 FileChannel 클래스가 있음 ( 버퍼링 기능, 멀티스레드에 안전함 )입출력이 기존에는 구분이 되는 경향이 있었지만, FileChan..
[Java] java.io 패키지 입출력 스트림 쉽게 이해하기
·
🛠️Backend/☕Java
✅ 1. 스트림(Stream)이란?데이터가 한쪽에서 다른 쪽으로 연속적으로 흐르는 통로를 의미한며, 데이터의 흐름을 추상화한 객체가 Stream임.쉽게말해, Stream은 수도관 데이터는 그 안에서 흐르는 물과 같은 느낌이고, 개발자가 수도꼭지를 틀거나 잠그는 역할임.데이터를 바이트 단위로 입출력하기 위한 통로라고 생각하면 된다.자바에서 모든 IO 기반 통신은 스트림 기반으로 만들어져 있음. ( 네트워크, HTTP, 파일, 콘솔 등 )✅ 2. 스트림(Stream) 종류크게 기본 입력 스트림, 출력 스트림이 있으며 각각 기본 스트림과 보조 스트림을 제공해준다.기본, 보조 스트림 내부에서는 바이트 스트림, 문자 스트림으로 또 나누어지게 된다.(1) 기본 스트림Java I/O에서 입출력을 처리하는 가장 기본적..
[Java] java.lang 패키지 정리: Object, String, Math 클래스 총정리
·
🛠️Backend/☕Java
✅ 1. java.lang 패키지란?import java.lang.*;Java에서 가장 기본적이고 자주 사용되는 클래스들을 모아놓은 패지키를 의미한다.java.lang 패키지는 모든 클래스의 자동으로 import가 되기 때문에 별도로 import를 이용해 사용을 하지 않아도 된다.위의 코드처럼 컴파일 시 모든 코드에 해당 import 문이 상단에 붙게 된다.java.lang 패키지 내부에는 String, Object, Thread, System 등 자바에서 가장 기본이 되는 클래스들이 들어가 있음.✅ 2. Object 클래스// 컴파일 전public class MyClass {}// 컴파일 후 -> .classpublic class MyClass extends Object {}자동으로 모든 클래스의 조상..
[Java] 자바 함수형 인터페이스와 람다식(Lambda Expression) 쉽게 배우기
·
🛠️Backend/☕Java
✅ 1. 람다식이란?// 함수형 인터페이스@FunctionalInterfaceinterface Printer { void print(String message);}// Mainpublic class Main { public static void main(String[] args) { Printer printer = (message) -> System.out.println("출력:" + message); // 익명함수정의 printer.print("print, message") // 정의 된 함수 호출 }}함수형 인터페이스의 추상 메서드를 간결하게 표현하는 문법을 의미한다.람다식은 오직 추상 메서드가 하나인 인터페이스 에서만 사용이 가능하며, 이를 함수형 인터페이스..
[Java] 제네릭(Generic) 문법 정리: 클래스, 메서드, 제한까지
·
🛠️Backend/☕Java
✅ 1. 제네릭이란?public class Box { private T item; public void set(T item) { this.item = item; } public T get() { return item; }}public class Main { Box box = new Box(); box.set("String"); // 제네릭 이기 때문에 타입은 String}클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다.즉, 클래스, 인터페이스, 메소드를 정의할 때 타입 매개변수를 선언하고 자료형의 제한을 둠으로써 타입 안전성을 가진다.제네릭을 사용하면, 자바 프로그램의 재사용성을 높이고 오류를 줄일 수 있게 된다.다양..
[Java] 익명 클래스(Anonymous Class)
·
🛠️Backend/☕Java
✅ 1. 익명 클래스란?"익명" + "클래스" 이름이 없는 클래스를 의미한다.일회성으로 1개의 객체를 생성하기 위한 클래스이며, 익명 클래스 정의와 동시에 객체를 생성할 수 있다.✅ 1. 익명 클래스 사용 방법// 부모 클래스class Animal { public void sound() { System.out.println("동물소리"); }}public class Main { public static void main(String[] args) { Animal dog = new Animal() { @Override public void sound() { Systme.out.println("강아지 ..
[Java] 다형성(polymorphism)
·
🛠️Backend/☕Java
✅ 1. 다형성(1) 다형성이란?다형성(ploymorphism)은 하위 클래스 객체를 생성하고 상위 클래스 타입으로 받는 것을 의미한다.쉽게말해, 객체를 생성할 때 해당 객체의 타입으로 받는 것이 일반적이다.하지만, 자바에서 제공하는 다형성을 활용해 해당 객체 타입이 아닌, 상위클래스 타입으로 받아서 유연하게 이용 할 수 있다.일반적인 방식: Dog dog = new Dog();다형성 적용 방식: Animal dog = new Dog(); - 상위 클래스로 참조 타입을 받을 수 있음. (2) 다형성 쓰는 이유public class Animal { public void sound() { System.out.println("동물소리"); }}public class Cat extends..