강의 내용
[1] 수평적 구조와 수직적 구조의 설계 방법
[2] 클래스를 계층화하여 사용할 때의 장점
[1] 수평적 구조와 수직적 구조의 설계 방법
클래스를 설계하는 방법
Q. 회사의 사원 클래스를 설계(수평적 구조)한다면?
사원 관리 ERP 시스템을 개발한다면 사원의 구조(VO 클래스)를 만들어야 함
사원의 종류가 많다면 사원의 구조(VO 클래스)를 여러 개 만들어야 함
서로 연관이 없는 개별/독립적으로 설계하면 코드에 중복적인 요소가 발생할 가능성이 높다.
*공통으로 들어가는 부분 : 이름, 나이, 전화번호, 주소, 입사일, 근무부서
*일반 사원이 갖는 데이터 + 특정 데이터
(1) 모든 클래스에 중복되는 부분을 넣어줘야 함
(2) 새로운 요구사항 발생 시 반영하기 어려움(유지 보수의 어려움)
모든 클래스에 새로운 요구사항을 반영해줘야 하므로 클래스가 늘어갈수록 일일히 수정해야 할 범위가 늘어나게 됨
(3) 확장성이 떨어짐(비용, 시간 소모가 큼)
일반사원(이름, 나이, 전화번호, 주소, 입사일, 근무부서)
관리사원(이름, 나이, 전화번호, 주소, 입사일, 근무부서, 관리부서)
비서(이름, 나이, 전화번호, 주소, 입사일, 근무부서, 상급자)
일용직(이름, 나이, 전화번호, 주소, 입사일, 근무부서, 고용기간)
*관리부서 : 관리해야 할 부서에 대한 정보(관리사원만이 필요한 데이터)
*상급자 : 보좌해야 할 상급자에 대한 정보
Q. 회사의 사원 클래스를 설계(수직적 구조)한다면?
새로운 클래스를 만들어 모든 사원들이 가져야 할 공통 기능을 넣음
사원들의 데이터를 넣을 때 각각 VO 공간을 만드는 게 아닌 부모의 것을 가져다 사용함
공통으로 들어가는 부분을 별도의 클래스로 빼놓은 형태
(1) 코드의 중복된 부분을 최소화시킬 수 있다.
(2) 부모에 새로운 요구사항을 반영하면 자식에게도 반영된다.
하위 클래스를 수정할 필요 없이 부모 클래스 한 개만 수정하면 된다.
(3) 부모를 재활용하여 새로운 클래스를 확장시키기 편리하다.
사원을 확장(상속) 시켜 일반, 관리, 비서, 일용직 사원등을 만들 수 있다.
사원(이름, 나이, 전화번호, 주소, 입사일, 근무부서) // 부모
일반사원(사원의 정보를 사용) // 자식
관리사원(사원의 정보를 사용, 관리부서)
비서(사원의 정보를 사용, 상급자)
일용직(사원의 정보를 사용, 고용기간)
[2] 클래스를 계층화하여 사용할 때의 장점
클래스를 계층화하는 것을 상속이라 함
프로그래밍에서 상속 관계를 "is a kind of" 관계라 부른다.
"일반 사원" is a kind of "사원" // 일반 사원은 사원의 종류
"관리 사원" is a kind of "사원" // 관리 사원은 사원의 종류
"비서 사원" is a kind of "사원" // 비서 사원은 사원의 종류
"일용직 사원" is a kind of "사원" // 일용직 사원은 사원의 종류
클래스 단위로 정리한 클래스를 계층화한 그림
사원이라는 클래스를 별도로 만든 후 네 개의 VO 클래스를 만듦
extends 키워드를 통해 상속을 하면 부모 자식 관계가 맺어진다.
부모가 갖는 걸 그대로 사용하면서 자신만이 갖는 컬럼 하나를 덧붙여 사용
모든 사원이 가져야 할 공통 구조를 부모가 갖고 부모가 자녀(하위 클래스)들에게 extends(상속) 함
자녀(하위 클래스)들은 부모의 공간을 사용할 수 있게 된다.
(1) 코드의 중복을 최소화
(2) 새로운 요구사항 발생 시 반영 쉬움(부모에만 넣으면 자식에게도 반영되기 때문에 코드를 수정할 필요 없음)
(3) 확장성이 좋아지지만, 코드가 복잡해진다.
*단일 상속 : 부모를 한 명으로 두고 상속 받는 구조(자바는 단일 상속만 지원)
Employee [name, age, phone, addr, empDate, dept, marriage] // 바구니
RempVO [사원의 정보를 사용 가능] // 일반 사원
MempVO [사원의 정보를 사용 가능, mdept] // 관리 사원
SempVO [사원의 정보를 사용 가능, senior] // 비서 사원
DempVO [사원의 정보를 사용 가능, period] // 일용직 사원
*mdept : 관리 사원이 관리해야 할 부서를 저장하는 데이터 공간
*senior : 상급자가 누군지에 대한 정보를 저장하는 데이터 공간
*period : 고용 기간에 대한 정보를 저장하는 데이터 공간
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/48sS29N