도메인 (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 |