CS

도메인과 엔티티 차이

준몽쓰 2025. 6. 29. 01:27

도메인 (Domain)

- 소프트웨어가 해결하려는 문제 영역, 즉 비즈니스적인 개념이다.

- 현실 세계의 개념을 소프트에어적으로 표현한 것이다.

- 학교 시스템에서 '학생 관리', '수업 운영', '성적 처리' 가 도메인이다.

 

엔티티 (Entitiy)

- 도메인 안에서 고유하게 식별 가능하며, 속성을 가지고 변화되는 데이터를 포함한 객체이다.

- 데이터베이스에서는 '테이블'로 구현될 수 있고, 객체지향프로그램에서는 '클래스'로 표현한다.

- 고유 식별자(ID)가 존재하고, 시간이 지나면 속성 값이 변할 수 있다.

 

도메인 vs 앤티티 관계

- 도메인은 소프트웨어가 해결하려는 업무 영역이고, 엔티티는 그 도메인 안에 식별할 수 있는 객체

 

예시 코드

학생 관리 시스템을 만든다고 할 때 학생 도메인 안에서 주요 객체 정의

● 학생 엔티티: 고유식별자(ID)를 가진 객체로, 실제 테이블(DB)로 매핑 (학생 이름, 나이, 성별 학년 등)

● 학생 서비스 : 비즈니스 로직을 처리하는 계층 (학생 추가, 학생 조회, 학생 삭제 등)

● 학생 레퍼지토리 : 데이터베이스와 상호작용을 하며 보통 인터페이스로 정의되고 실제로 구현하는 클래스가 있다.

 

학생 엔티티 (Student)

public class Student {
    private Long id;         // 고유 식별자 (ID)
    private String name;     // 학생 이름
    private int age;         // 학생 나이
    private String gender;   // 학생 성별
    private String grade;    // 학생 학년

    // 생성자
    public Student(Long id, String name, int age, String gender, String grade) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.grade = grade;
    }

    // Getter, Setter
    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getGender() {
        return gender;
    }

    public String getGrade() {
        return grade;
    }

    // equals()와 hashCode()는 ID를 기준으로 비교
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Student student = (Student) obj;
        return id.equals(student.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

 

학생 서비스 (Student Service)

public class StudentService {
    private final StudentRepository studentRepository;

    // 생성자
    public StudentService(StudentRepository studentRepository) {
        this.studentRepository = studentRepository;
    }

    // 학생 추가
    public void addStudent(Student student) {
        studentRepository.save(student);
    }

    // 학생 조회
    public Student getStudent(Long id) {
        return studentRepository.findById(id);
    }

    // 학생 목록 조회
    public List<Student> getAllStudents() {
        return studentRepository.findAll();
    }

    // 학생 삭제
    public void deleteStudent(Long id) {
        studentRepository.delete(id);
    }
}

 

학생 레포지토리(Strudent Repository)

public interface StudentRepository {
    void save(Student student);
    Student findById(Long id);
    List<Student> findAll();
    void delete(Long id);
}

'CS' 카테고리의 다른 글

[Docker] 도커를 왜 사용할까?  (1) 2024.11.05
디자인 패턴 - 싱글톤 패턴 (Singleton Patton)  (2) 2023.04.29
프로세스 스케줄링  (0) 2023.04.01
운영체제 (OS: Operating System)  (0) 2023.03.18
MVC 패턴  (0) 2023.02.20