SMALL
📚 13강: 자바 기초 프로젝트
🚀 1. 프로젝트 목표
- 지금까지 학습한 자바의 핵심 개념(클래스, 상속, 인터페이스, 예외 처리, 컬렉션, 파일 입출력, JDBC 등)을 통합하여 작은 애플리케이션을 개발합니다.
- 목표: 간단한 회원 관리 시스템 (User Management System) 구현
🚀 2. 프로젝트 개요
📌 2.1 프로젝트 기능
- 회원 등록:
- 사용자의 이름, 나이, 이메일을 입력받아 데이터베이스에 저장합니다.
- 회원 조회:
- 등록된 모든 회원 목록을 출력합니다.
- 회원 수정:
- 특정 회원의 이메일 주소를 수정합니다.
- 회원 삭제:
- 특정 회원 정보를 삭제합니다.
- 로그 파일 기록:
- 모든 작업 내역을 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. 학습 목표
- JDBC를 사용한 CRUD 구현
- File I/O로 로그 기록
- 사용자 입력 처리 및 예외 관리
- 객체지향적 설계
✅ 다음 강의 예고:
고급 자바 주제 (Spring Framework, REST API)
LIST