서비스 클래스와 싱클톤
다음과 같이 Client(프론트)에서 값을 입력하고 함수를 호출하면,
Server에 있는 메서드를 실행하게 된다.
이때, Service 객체는 단 하나만 생성되어 공유되는데,
이러한 구조를 구현할 때 사용하는 대표적인 디자인 패턴이 바로 **싱글톤(Singleton)**이다.
즉, 싱글톤은 클라이언트가 어떤 요청을 하든 단 하나의 인스턴스만 가지기 때문에, 항상 같은 객체를 통해 기능을 처리하게 된다.
싱글톤을 왜 쓰는가?
- 동일한 기능이나 데이터가 여러 곳에서 동일하게 유지되어야 할 때
- 불필요한 객체 생성을 방지(메모리 절약)
- 상태의 일관성 유지
싱글톤을 반영한 서비스 코드는 다음과 같다. private static 으로 서비스 객체를 생성하는 것이 중요하다.
import com.edu.vo.Engineer;
import com.edu.vo.SalesMan;
public class HRService {
Engineer[] engineers = null;
int eidx = 0;
SalesMan[] salesMans = null;
int sidx = 0;
private static HRService service= new HRService(10);
private HRService(int size) {
//최대 사이즈를 받아서 그 사이즈로 배열 생성
engineers = new Engineer[size];
salesMans = new SalesMan[size];
}
public static HRService getInstance() {
return service;
}
public void addEmployee(Engineer engineer) {
//engineer를 배열에 추가하고 인덱스를 하나증가
if(eidx == engineers.length) {
System.out.println("더이상 엔지니어 등록을 할 수 없습니다");
}else {
engineers[eidx++] = engineer;
System.out.println(engineer.getName()+"님이 등록 되셨습니다");
//앞으로 - 명의 자리가 남았습니다
}
}
public void addEmployee(SalesMan salesMan) {
if(sidx == salesMans.length) {
System.out.println("더이상 엔지니어 등록을 할 수 없습니다");
}else {
salesMans[sidx++] = salesMan;
System.out.println(salesMan.getName()+"님이 등록 되셨습니다");
//앞으로 - 명의 자리가 남았습니다
}
}
public void updateEmployee(Engineer engineer) {
//empno로 수정할 애를 찾아서 mainSkill수정
for(Engineer e: engineers) {
if(e == null) continue;
if(e.getEmpno() == engineer.getEmpno())
e.changeMainSkill(engineer.getMainSkill());
}
}
public void updateEmployee(SalesMan salesMan) {
//empno로 수정할 애를 찾아서 mainSkill수정
for(SalesMan s: salesMans) {
if(s == null )continue;
if(s.getEmpno() == salesMan.getEmpno())
s.changeBonus(salesMan.getBonus());
}
}
public Engineer getEngineer(int empno) {
for(Engineer engineer: engineers) {
if(engineer.getEmpno() == empno)
return engineer;
}
return null;
}
public SalesMan getSalesMan(int empno) {
for(SalesMan salesMan: salesMans) {
if(salesMan.getEmpno() == empno)
return salesMan;
}
return null;
}
public Engineer[] getAllEngineers() {
return engineers;
}
public SalesMan[] getAllSalesMans() {
return salesMans;
}
//Engineer만 구현했다.
public void deleteEmploy(int empno) {
int find = -1;
for(int i=0; i<eidx; i++) {
if(engineers[i].getEmpno() == empno)
find = i;
}
if(find == -1)
return ;
for(int j=find; j<eidx; j++) {
engineers[j] = engineers[j+1];
}
eidx--;
}
}
위의 코드를 보면 CRUD가 구현되어있는 것을 볼 수 있다.
기본 기능 5가지
1. 생성(Create)
2. 수정 (Update)
3. 삭제 (Delete)
4. 한 명 읽기 (Read)
5. 모두 읽기 (Read)
1,2,3은 DB에서 조작(manipulate)하는 작업이고 4,5는 불러오기만 하는 것이 차이다.
'KOSA FullStack 교육 > java' 카테고리의 다른 글
KOSA fullStack 교육(static, interface, abstract class) (0) | 2025.04.24 |
---|---|
KOSA fullStack 교육(상속) (0) | 2025.04.23 |
KOSA fullStack 교육 6일차(Document 주석, 배열) (0) | 2025.04.16 |
KOSA fullStack 교육 4일차(Scanner, 메모리 할당) (1) | 2025.04.15 |
KOSA fullStack 교육 3일차(객체 생성의 원리 및 생성자) (0) | 2025.04.11 |