본문 바로가기
카테고리 없음

📚 JAVA 13강: 자바 기초 프로젝트

by demianpark127 2025. 1. 3.
SMALL

📚 13강: 자바 기초 프로젝트


🚀 1. 프로젝트 목표

  • 지금까지 학습한 자바의 핵심 개념(클래스, 상속, 인터페이스, 예외 처리, 컬렉션, 파일 입출력, JDBC 등)을 통합하여 작은 애플리케이션을 개발합니다.
  • 목표: 간단한 회원 관리 시스템 (User Management System) 구현

🚀 2. 프로젝트 개요

📌 2.1 프로젝트 기능

  1. 회원 등록:
    • 사용자의 이름, 나이, 이메일을 입력받아 데이터베이스에 저장합니다.
  2. 회원 조회:
    • 등록된 모든 회원 목록을 출력합니다.
  3. 회원 수정:
    • 특정 회원의 이메일 주소를 수정합니다.
  4. 회원 삭제:
    • 특정 회원 정보를 삭제합니다.
  5. 로그 파일 기록:
    • 모든 작업 내역을 log.txt 파일에 기록합니다.

📌 2.2 기술 스택

  • Java Core: 클래스, 객체, 예외 처리, 컬렉션
  • JDBC: MySQL 데이터베이스와 연동
  • File I/O: 로그 기록
  • 컬렉션 프레임워크: 데이터 임시 저장 및 관리

🚀 3. 프로젝트 구조

📂 UserManagementSystem
├── 📄 User.java           // 사용자 정보를 담는 클래스
├── 📄 UserDAO.java        // 데이터베이스 작업을 수행하는 클래스
├── 📄 Logger.java         // 로그 파일 기록 클래스
├── 📄 Main.java           // 메인 애플리케이션
└── 📄 db.properties       // 데이터베이스 설정 파일

📚 4. 단계별 코드 구현


1. User.java (사용자 클래스)

public class User {
    private int id;
    private String name;
    private int age;
    private String email;

    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    public User(int id, String name, int age, String email) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.email = email;
    }

    public int getId() { return id; }
    public String getName() { return name; }
    public int getAge() { return age; }
    public String getEmail() { return email; }

    @Override
    public String toString() {
        return "ID: " + id + ", 이름: " + name + ", 나이: " + age + ", 이메일: " + email;
    }
}

2. UserDAO.java (데이터베이스 접근 클래스)

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDAO {
    private final String URL = "jdbc:mysql://localhost:3306/testdb";
    private final String USER = "root";
    private final String PASSWORD = "1234";

    public Connection connect() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }

    // 사용자 등록
    public void addUser(User user) {
        String sql = "INSERT INTO users (name, age, email) VALUES (?, ?, ?)";
        try (Connection conn = connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, user.getName());
            ps.setInt(2, user.getAge());
            ps.setString(3, user.getEmail());
            ps.executeUpdate();
            Logger.log("사용자 등록: " + user.getName());
        } catch (SQLException e) {
            System.out.println("사용자 등록 실패: " + e.getMessage());
        }
    }

    // 모든 사용자 조회
    public List<User> getAllUsers() {
        List<User> users = new ArrayList<>();
        String sql = "SELECT * FROM users";
        try (Connection conn = connect(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) {
            while (rs.next()) {
                users.add(new User(
                    rs.getInt("id"),
                    rs.getString("name"),
                    rs.getInt("age"),
                    rs.getString("email")
                ));
            }
        } catch (SQLException e) {
            System.out.println("사용자 조회 실패: " + e.getMessage());
        }
        return users;
    }

    // 사용자 수정
    public void updateUserEmail(int id, String newEmail) {
        String sql = "UPDATE users SET email = ? WHERE id = ?";
        try (Connection conn = connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, newEmail);
            ps.setInt(2, id);
            ps.executeUpdate();
            Logger.log("사용자 이메일 수정: ID " + id);
        } catch (SQLException e) {
            System.out.println("사용자 수정 실패: " + e.getMessage());
        }
    }

    // 사용자 삭제
    public void deleteUser(int id) {
        String sql = "DELETE FROM users WHERE id = ?";
        try (Connection conn = connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setInt(1, id);
            ps.executeUpdate();
            Logger.log("사용자 삭제: ID " + id);
        } catch (SQLException e) {
            System.out.println("사용자 삭제 실패: " + e.getMessage());
        }
    }
}

 


3. Logger.java (로그 기록)

import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;

public class Logger {
    public static void log(String message) {
        try (FileWriter writer = new FileWriter("log.txt", true)) {
            writer.write(LocalDateTime.now() + " - " + message + "\n");
        } catch (IOException e) {
            System.out.println("로그 기록 실패: " + e.getMessage());
        }
    }
}

4. Main.java (메인 프로그램)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        UserDAO dao = new UserDAO();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\n1. 사용자 등록 | 2. 사용자 조회 | 3. 사용자 수정 | 4. 사용자 삭제 | 5. 종료");
            int choice = scanner.nextInt();

            switch (choice) {
                case 1 -> {
                    System.out.print("이름: ");
                    String name = scanner.next();
                    System.out.print("나이: ");
                    int age = scanner.nextInt();
                    System.out.print("이메일: ");
                    String email = scanner.next();
                    dao.addUser(new User(name, age, email));
                }
                case 2 -> dao.getAllUsers().forEach(System.out::println);
                case 3 -> {
                    System.out.print("ID: ");
                    int id = scanner.nextInt();
                    System.out.print("새 이메일: ");
                    String email = scanner.next();
                    dao.updateUserEmail(id, email);
                }
                case 4 -> {
                    System.out.print("ID: ");
                    int id = scanner.nextInt();
                    dao.deleteUser(id);
                }
                case 5 -> {
                    System.out.println("프로그램 종료");
                    return;
                }
            }
        }
    }
}

🚀 5. 학습 목표

  1. JDBC를 사용한 CRUD 구현
  2. File I/O로 로그 기록
  3. 사용자 입력 처리 및 예외 관리
  4. 객체지향적 설계

다음 강의 예고:

고급 자바 주제 (Spring Framework, REST API)

LIST