JAVA/기초 21

[Java] 함수형 프로그래밍과 Stream

자바에서 함수형 프로그래밍의 지원은 자바 8부터 추가되었습니다. 이전 버전의 자바에서는 객체지향 프로그래밍이 주를 이루었지만, 자바 8에서는 람다 표현식, 스트림 API 등 함수형 프로그래밍의 핵심 기능을 지원하면서 함수형 프로그래밍의 개념을 자바에 도입했습니다. 함수형 프로그래밍에서 사용하는 스트림(Stream)은 데이터의 처리를 선언적으로 표현할 수 있도록 도와주는 데이터 요소의 연속된 집합을 나타냅니다. 스트림은 일련의 중간 연산과 최종 연산으로 구성되어 있으며, 중간 연산은 스트림을 변환하고 필터링하고 정렬하는 작업을 수행하고, 최종 연산은 최종 결과를 생성하거나 수집하는 작업을 수행합니다. 1. 스트림(Stream) 스트림은 데이터의 흐름을 나타내는 객체로, 배열이나 컬렉션 등의 데이터 소스로부..

JAVA/기초 2024.03.24

[Java] 객체지향 프로그래밍(OPP)과 함수형 프로그래밍(FP)

객체지향 프로그래밍(Object-Oriented Programming, OOP) 객체지향 프로그래밍은 소프트웨어를 객체(Object)라는 단위로 모델링하고, 객체들 간의 상호작용을 통해 프로그램을 구성하는 프로그래밍 패러다임입니다. 주요 특징으로는 캡슐화, 상속, 다형성이 있습니다. 특징 캡슐화(Encapsulation) : 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶어 객체를 생성합니다. 외부에서 객체 내부의 상태에 직접 접근하는 것을 제한하고, 메서드를 통해 상태를 조작합니다. 상속(Inheritance) : 부모 클래스(슈퍼 클래스)의 특징을 자식 클래스(서브 클래스)가 상속받아 재사용할 수 있습니다. 이를 통해 코드의 중복을 줄이고, 코드의 유지보수성과 재사용성을 높일 수 있습니다...

JAVA/기초 2024.03.24

[Java] Collection - Map

Map은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료구조입니다. 각각의 키는 유일해야 하며, 키를 사용하여 값에 접근하거나 수정할 수 있습니다. Java에서는 Map 인터페이스를 사용하여 이러한 특성을 가진 맵을 구현합니다. 다음은 Map 인터페이스의 주요 메서드들 입니다. put(K key, V value) : 지정된 키와 값을 맵에 추가합니다. 만약 이전에 같은 키가 이미 존재한다면 이전 값은 새 값으로 대체됩니다. get(Object key) : 지정된 키에 매핑된 값을 반환합니다. 만약 해당 키가 존재하지 않으면 null을 반환합니다. remove(Object key) : 지정된 키와 해당 값을 맵에서 제거합니다. 만약 해당 키가 존재하지 않으면 아무런 동작도 하지 않습니다. c..

JAVA/기초 2024.03.17

[Java] Collection - Queue

Queue는 Collection 인터페이스의 서브 인터페이스 중 하나로, 선입선출(FIFO, First-In-First-Out) 의 원칙에 따라 요소를 저장하고 처리합니다. 일상 생활에서 줄을 서는 것과 유사한 개념으로 이해할 수 있습니다. Queue는 다음과 같은 특징을 가집니다 선입선출 (FIFO) : Queue에 요소를 추가할 때는 뒤에 추가되고, 삭제할 때는 맨 앞에서부터 제거됩니다. 저장 및 제거 연산 : 일반적으로 Enqueue(저장)와 Dequeue(제거) 연산을 제공합니다. 한 방향으로의 데이터 이동 : 데이터는 한 방향으로만 이동하며, 보통 뒤쪽에서 추가하고 앞쪽에서 제거됩니다. 다양한 구현체 : Queue는 여러 가지 구현체를 가질 수 있습니다. 배열 기반의 구현체나 연결 리스트 기반의..

JAVA/기초 2024.03.16

[Java] Collection - Set

Set 인터페이스는 중복 요소를 허용하지 않고 순서를 보장하지 않는 데이터 컬렉션입니다. 이 Set 인터페이스를 구현한 클래스로는 HashSet, LinkedHashSet, TreeSet 등이 있습니다. 각각의 클래스들은 다음과 같은 특징과 차이점을 가지고 있습니다. Set (공통) Set은 중복된 요소를 허용하지 않습니다. (Unique) 순서를 보장하지 않으므로 요소들이 삽입된 순서대로 저장되지 않습니다. Set 인터페이스를 구현한 클래스들은 공통된 메서드들을 제공합니다. HashSet HashSet은 해시 테이블을 사용하여 요소들을 저장합니다. 순서를 보장하지 않으며, 중복된 요소를 허용하지 않습니다. 해시 함수를 사용하기 때문에 빠른 검색 속도를 가지고 있습니다. 추가, 삭제, 검색 등의 연산이 ..

JAVA/기초 2024.03.16

[Java] foreach문

foreach문은 자바에서 컬렉션(Collection)이나 배열(Array)의 요소들을 순회(iterate)할 때 사용되는 간편한 반복문입니다. foreach문은 반복할 컬렉션의 요소들을 하나씩 가져와서 처리하는 데 사용됩니다. foreach문은 다음과 같은 구조를 갖습니다 for (변수선언 : 컬렉션 또는 배열) { // 요소에 대한 처리 작업 } 여기서 변수선언은 반복되는 각 요소를 저장할 변수를 선언하는 부분입니다. 이 변수는 반복되는 동안 현재 요소를 나타냅니다. 컬렉션 또는 배열은 요소를 반복할 컬렉션이나 배열을 지정하는 부분입니다. foreach문을 사용하면 요소들을 반복하는 동안 인덱스나 요소의 개수를 직접 다룰 필요가 없어 편리합니다. 대신 간단하고 가독성이 높은 코드를 작성할 수 있습니다..

JAVA/기초 2024.03.14

[Java] List와 불변성(Immutability)

불변성(Immutability)은 데이터가 변경될 수 없는 상태를 의미합니다. List의 불변성은 리스트에 저장된 요소들이 변경되지 않음을 보장합니다. 즉, 한 번 생성된 리스트의 요소들은 추가, 삭제, 변경되지 않습니다. List의 불변성을 구현하는 방법은 다양합니다. 1. List.of() 제가 가장 많이 쓰고 좋아하는, Java 9부터 제공되는 List.of() 메서드로 작성된 예시입니다. import java.util.List; public class ImmutableListExample { public static void main(String[] args) { // 불변 리스트 생성 List immutableList = List.of("apple", "banana", "cherry"); // ..

JAVA/기초 2024.03.04

[Java] Collection - List

List는 순서가 있는 요소(element)들의 모음을 나타냅니다. List는 배열과 유사하게 인덱스를 사용하여 요소에 접근할 수 있으며, 요소의 순서가 유지됩니다. 또한 List는 중복된 요소를 허용합니다. List 인터페이스는 다음과 같은 주요 메서드들을 포함합니다 요소의 추가, 삭제 및 접근 : 요소를 추가하거나 삭제하고, 특정 인덱스의 요소에 접근하는 메서드들이 포함됩니다. add(E element) : 요소를 리스트의 끝에 추가합니다. add(int index, E element) : 지정된 인덱스에 요소를 추가합니다. remove(Object o) : 지정된 요소를 삭제합니다. remove(int index) : 지정된 인덱스의 요소를 삭제합니다. get(int index) : 지정된 인덱스의..

JAVA/기초 2024.03.04

[Java] 추상 클래스와 인터페이스의 동시 사용

인터페이스와 추상 클래스를 동시에 사용하는 것은 Java에서 매우 흔한 패턴 중 하나입니다. 이것은 클래스가 공통된 동작을 가질 때 추상 클래스를 사용하고, 다양한 유형의 동작을 지원하기 위해 인터페이스를 사용하는 경우에 특히 유용합니다. 이렇게 함으로써 클래스는 일부 메서드를 이미 구현된 추상 클래스로부터 상속받고, 다른 동작들을 인터페이스로부터 구현할 수 있습니다. 예시 사용자가 작성한 문서를 다양한 형식으로 저장하고 열 수 있는 텍스트 편집기를 만든다고 가정해봅시다. 이 편집기에는 다음과 같은 기능이 있어야 합니다. 모든 문서는 저장될 수 있어야 합니다. 특정 형식의 문서를 열 수 있어야 합니다. 모든 문서는 특정 형식으로 저장될 수 있어야 합니다. 이를 위해 우리는 추상 클래스와 인터페이스를 함께..

JAVA/기초 2024.02.27

[Java] 다중 인터페이스(다중 상속)

다중 인터페이스(multiple interfaces)는 하나의 클래스가 여러 개의 인터페이스를 동시에 구현하는 것을 의미합니다. Java에서는 다중 상속을 지원하지 않지만, 클래스는 여러 개의 인터페이스를 구현할 수 있습니다. 다중 인터페이스를 구현함으로써 클래스는 여러 가지 유형의 동작을 수행할 수 있으며, 다형성을 더욱 유연하게 활용할 수 있습니다. 다음은 다중 인터페이스를 구현하는 예시입니다. interface InterfaceA { void methodA(); } interface InterfaceB { void methodB(); } class MyClass implements InterfaceA, InterfaceB { public void methodA() { System.out.printl..

JAVA/기초 2024.02.27