2025년 11월 3일 월요일 (106일차)

Jeonghoon·2025년 11월 3일

jeonghoon's Study

목록 보기
109/128

☕ 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 // 해당 클래스가 Entity임을 선언
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExamEntity {
    @Id // Primary Key 지정
    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> {
    // T : 조작할 테이블(Entity Class)
    // ID : PK 자료형
}

주요 메서드

기능메서드설명
C (등록).save(entity)새로운 데이터 추가
R (조회).findAll(), .findById(id)전체 조회 / 특정 ID 조회
U (수정).save() + Setter 조합변경 감지를 통해 수정
D (삭제).deleteById(id)특정 데이터 삭제

🧩 [ CRUD 예시 ]

public ExamEntity put2(ExamEntity examEntity){
    // 1. 수정할 엔티티 조회
    Optional<ExamEntity> findEntity = examRepository.findById(examEntity.getCol1());

    // 2. Optional을 사용하여 NullPointer 방지
    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 개념과 유사)

🧱 위젯 생성 방법

  1. StatelessWidget 또는 StatefulWidget 클래스를 상속받는다.
  2. build() 메서드를 오버라이드하여 UI를 반환한다.
  3. build() 내에서 MaterialApp() 위젯을 반환한다.

📘 예시 코드

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Example')),
        body: Center(child: Text('Hello Flutter!')),
      ),
    );
  }
}

⚡ Flutter는 위젯 기반 선언형 UI 프레임워크로, 빠른 개발과 Hot Reload 기능을 제공합니다.


🧾 요약

항목핵심 포인트
JPAJava ORM 표준 API로, SQL 없이 Entity와 Repository를 통해 DB를 다룸
🧠 HibernateORM 구현체로, CRUD·검색·페이징 등 강력한 기능 제공
🧱 Entity클래스 = 테이블, 객체 = 레코드 매핑
🧩 Repository기본 CRUD 메서드 제공 (save, findAll, deleteById)
🐦 FlutterDart 기반 UI 프레임워크로, 모든 플랫폼을 하나의 코드로 개발 가능

0개의 댓글