BE/Java 53

[Java] 영속성

애플리케이션에서 생성한 데이터를 데이터베이스와 같은 영구 저장소에 저장하고, 필요할 때 다시 불러오는 과정을 의미영속성은 데이터를 객체화하고, 이를 영구적으로 저장하거나 관리하는 것을 중심으로 작동1. 영속성(Persistence)이란?데이터가 애플리케이션의 실행 주기와 독립적으로 존재할 수 있도록 저장하는 메커니즘을 의미비영속 데이터: 메모리에만 존재하며 애플리케이션 종료 시 사라지는 데이터영속 데이터: 데이터베이스에 저장되어 애플리케이션이 종료되어도 유지되는 데이터자바에서 영속성을 관리하기 위해 ORM(Object Relational Mapping)기술과 JPA를 주로 사용한다2. 영속성을 이해하기 위한 주요 개념2.1. JPAJPA는 자바 애플리케이션에서 데이터를 영속적으로 관리하기 위한 표준 AP..

BE/Java 2024.12.16

[Java] 레이어드 아키텍처와 mvc

1. 레이어드 아키텍처애플리케이션을 여러 계층으로 나우어 각 계층이 특정 역할을 담당하고록 설계하는 방식.1.1. Presentation Layer (표현 계층)사용자가 애플리케이션과 상호작용하는 계층예: Controller, View역할:REST API 요청을 받아 처리하고, 응답을 반환데이터 출력 형식을 결정(HTML, JSON, XML 등)구현: `@Controller`, `@RestController` 등이 포함1.2. Application Layer (서비스 계층)비즈니스 로직이 구현되는 계층예: Service역할:Presentation Layer와 Data Layer 간의 중간다리 역할비즈니스 규칙 처리여러 Repository나 외부 API 호출 등을 조합구현: `@Service` 애너테이션을..

BE/Java 2024.12.15

[Java] 명령형 , 선언형 프로그래밍

문제를 해결하기 위한 사고방식에 따라 명령형과 선언형으로 구분할 수 있다코드 작성 및 문제 접근 방식에서 차이를 보이며, 자바에서도 이를 활용한 다양한 프로그래밍 스타일을 구현할 수 있다 1. 명령형 프로그래밍특징어떻게(HOW) 문제를 해결할지 구체적으로 지시상태와 명령어를 중심으로 동작로직을 단계적으로 작성하며, 제어 구조(반복문, 조건문 등)를 사용하여 수행 과정을 정의특징적 요소변수 : 상태를 저장루프 : 반복작업수행조건문 : 논리 흐름 제어명령과 제어의 연속으로 문제를 해결함장점알고리즘 구현과 제어 흐름을 명확히 이해할 수 있음저수준 작업(메모리 관리, 상태 관리)에 적합단점코드가 길어지고 복잡해질 수 있음병렬 처리 및 함수 추상화가 어렵거나 번거로움예제리스트에서 짝수만 필터링하여 합산import..

BE/Java 2024.12.12

[Java] 어노테이션

어노테이션은 메타데이터를 제공하는 특별한 형태의 문법주로 컴파일러 지시, 런타임 동작제어, 문서화 등에 사용된다 특징메타데이터 제공코드에 부가적인 정보를 포함하지만 프로그램의 로직에는 직접적인 영향을 미치지 않는다주석과는 다름주석은 개발자를 위한 설명일뿐이지만, 컴파일러나 런타임 환경에서 사용된다클래스, 메소드, 필드, 매개변수 등 다양한 위치에 적용 가능클래스, 메서드, 변수, 생성자, 매개변수, 패키지 선언 등 여러 곳에 사용할 수 있다기본문법`@`기호로 시작한다@AnnotationNamepublic class Main{}어노테이션 정의@interface 어노테이션이름 {}어노테이션 사용@어노테이션이름public class MyClass { // 클래스 내용}자바에서 제공하는 기본 어노테이션1...

BE/Java 2024.12.11

[Java] JDBC와 JPA

JDBCJDBC는 Java와 데이터베이스를 연결하는 기본적인 다리데이터베이스에 직접 연결해서 SQL 쿼리를 실행하고 데이터를 가져오거나 저장할 수 있게 해준다 특징 직접 SQL 사용: SQL 쿼리를 직접 작성해서 데이터베이스와 소통로우레벨 작업: 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 개발자가 하나씩 직접 처리유연하지만 복잡: 모든 세부 작업을 수동으로 처리해야 하므로 복잡한 코드가 될 수 있음예제import java.sql.*;public class JdbcExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; String user = "us..

BE/Java 2024.12.11

[Java] 람다식

람다식은 메서드를 하나의 식으로 표현할수 있게 해주며, 간결한 함수표현을 제공한다 람다식의 구성요소매개변수(parameters)메서드에 전달되는 입력값매개변수 타입은 생략 가능화살표 연산자 ->매개변수와 본문(실행코드)를 구분하는 역할본문(body)실행할 코드한줄일 경우 중뢀호{}생략 가능(parameters) -> {body}// 기존 방식: 익명 클래스 사용Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, World!"); }};// 람다식 방식Runnable runnable = () -> System.out.println("Hello, World!");예..

BE/Java 2024.12.10

[Java] 스트림

1.  스트림스트림은 컬렉션이나 배열같은 데이터 소스를 처리하기 위한 강력하고 선언적인 방식이다데이터 처리 파이프라인을 만들도록 돕는 기능데이터 저장소가 아니라 데이터의 흐름원본데이터를 변경하지 않음선언형파이프라인 방식으로 연속적 작업을 연결 2. 핵심 구성 요소중간연산 : 스트림을 변환하는 작업 (filter, map, sorted 등)종결 연산 : 스트림을 소모하여 최종 결과를 반환 (forEach, collect, reduce 등) 3. 특징1회성 사용 : 한번 사용하면 재사용할 수 없다게으른 연산 : 중간 연산은 결과가 필요할때까지 실행되지 않는다병렬처리 지원 : parallelStream() 을 통해 병렬 처리가 가능하다 4. 장점코드 간결화병렬 처리함수형 스타일 5. 예제List words =..

BE/Java 2024.12.09

[Java] Map

키-값을 쌍으로 저장하고 관리하기 위한 인터페이스`Map`은 리스트나 배열처럼 순차적으로 값을 저장하지 않는다.1. 특징키-값을 쌍으로 저장`("name","alice")` 에서 name이 키, alice가 값이다키는 고유값(Unique)동일한 키를 중복해서 저장할 수 없다기존 키에 새 값을 넣으면 이전 값이 덮어씌워진다값은 중복 허용`("key1","value")`, `("key2","value")` 는 허용됨Null 허용 여부`HashMap`은 `null`키와 `null`값을 허용`TreeMap`은 `null`키 허용 x2. 주요 메서드데이터 추가/수정`put(key,value)`map.put("key","value");  데이터 조회`get(Object key)`주어진 키에 연결된 값을 반환Stri..

BE/Java 2024.12.07

[Java] Optional

값을 포함하거나 포함하지 않을수 있는 객체`null`값을 직접 반환하는 대신 `Optional`객체를 반환하여 값의 유무를 명시적으로 처리하도록 함 1. Optional 생성1.1. Optional.of()`null`이 아닌 값을 가진 객체를 생성`null`값을 전달하면 NullPointerException이 발생Optional opt = Optional.of("Hello"); 1.2. Optional.ofNullable()`null`값을 허용하며, 값이 `null`이면 비어있는 객체를 생성Optional opt = Optional.ofNullable(null);// opt 는 Optional.empty(); 1.3. Optional.empty()값이 비어있는 객체 생성 2. 메서드2.1. isPrese..

BE/Java 2024.12.06

[Java] List

요소들은 인덱스로 관리된다 (0부터 시작)삽입 순서를 유지한다중복된 값을 허용한다주요 메서드메서드설명`add(E e)`요소를 리스트 끝에 추가`add(int index, E e)`특정 위치에 요소 추가`get(int index)`인덱스에 있는 요소 반환`set(int index, E e)`특정 인덱스의 요소를 변경`remove(int index)`특정 인덱스의 요소 삭제`size()`리스트의 크기 반환`isEmpty()`리스트가 비어있는지 확인ArrayList내부적으로 배열을 사용하여 데이터를 관리하는 `List`의 구현체초기 크기를 정하지 않아도 필요에 따라 자동으로 크기가 증가읽기/검색이 빈번한 작업에 적합함public class Main { public static void main(Strin..

BE/Java 2024.12.05