일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 프로젝트
- 프론트엔드
- 패캠부트캠프
- js코테
- FE
- 패스트캠퍼스
- 영상처리
- 개발블로그
- 부트캠프
- 프로그래머스 JS 코테
- 깃
- 개인프로젝트
- 국비지원취업
- 코딩테스트
- 자바스크립트
- pokeapi
- 자바스크립트 코딩테스트
- 개발 프로젝트
- 패캠
- 프론트엔드개발자
- 깃허브
- 국비지원
- 프론트엔드부트캠프
- 딥러닝
- 패스트캠퍼스부트캠프
- JS
- 프로그래머스코테
- Java
- 프로그래머스
- 미니 프로젝트
- Today
- Total
가쟤의 해변일기 🐳
풀스택과정 3주차 - 생성자 오버로딩 | MVC 구조 코드 작성 | 서비스 클래스와 싱글톤 본문
💡 2025 04 21
1. 생성자 오버로딩
2. MVC 구조 코드 작성 Review
3. 서비스 클래스와 싱글톤
생성자 오버로딩
필수 정보, 필수가 아닌 정보가 있을 수 있는데... 이 때 → 생성자 오버로딩을 사용!
이름, 주소, 아이디, 전화번호 가 있는데, 이름, 아이디만 필수 정보라면 →
이름, 아이디만 있는 메소드, 이름, 주소, 전화번호, 아이디가 있는 메소드..
이렇게 생길 수 있으니 생성자 오버로딩
화면으로부터 입력된 필수 정보만으로 vo 객체를 생성하려면
생성자 오버로딩에 대한 이해와 사용법을 반드시 알아야한다!
서버에서 데이터에 저장하는 값 vo
브라우저에서 서버로 vo로 날리고
DB에 하나의 행(컬럼)으로 들어감
필드에 있는 값이 화면으로 출력
생성자명은 동일하고 인자값 리스트는 서로 다르다 --> 생성자 오버로딩
필수값만으로 객체를 생성할 때 사용한다.
나머지 필드는 초기화가 안 되기 때문에 기본값
결과적으로 데이터베이스 테이블 컬럼에 기본값이 들어갈 것이다...
근데??? 데이터분석에서 중요한 건 null값이 들어가면 안 됨!! → 결측치 제거.. 해야 하는데 이 과정에서 데이터 손실이 일어나니까…
그래서 디폴트 값을 줘야 한다 !!!
package com.edu.overloading.test;
import com.edu.overloading.Employee;
public class EmployeeTest1 {
public static void main(String[] args) {
Employee e1 = new Employee(232);
Employee e2 = new Employee(7369, "SCOTT");
Employee e3 = new Employee(7521, "ADAMS", 30000.0, "Brandon");
System.out.println(e1.getDetails());
System.out.println(e2.getDetails());
System.out.println(e3.getDetails());
}
}
package com.edu.overloading;
// 직원에 대한 정보를 저장하는 클래스
public class Employee {
private int empno;
private String name;
private double salary;
private String address;
/////// 필드 기본값 설정 ///////
public final static String DEFAULT_NAME = "홍길동"; // 상수값
public final static double BASIC_SALARY = 100.0;
public final static String DEFAULT_ADDRESS = "서울시";
/*
* Employee 생성자는 3개
* 생성자명은 동일하고 인자값 리스트는 서로 다르다
* --> 생성자 오버로딩
*
* 필수값만으로 객체를 생성할 때 사용
*/
public Employee(int empno) {
// this.empno = empno;
// 생성자() 앞에 쓰이는 this
this(empno, DEFAULT_NAME, BASIC_SALARY, DEFAULT_ADDRESS);
};
public Employee(int empno, String name, double salary, String address) {
this.empno = empno;
this.name = name;
this.salary = salary;
this.address = address;
}
public Employee(int empno, String name) {
this.empno = empno;
this.name = name;
}
public String getDetails() {
return empno + ", " + name + ", " + salary + ", " + address;
}
} // class
싱글톤
: “단 하나의 객체”만 만들도록 강제하는 설계 방법이다.
여러 번 new 해서 객체를 생성하는 것이 아닌,
딱 하나의 인스턴스만 생성해서 모든 곳에서 공유하게 만든다.
왜??
1. 객체 하나만 있으면 되는 경우
직원 목록 관리, 추가, 검색 등 기능을 하나의 인스턴스에서 공유하면 되니까 굳이 여러 개 만들 필요가 없음 !
2. 자원 낭비 줄이기
객체를 계속 만들면 메모리 낭비. 딱 하나만 만들면 효율적 !
클라이언트가 회원가입, 혹은 회원 검색 서비스를 서버에 요청할 수 있다.
이 때 여러 명의 클라이언트가 서비스를 아무리 많이 요청한다고 해도
EmployeeService 인스턴스는 오직 단 하나만 생성 되어야 한다.
이유는 서비스 요청과 연결되는 것은 클래스의 메소드이기 때문이다.
즉, 회원가입이 10번 이루어져도 EmployeeService 객체는 단 하나만 생성되고,
그 안에 addEmployee 메소드만 10번 호출된다.
이때, 서로 다른 정보를 가지는 vo가 생성되고 함수가 호출될 때 인자값으로 넘겨진다.
하나의 클래스를 통해서 단 하나의 객체만 생성되도록강제하는 패턴을 싱글톤 패턴이라고 한다.
아주 중요한 패턴으로써 앞으로 많이 사용할 것이다.
클라이언트 요청이 있기 전 EmployeeService 객체는 이미 메모리에 한 번 올라가 있다. → process 단위로 이해하자.
회원가입 요청이 있으면 EmployeeService 클래스 안에 addEmployee 메소드가 요청을 수행한다. → 스레드 단위로 이해하자
회원가입이 다 끝나면(서비스 수행이 끝나면) 메소드는 메모리에서 자동으로 소멸된다.
.toString() 주소값 뒤에 기본으로 붙어있음.
주소값을 숫자와 문자의 조합으로 변환해줌.
1단계 - 하나 만들기 private static EmployeeService = new EmployeeService();
2단계 - 다른 데서 new 못하게 막기 private EmployeeService()
3단계 - 가져다 쓸 수 있게 제공 public static EmployeeService getInstance()
Employee.java
package com.edu.vo
public class Engineer {
private int empno;
private String name;
private String mainSkill
public Engineer() {
};
public Engineer(int empno, String name, String mainSkill) {
this.empno = empno;
this.name = name;
this.mainSkill = mainSkill;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMainSkill() {
return mainSkill;
}
public void setMainSkill(String mainSkill) {
this.mainSkill = mainSkill;
}
public MyDate getBirthDate() {
return birthDate;
}
public void setBirthDate(MyDate birthDate) {
this.birthDate = birthDate;
}
@Override
public String toString() {
return "Engineer [empno=" + empno + ", name=" + name + ", mainSkill=" + mainSkill + ", birthDate=" + birthDate
+ "]";
}
}
SalesMan.java
package com.edu.vo;
public class SalesMan {
private int empno;
private String name;
private int bonus;
public SalesMan() {
};
public SalesMan(int empno, String name, int bonus) {
this.empno = empno;
this.name = name;
this.bonus = bonus;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBonus() {
return bonus;
}
public void changeBonus(int bonus) {
this.bonus = bonus;
}
public MyDate getBirthDate() {
return birthDate;
}
public void setBirthDate(MyDate birthDate) {
this.birthDate = birthDate;
}
@Override
public String toString() {
return "SalesMan [empno=" + empno + ", name=" + name + ", bonus=" + bonus + ", birthDate=" + birthDate + "]";
}
}
HRServiceTest.java
package com.edu.service.test;
import com.edu.service.HRService;
import com.edu.vo.Engineer;
import com.edu.vo.SalesMan;
public class HRServiceTest3 {
public static void main(String[] args) {
// 1. HRService 객체를 하나 받아온다.
HRService service = HRService.getInstance();
// 2. addEngineer() 호출(3번) - 3명 등록
service.addEmployee(new Engineer(111, "박영일", "운전"));
service.addEmployee(new Engineer(222, "박영이", "남땜"));
service.addEmployee(new Engineer(333, "박영삼", "수리"));
// 3. addSalesMan() 호출(2번) - 2명 등록
service.addEmployee(new SalesMan(123, "양관식", 20000));
service.addEmployee(new SalesMan(234, "박금명", 35000));
// 4. 2번째 Engineer의 mainSkill을 변경
service.updateEmployee(new Engineer(222, "박영이", "정비"));
// 5. 1번째 SaleMan의 bonus를 변경
service.updateEmployee(new SalesMan(123, "양관식", 55000));
// 6. 모든 Engineer, SalesMan의 정보를 콘솔로 출력
System.out.println("=======================");
service.getEngineers();
service.getSalesMans();
}
}
'풀스택과정' 카테고리의 다른 글
풀스택과정 3주차 - Homogeneous Collection | Heterogeneous Collection | Polymorphism | Object Casting | Virtual Method Invocation (0) | 2025.04.25 |
---|---|
풀스택과정 3주차 - CRUD | 상속 (0) | 2025.04.23 |
풀스택 과정 2주차 - Class DataType Array | MVC | 메소드 오버로딩 (0) | 2025.04.21 |
풀스택과정 2주차 - JavaDoc | Array | 가위바위보 리팩토링 팀작업 (2) | 2025.04.16 |
풀스택과정 2주차 - 조건문 | 반복문 | Encapsulation (1) | 2025.04.15 |