IT 강좌(IT Lectures)/Java

10강. 기초 프로젝트

소울입니다 2024. 6. 27. 08:30
728x90
반응형

챕터 10: 기초 프로젝트


이 장에서는 간단한 콘솔 애플리케이션을 작성하고, 객체 지향 설계와 구현을 연습합니다. 이를 통해 Java 프로그래밍의 기초를 다지고, 실제 프로젝트에서의 적용 방법을 배웁니다.

10.1 간단한 콘솔 애플리케이션 작성

간단한 콘솔 애플리케이션을 작성하기 위해, 먼저 프로젝트를 기획하고 설계합니다. 그 다음 주요 기능을 구현하고 테스트합니다.

프로젝트 기획 및 설계

프로젝트: 학생 관리 시스템

기능:

  • 학생 정보 추가
  • 학생 정보 조회
  • 학생 정보 삭제
  • 모든 학생 정보 출력

클래스 설계

  • Student 클래스: 학생 정보를 저장하는 클래스
  • StudentManager 클래스: 학생 정보를 관리하는 클래스

클래스 다이어그램

+------------------+
|     Student      |
+------------------+
| - id: int        |
| - name: String   |
| - age: int       |
+------------------+
| + Student(id,    |
|   name, age)     |
| + getId(): int   |
| + getName(): String|
| + getAge(): int  |
+------------------+

+-------------------------+
|     StudentManager      |
+-------------------------+
| - students: List<Student>|
+-------------------------+
| + addStudent(s: Student) |
| + getStudent(id: int):   |
|   Student               |
| + removeStudent(id: int) |
| + printAllStudents()    |
+-------------------------+
 

코드 구현 및 테스트

 

Student.java

// Student 클래스는 학생 정보를 저장하는 역할을 합니다.
public class Student {
    private int id;        // 학생 ID
    private String name;   // 학생 이름
    private int age;       // 학생 나이

    // 생성자: 학생 객체를 생성할 때 ID, 이름, 나이를 초기화합니다.
    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // 학생 ID를 반환하는 메서드
    public int getId() {
        return id;
    }

    // 학생 이름을 반환하는 메서드
    public String getName() {
        return name;
    }

    // 학생 나이를 반환하는 메서드
    public int getAge() {
        return age;
    }

    // 학생 정보를 문자열로 반환하는 메서드 (객체 정보를 출력할 때 사용)
    @Override
    public String toString() {
        return "Student{id=" + id + ", name='" + name + "', age=" + age + "}";
    }
}
 

StudentManager.java

import java.util.ArrayList;
import java.util.List;

// StudentManager 클래스는 학생들을 관리하는 역할을 합니다.
public class StudentManager {
    private List<Student> students;  // 학생 객체를 저장할 리스트

    // 생성자: 학생 리스트를 초기화합니다.
    public StudentManager() {
        students = new ArrayList<>();
    }

    // 학생을 리스트에 추가하는 메서드
    public void addStudent(Student s) {
        students.add(s);
    }

    // 학생 ID를 기준으로 학생 객체를 반환하는 메서드
    public Student getStudent(int id) {
        for (Student s : students) {
            if (s.getId() == id) {
                return s;
            }
        }
        return null; // ID에 해당하는 학생이 없을 경우 null 반환
    }

    // 학생 ID를 기준으로 학생을 리스트에서 제거하는 메서드
    public void removeStudent(int id) {
        students.removeIf(s -> s.getId() == id);
    }

    // 모든 학생 정보를 출력하는 메서드
    public void printAllStudents() {
        for (Student s : students) {
            System.out.println(s);
        }
    }

    public static void main(String[] args) {
        // StudentManager 객체 생성
        StudentManager manager = new StudentManager();

        // 학생 추가
        manager.addStudent(new Student(1, "Alice", 20));
        manager.addStudent(new Student(2, "Bob", 22));

        // 모든 학생 출력
        System.out.println("All students:");
        manager.printAllStudents();

        // 학생 조회
        Student student = manager.getStudent(1);
        System.out.println("Get student with ID 1: " + student);

        // 학생 삭제
        manager.removeStudent(1);
        System.out.println("All students after removing student with ID 1:");
        manager.printAllStudents();
    }
}
 

설명:

  • Student 클래스: 학생 정보를 저장하는 클래스입니다. id, name, age 필드와 생성자, getter 메서드, toString 메서드를 포함합니다.
  • StudentManager 클래스: 학생 정보를 관리하는 클래스입니다. students 리스트와 학생을 추가, 조회, 삭제, 출력하는 메서드를 포함합니다.
  • main 메서드: StudentManager 객체를 생성하고, 학생을 추가, 조회, 삭제, 출력하는 예제입니다.

10.2 객체 지향 설계와 구현

객체 지향 설계를 통해 프로젝트를 구조화하고, 클래스 다이어그램을 작성합니다. 그 다음, 코드를 구현하고 리팩토링하여 더 나은 구조와 가독성을 갖춘 코드를 만듭니다.

프로젝트 기획 및 설계

프로젝트: 도서 관리 시스템

기능:

  • 도서 정보 추가
  • 도서 정보 조회
  • 도서 정보 삭제
  • 모든 도서 정보 출력

클래스 설계

  • Book 클래스: 도서 정보를 저장하는 클래스
  • Library 클래스: 도서 정보를 관리하는 클래스

클래스 다이어그램

+------------------+
|       Book       |
+------------------+
| - id: int        |
| - title: String  |
| - author: String |
+------------------+
| + Book(id, title,|
|   author)        |
| + getId(): int   |
| + getTitle():    |
|   String         |
| + getAuthor():   |
|   String         |
| + toString():    |
|   String         |
+------------------+

+-------------------------+
|        Library          |
+-------------------------+
| - books: List<Book>     |
+-------------------------+
| + addBook(b: Book)      |
| + getBook(id: int):     |
|   Book                  |
| + removeBook(id: int)   |
| + printAllBooks()       |
+-------------------------+
 

코드 구현 및 리팩토링

 

Book.java

// Book 클래스는 도서 정보를 저장하는 역할을 합니다.
public class Book {
    private int id;          // 도서 ID
    private String title;    // 도서 제목
    private String author;   // 도서 저자

    // 생성자: 도서 객체를 생성할 때 ID, 제목, 저자를 초기화합니다.
    public Book(int id, String title, String author) {
        this.id = id;
        this.title = title;
        this.author = author;
    }

    // 도서 ID를 반환하는 메서드
    public int getId() {
        return id;
    }

    // 도서 제목을 반환하는 메서드
    public String getTitle() {
        return title;
    }

    // 도서 저자를 반환하는 메서드
    public String getAuthor() {
        return author;
    }

    // 도서 정보를 문자열로 반환하는 메서드 (객체 정보를 출력할 때 사용)
    @Override
    public String toString() {
        return "Book{id=" + id + ", title='" + title + "', author='" + author + "'}";
    }
}
 

Library.java

import java.util.ArrayList;
import java.util.List;

// Library 클래스는 도서들을 관리하는 역할을 합니다.
public class Library {
    private List<Book> books;  // 도서 객체를 저장할 리스트

    // 생성자: 도서 리스트를 초기화합니다.
    public Library() {
        books = new ArrayList<>();
    }

    // 도서를 리스트에 추가하는 메서드
    public void addBook(Book b) {
        books.add(b);
    }

    // 도서 ID를 기준으로 도서 객체를 반환하는 메서드
    public Book getBook(int id) {
        for (Book b : books) {
            if (b.getId() == id) {
                return b;
            }
        }
        return null; // ID에 해당하는 도서가 없을 경우 null 반환
    }

    // 도서 ID를 기준으로 도서를 리스트에서 제거하는 메서드
    public void removeBook(int id) {
        books.removeIf(b -> b.getId() == id);
    }

    // 모든 도서 정보를 출력하는 메서드
    public void printAllBooks() {
        for (Book b : books) {
            System.out.println(b);
        }
    }

    public static void main(String[] args) {
        // Library 객체 생성
        Library library = new Library();

        // 도서 추가
        library.addBook(new Book(1, "Java Programming", "John Doe"));
        library.addBook(new Book(2, "Effective Java", "Joshua Bloch"));

        // 모든 도서 출력
        System.out.println("All books:");
        library.printAllBooks();

        // 도서 조회
        Book book = library.getBook(1);
        System.out.println("Get book with ID 1: " + book);

        // 도서 삭제
        library.removeBook(1);
        System.out.println("All books after removing book with ID 1:");
        library.printAllBooks();
    }
}
 

설명:

  • Book 클래스: 도서 정보를 저장하는 클래스입니다. id, title, author 필드와 생성자, getter 메서드, toString 메서드를 포함합니다.
  • Library 클래스: 도서 정보를 관리하는 클래스입니다. books 리스트와 도서를 추가, 조회, 삭제, 출력하는 메서드를 포함합니다.
  • main 메서드: Library 객체를 생성하고, 도서를 추가, 조회, 삭제, 출력하는 예제입니다.

이로써 Java로 기초 프로젝트를 작성하고, 객체 지향 설계와 구현을 연습했습니다. 이를 통해 실제 프로젝트에서 Java를 적용하는 방법을 이해하고, 객체 지향 프로그래밍의 개념을 실습할 수 있게 됩니다. 다음 챕터에서는 Java 성능 최적화에 대해 다루겠습니다.

반응형

'IT 강좌(IT Lectures) > Java' 카테고리의 다른 글

12강. 보안과 암호화  (0) 2024.06.29
11강. Java 성능 최적화  (0) 2024.06.28
9강. 파일 I/O 및 네트워킹  (0) 2024.06.26
8강. 스트림과 컬렉션 프레임워크  (0) 2024.06.25
7강. 동시성 프로그래밍  (0) 2024.06.24