부모가 자식들에게 자신의 것을 사용할 수 있도록 허락하는 것
ex. 중복적인 데이터의 VO를 여러개 만들지 않고 1개의 부모클래스를 통해 상속 받아 사용
일반사원 | 관리사원 | 비서 | 일용직 |
---|---|---|---|
이름 나이 전화번호 주소 입사일 근무부서 | 이름 나이 전화번호 주소 입사일 근무부서 | 이름 나이 전화번호 주소 입사일 근무부서 | 이름 나이 전화번호 주소 입사일 근무부서 |
+관리부서 | +상급자 | +고용부서 |
객체를 설계하다보면 비슷한 클래스의 경우 중복적인 요소가 발생한다.
객체를 수평적구조
로 설계할 경우의 단점
1) 코드의 중복이 발생
2) 새로운 요구사항 발생 시 반영이 어렵다.(유지보수 어려움)
3) 확장성이 떨어진다.
사원
이라는 클래스를 만들어(확장) 동일한 정보를 사용할 수 있게 해주고
개별로 차이가 있는 부분을 추가할 수 있게 해준다.
수직적구조
= 계층화 = 상속(inheritance) = 클래스와 클래스의 관계 설계
사원 | 일반사원 | 관리사원 | 비서 | 일용직 |
---|---|---|---|---|
이름 나이 전화번호 주소 입사일 근무부서 | 이름 나이 전화번호 주소 입사일 근무부서 | 이름 나이 전화번호 주소 입사일 근무부서 | 이름 나이 전화번호 주소 입사일 근무부서 | 이름 나이 전화번호 주소 입사일 근무부서 |
+관리부서 | +상급자 | +고용부서 |
클래스를 계층화하여 수직적구조
로 사용할 때의 장점
하위클래스
가 상위클래스
를 재활용 가능하다.하위클래스
가 상위클래스
를 접근하여 사용 가능하다.super()
: 상위클래스의 생성자를 호출
protected
: 다른 패키지에서는 자식 클래스만 접근 가능
public class Employee {
protected String name;
protected int age;
protected String phone;
protected String empDate;
protected String dept;
protected boolean marriage;
public Employee() {
// super(); --> 기본적으로 생략 되어있음
}
}
public class RempVO extends Employee {
public RempVO(String name, int age, String phone, String empDate, String dept, boolean barriage) {
// super(); --> 기본적으로 생략 되어있음
this.name = name;
this.age = age;
this.phone = phone;
this.empDate = empDate;
this.dept = dept;
this.marriage = marriage;
}
}
RempVO vo = new RempVO();
vo.name="홍길동";
vo.age=33;
vo.phone="010-1234-5678";
vo.empDate="2010.01.01";
vo.dept="홍보부";
vo.marriage=true;
✅ 자식이 부모의 상태정보를 접근 --> 정보은닉에 위배
public class Employee {
private String name;
private int age;
private String phone;
private String empDate;
private String dept;
private boolean marriage;
public Employee() {
// super(); --> 기본적으로 생략 되어있음
}
public Employee(String name, int age, String phone, String empDate, String dept, boolean marriage) {
this.name=name;
this.age=age;
this.phone=phone;
this.empDate=empDate;
this.dept=dept;
this.marriage=marriage;
}
public class RempVO extends Employee{
public RempVO() {
}
public RempVO(String name, int age, String phone, String empDate, String dept, boolean marriage) {
super(name, age, phone, empDate, dept, marriage);
}
}