(설계 관점에서) 클래스의 종류
1. 구현 클래스
모든 매서드가 이미 구현되어져 상속된다. 일반적인 클래스.
2. 추상 클래스
단 1개라도 구현되지 않은 매서드가 존재하는 것. 매서드 명은 있으나 기능을 구현하지 않은 것 → 판단의 여지를 남겨두는 상황. 구현 안 된 매서드가 있으므로 객체 생성이 안 됨(실체화 불가), 무조건 상속을 전제로 만들어진 클래스.
3. 인터페이스 클래스
모든 매서드가 구현되어 있지 않음. Spec, 상세서, 명세서를 작성할때 사용. 클래스와 클래스 간의 통신하는 방식을 의미.
추상 클래스 예시
>>> 정규직, 계약직, 파트타임 세 가지 유형의 직원을 가진 회사의 급여산정 프로그램을 만든다고 해보자. 고용유형 별 급여 산정 기준이 다르기 때문에 부모클래스인 직원클래스에서 매서드를 구현하지 않고 추상클래스로 생성한다. 그리고 정규직, 계약직, 파트타임 각각의 클래스에서 상속받은 급여산정 매서드를 클래스의 특성에 맞게 구현한다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 public abstract class Employee { protected String empno; protected String name; protected int pay; public Employee(String empno, String name, int pay) { this.empno = empno; this.name = name; this.pay = pay; } public abstract double getMoneyPay(); public String toString() { return empno+" : "+name+" : "+pay; }} public class RgularEmployee extends Employee { private int bonus; public RgularEmployee(String empno, String name, int pay, int bonus) { super(empno, name, pay); this.bonus = bonus; } @Override public double getMoneyPay() { double mPay = (pay/(double)12)+(bonus/(double)12); return mPay; }} public class TempEmployee extends Employee { private int hireYear; public TempEmployee(String empno, String name, int pay, int hireYear) { super(empno, name, pay); this.hireYear = hireYear; } @Override public double getMoneyPay() { double mPay = pay/(double)12; return mPay; }} public class PartTimeEmployee extends Employee { private int workDay; public PartTimeEmployee(String empno, String name, int pay, int workDay) { super(empno, name, pay); this.workDay = workDay; } @Override public double getMoneyPay() { double mPay = pay*workDay; return mPay; }} public class EmployeeMain { public static void viewPay(Employee[] emps) { for(Employee emp : emps) { System.out.println(emp+" : "+emp.getMoneyPay()); System.out.println("-----------------------"); } } public static void main(String[] args) { Employee[] emps = new Employee[4]; emps[0] = new RgularEmployee("E001", "홍길동", 300, 500); emps[1] = new TempEmployee("E002", "임꺽정", 4000, 3); emps[2] = new PartTimeEmployee("E003", "황진이", 7, 15); emps[3] = new PartTimeEmployee("E004", "어우동", 5, 10); viewPay(emps); }} cs
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | public abstract class Employee { protected String empno; protected String name; protected int pay; public Employee(String empno, String name, int pay) { this.empno = empno; this.name = name; this.pay = pay; } public abstract double getMoneyPay(); public String toString() { return empno+" : "+name+" : "+pay; } } public class RgularEmployee extends Employee { private int bonus; public RgularEmployee(String empno, String name, int pay, int bonus) { super(empno, name, pay); this.bonus = bonus; } @Override public double getMoneyPay() { double mPay = (pay/(double)12)+(bonus/(double)12); return mPay; } } public class TempEmployee extends Employee { private int hireYear; public TempEmployee(String empno, String name, int pay, int hireYear) { super(empno, name, pay); this.hireYear = hireYear; } @Override public double getMoneyPay() { double mPay = pay/(double)12; return mPay; } } public class PartTimeEmployee extends Employee { private int workDay; public PartTimeEmployee(String empno, String name, int pay, int workDay) { super(empno, name, pay); this.workDay = workDay; } @Override public double getMoneyPay() { double mPay = pay*workDay; return mPay; } } public class EmployeeMain { public static void viewPay(Employee[] emps) { for(Employee emp : emps) { System.out.println(emp+" : "+emp.getMoneyPay()); System.out.println("-----------------------"); } } public static void main(String[] args) { Employee[] emps = new Employee[4]; emps[0] = new RgularEmployee("E001", "홍길동", 300, 500); emps[1] = new TempEmployee("E002", "임꺽정", 4000, 3); emps[2] = new PartTimeEmployee("E003", "황진이", 7, 15); emps[3] = new PartTimeEmployee("E004", "어우동", 5, 10); viewPay(emps); } } | cs |
'Programming > Java * Spring' 카테고리의 다른 글
[Java] 11. 예외처리(Exception) 상속구조, finally, throws (0) | 2019.03.29 |
---|---|
[Java] 10. 인터페이스(Interface), 의존성 주입 (0) | 2019.03.28 |
[Java] 08. 매서드 오버라이딩(Method Overriding), 오버로딩과의 차이 (0) | 2019.03.26 |
[Java] 07. Is Kind Of 관계, Has A 관계 (0) | 2019.03.26 |
[Java] 06. String, StringBuilder 속도 비교 (0) | 2019.03.25 |