상속

강9·2023년 12월 5일
0

Java

목록 보기
56/71
post-thumbnail

🔖 수평적 구조와 수직적 구조의 설계방법


💡 상속이란?

부모가 자식들에게 자신의 것을 사용할 수 있도록 허락하는 것

ex. 중복적인 데이터의 VO를 여러개 만들지 않고 1개의 부모클래스를 통해 상속 받아 사용


📌 회사의 사원 클래스를 설계(수평적구조)한다고 가정해보자.

일반사원관리사원비서일용직
이름
나이
전화번호
주소
입사일
근무부서
이름
나이
전화번호
주소
입사일
근무부서
이름
나이
전화번호
주소
입사일
근무부서
이름
나이
전화번호
주소
입사일
근무부서
+관리부서+상급자+고용부서
  • 객체를 설계하다보면 비슷한 클래스의 경우 중복적인 요소가 발생한다.

  • 객체를 수평적구조로 설계할 경우의 단점
    1) 코드의 중복이 발생
    2) 새로운 요구사항 발생 시 반영이 어렵다.(유지보수 어려움)
    3) 확장성이 떨어진다.


📌 상속(Extends)

사원이라는 클래스를 만들어(확장) 동일한 정보를 사용할 수 있게 해주고
개별로 차이가 있는 부분을 추가할 수 있게 해준다.

수직적구조 = 계층화 = 상속(inheritance) = 클래스와 클래스의 관계 설계

사원일반사원관리사원비서일용직
이름
나이
전화번호
주소
입사일
근무부서
이름
나이
전화번호
주소
입사일
근무부서
이름
나이
전화번호
주소
입사일
근무부서
이름
나이
전화번호
주소
입사일
근무부서
이름
나이
전화번호
주소
입사일
근무부서
+관리부서+상급자+고용부서

🔖 클래스 계층화

  • 클래스를 계층화하여 수직적구조로 사용할 때의 장점

    1. 코드의 중복 최소화
    2. 새로운 요구사항 발생 시 반영이 쉽다.(유지보수 쉬움)
    3. 확장성이 좋아진다. (단, 코드가 복잡해진다.)

🔖 메모리를 통한 상속(extends)의 이해

상속 : UML(Unified Modeling Language)

  • 상속을 사용하면 하위클래스상위클래스재활용 가능하다.
  • 하위클래스상위클래스접근하여 사용 가능하다.

🔖 상속관계에서의 객체 생성

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);
    }


}
profile
코린이 일기

0개의 댓글