1. has a 상속
has a관계는 하나의 개체가 기능이 분리가 되어서 두 개로 나누어지면 하나는 제품형이 되며 하나는 부품형이 됩니다 제품은 실제 기능을 구현하는 부분이며 부품은 제품에 이용당하는 쪽이 됩니다. 제품은 부품을 가지는 관계를 가리켜 HAS A 관계라고 합니다.
부품이라는 개념은 상대적이라 부품이 제품이 될수도있습니다.
아래 코드에서 두 클래스 ExamConsole , Exam을 결합시키는 자바 코드입니다.
public class ExamConsole { private Exam[] exams; private int index; public ExamConsole() { exams = new Exam[3]; index = 0; for(int i =0; i<3; i++) exams[i]=new Exam(); }
public class Exam { private int kor; private int eng; private int math; public int total() { return kor + eng + math; } public float avg() { return total() / 3.0f; }
ExamConsole클래스에 Exam [] 변수를 속성으로 추가함으로써 만들어지는 관계가 has a관계입니다.
이후 Exam을 참조하는 참조 변수 3개를 만들어준 뒤 각 exam을 참조하는 객체를 만들어 줍니다.
이젠 ExamConsole 클래스는 Exam클래스를 부품으로 가지게 되어서 Exam의 변수와 메서드를 ExamConsole클래스에서 사용할 수 있게 됩니다. 하지만 ExamConsole에서도 Exam속성이 private으로 보호되어있기 때문에 직접적으로 접근할 수 없는데요 사용할 일이 있으면 이때 getter, setter를 사용해서 값을 지정, 불러올 수 있습니다.
public class Exam { private int kor; private int eng; private int math; public int total() { return kor + eng + math; } public float avg() { return total() / 3.0f; } public int getKor() { return kor; } public void setKor(int kor) { this.kor = kor; } public int getEng() { return eng; } public void setEng(int eng) { this.eng = eng; } public int getMath() { return math; } public void setMath(int math) { this.math = math; }
이제 ExamConsole에서 getter와 setter를 사용해서 내부적으로 기능 구현이 가능해집니다.
1) HAS A 관계의 종류
HAS A 관계는 3가지의 종류가 있습니다.
- Composition has a 관계
- Association has a 관계
- Aggregation has a 관계
Composition has a 관계는 부품을 일체형으로 가져가는 방법입니다.
public class ExamConsole { private Exam exams; private int index; public ExamConsole() { exams = new Exam(); index = 0; }
만약 이 Composition 관계를 Association조립형 관계로 바꾸기 위해서는 조립하는 과정이 추가가 됩니다
public class ExamConsole { private Exam exams; main(){ ExamConsole console = new ExamConsole()' exams = new Exam(); console.setExam(exam); //조립 } public void setExam(Exam exam){ this.exam= exam; } }
setter함수를 추가해서 부품에 결합해주는 방법이 있습니다. 조립하는 방법은 전문용어로는 Dependency Injectionn이라고하고 의존성 주입이라고 합니다.
장점은 제품을 좀더 유연하게만드는 방법이있습니다.
부품을 원할 때 원하는 부품으로 결합해서 사용할 수 있는 장점이 있는 것이죠.
만약 조립된 부품이 변경되지 않도록 고정하는 방법도 있습니다. 바로 생성자에 추가시키는 방법이죠
왜냐하면 생성자는 객체를 생성할 때 단 한 번만 실행되는 코드이기 때문입니다.
class EaxmConsole{ private Exam exam; public ExamConsole(Exam exam){ this.exam = exam; } }
다음 방법의 has a 관계는 Aggregation has a 관계가 있습니다.
집합형이라 불리는 관계입니다 동일한 종류의 부품을 여러 개 가지는 관계입니다.
public class ExamConsole { private Exam[] exams; public ExamConsole() { exams = new Exam[3]; }
ExamConsole 객체가 생성될 때 Exam을 참조하는 참조 변수 3개가 생성이 자동적으로 됩니다.
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 17일차 -31 (0) | 2020.03.18 |
---|---|
자바기반의 웹&앱 응용 SW개발자 양성과정 16일차 -30 (0) | 2020.03.18 |
자바기반의 웹&앱 응용 SW개발자 양성과정 15일차 -28 (0) | 2020.03.17 |
자바기반의 웹&앱 응용 SW개발자 양성과정 14일차 -27 (0) | 2020.03.17 |
에이콘 아카데미 JAVA 복습 2주차 정리 -2 (0) | 2020.03.15 |
댓글