☕ JPA & Flutter 정리 문서
🧩 [ JPA (Java Persistence API) ]
- Java에서 ORM(Object Relational Mapping) 기술을 사용할 때 표준으로 제공되는 API
- DB와 객체 간의 매핑을 단순화하여 개발자가 SQL을 직접 다루지 않아도 데이터를 처리할 수 있게 함
- 설치:
gradle에 JPA 의존성 추가
🧱 [ ORM (Object Relational Mapping) ]
| 항목 | 설명 |
|---|
| 정의 | 객체지향 프로그래밍에서의 객체와 데이터베이스 테이블을 매핑하는 기술 |
| 목적 | 객체와 테이블 간의 변환을 자동화하여 개발 생산성 향상 |
| 사용 예시 | MyBatis, JPA, Hibernate 등 |
🧠 [ Hibernate ]
| 항목 | 설명 |
|---|
| 정의 | Java 진영에서 ORM을 구현한 대표적인 라이브러리 |
| 특징 | SQL 없이 순수 Java 코드로 데이터베이스 조작 가능 |
| 지원 기능 | CRUD, 타입 변환, 검색, 정렬, 페이징 처리 등 |
| 사용 방식 | Entity 클래스와 Repository를 통해 DB와 상호작용 |
🏗️ [ Entity ]
- 데이터베이스의 테이블과 매핑되는 클래스
Entity 클래스 = DB 테이블, Entity 객체 = 테이블의 한 레코드
@Entity 어노테이션을 통해 JPA가 인식하도록 지정
📘 예시 코드
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExamEntity {
@Id
private int col1;
private String col2;
private double col3;
}
💡 Entity 클래스 1개당 반드시 @Id 1개가 필요하다 (Primary Key 필수).
⚙️ [ JPA Repository ]
- JPA에서 CRUD 및 동적 쿼리 기능을 제공하는 인터페이스
JpaRepository<T, ID>를 상속받아 사용
📘 예시 코드
@Repository
public interface ExamRepository extends JpaRepository<ExamEntity, Integer> {
}
주요 메서드
| 기능 | 메서드 | 설명 |
|---|
| C (등록) | .save(entity) | 새로운 데이터 추가 |
| R (조회) | .findAll(), .findById(id) | 전체 조회 / 특정 ID 조회 |
| U (수정) | .save() + Setter 조합 | 변경 감지를 통해 수정 |
| D (삭제) | .deleteById(id) | 특정 데이터 삭제 |
🧩 [ CRUD 예시 ]
public ExamEntity put2(ExamEntity examEntity){
Optional<ExamEntity> findEntity = examRepository.findById(examEntity.getCol1());
if(findEntity.isPresent()){
ExamEntity getEntity = findEntity.get();
getEntity.setCol2(examEntity.getCol2());
getEntity.setCol3(examEntity.getCol3());
return getEntity;
}
return examEntity;
}
💬 Optional은 NullPointerException 방지를 위한 JPA의 안전 장치입니다.
🐦 [ Flutter ]
- Dart 언어 기반의 UI 프레임워크로, 단일 코드베이스로 iOS/Android/Web을 동시에 개발 가능
| 항목 | 설명 |
|---|
| main 함수 | void main(){} → 프로그램의 시작점 (Java의 main과 동일) |
| runApp() | 지정한 위젯을 실행하는 함수 |
| 위젯 (Widget) | Flutter UI의 기본 단위 (React의 Component 개념과 유사) |
🧱 위젯 생성 방법
StatelessWidget 또는 StatefulWidget 클래스를 상속받는다.
build() 메서드를 오버라이드하여 UI를 반환한다.
build() 내에서 MaterialApp() 위젯을 반환한다.
📘 예시 코드
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter Example')),
body: Center(child: Text('Hello Flutter!')),
),
);
}
}
⚡ Flutter는 위젯 기반 선언형 UI 프레임워크로, 빠른 개발과 Hot Reload 기능을 제공합니다.
🧾 요약
| 항목 | 핵심 포인트 |
|---|
| ☕ JPA | Java ORM 표준 API로, SQL 없이 Entity와 Repository를 통해 DB를 다룸 |
| 🧠 Hibernate | ORM 구현체로, CRUD·검색·페이징 등 강력한 기능 제공 |
| 🧱 Entity | 클래스 = 테이블, 객체 = 레코드 매핑 |
| 🧩 Repository | 기본 CRUD 메서드 제공 (save, findAll, deleteById) |
| 🐦 Flutter | Dart 기반 UI 프레임워크로, 모든 플랫폼을 하나의 코드로 개발 가능 |