추상화
1. 네모,세모,원,선을 만들다 보니 동일한 서비스들이 있다→ 동일한 기능을 일괄적으로 관리하기위해 추상화된 자료형 도형을 만들다.
2. 성적관리프로그램을 만들다→ 성적관리프로그램을 기반으로 만들어지는 제품을 위해 (다음에도 계속 사용하기위해)→ 공통분모화,추상화를하다.
DI (조립)
1. Constructor (생성자 종속성 조립)
2. Setter DI
- 추상클래스는 추상메소드를 가지고 있다.
- protected : 자식만 구현하도록 추상부모클래스에서 메소드에 제한거는것. 자식에게만 공
- 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능
- 부모의 private 멤버변수는 자식에게도 안보인다.
- 클래스가 상속할 (자식을 낳을) 준비가 되지않았다면 , 재사용하기 불가능할 수 있다.
- 객체가 YBMExam일때 출력도구도 달라져야한다.
- YBMExam전용 콘솔도구를 만들어야한다. 그때 ExamConsole이 재사용할 준비가 안되었다면 자식이 재사용할수 없게된다.
고쳐쓰는 방법 1 : 추상화
사용자를 위한 껍데기부분을 만들때 상속이 많아지는 문제가 발생한다.
Exam class에 abstract를 지우고 시작.
출력을 위한 ExamConsole class{ }를 만들고 Exam class에 getter, setter를 추가한다.
Exam은 아직 객체를 갖지않았다.
객체를 갖는방벙 2가지
1. 객체를 자기가 만들거나
2. 남이 객체를 만들어서 넘겨주는것
ExamConsole console = new ExamConsole(exam);
ExamConsole 은 exam없이는 살 수없다.
exam을 생성할때 한번 꽂으면 더이상 다른 exam으로 대체할 수 없다.
Constructor DI : Dependency(종속성) Injection(주입) 생성자 종속성 주입
부품을 껴넣다.
AssoAssociation Has A 관계를 Injection하는것 => DI라고 한다.
ExamConsole은 exam을 분리형태로 부품으로 쓴다. 조립형
console.setExam(exam);
언제든지 다른 객체로 바꿀 수 있다.
다양한 객체를 부품으로 사용한다.
Dependency: 재료가 되는 객체를 말한다. (has a)
exam은 ExamConsole이 자기 부품으로 쓰는것
Random은 함수를 일시적으로 쓰는것.
필드를 사용하는 초기화하는 생성자
마우스오른쪽 -> source -> Generate constructor using fields
ExamConsole()와 ExamConsole(Exam exam) 생성자 공존 할 수없다.
Exam exam은 null이고
객체를 꽂을 수 있는 방법은 ExamConsole(Exam exam) 를 통해서만 가능하다.
ExamConsole()를 지우면 사용자는 ExamConsole(Exam exam)을 통해서만 객체를 생성할 수있다.
(기본생성자를 지우면 exam을 넣어야하는상황이된다)
ExamConsole()를 가능하게 한다면
생성할때 exam을 껴놓는 이유 ? (exma)
exam을 생성자를 통해서만 만들게 했을까 ?
ExamConsole의 모든기능은 exam없이는 사용할 수없다.
e.g 스캐너도 기본생성자가없다. 입력스트림객체를 넣어줘야한다. 꽂지않으면 오류발생
객체를 넘겨줘야만 사용할 수 있다.
ExamConsole은 exam없이 독단적으로 사용가능?
사용할 수 없다.
ExamConsole은 반드시 생성하자 마자 exam을 갖고있어야 한다.
만약 누군가가 기본생성자를 호출한다면 내가 만들어주는것으로
public ExameConsole(){ exam = new Exam(); }
기본생성자를 저렇게만들면 밖에서 ()으로만으로도 할수있음
만들기나름,기획하기나름,선택가능
Setter를 통해 객체전달
public abstract int total();
total은 국,영,수뿐만 아니라 다른과목도 추가할 수 있어야한다.
국,영,수 합계를 자식이 직접계산할 필요는 없다. YBM ,다른고등학교에서는 과목이 달라질것이므로 고쳐쓸 수 있게한다.
상속을 통해 고쳐쓴다.
protected
baseTotal()이 public이면 상속받는 자식에게만 구현하도록 만든 서비스이다.
자식에게만 보이게하는 키워드
내가 공통분모고 abstact, 자식만 구현하록하고싶을때 사용
고쳐쓰는방법 2 : 인터페이스
객체를 YBMExam으로 바꿨는데, 여전히 국,영,수만 출력이된다.
기존코드를 고치는 방법에 대해 ..
콘솔: 사용자에게 출력하는코드
exam은 자식을 계속 낳을 수 있다.
examConsole은 어떤객체(어떤자식)이꽂아질지모른다.
프린트가 부모영역으로만 한정된출력을가지고 있다.
달라져야한다 프린트의 기능이 객체종류에 따라 달라질 필요가 있다
저안에 들어갈 국영수외에 확장될부분을 너가 책임져줘.
단 구현해놔. 구현하지않으면 안하는거고~
자바는 함수만 꽂는건불가능 클래스안에 넣어야한닫.
onPrint를 구현해줘
누군가가 함수를 구현해서 객체를 넣어주기만 하면 ExamConsole을 재사용할 수있다.
public interface PrintListener
함수에대한 약속만 나열한것 (구현x)
'2021 Newlecture > JAVA' 카테고리의 다른 글
(추가정리)this키워드 (0) | 2021.04.10 |
---|---|
(추가정리) 패키지와 static (0) | 2021.04.10 |
인터페이스 (0) | 2021.04.08 |
protected method() / 자식에게 부모 객체넘겨주기 (0) | 2021.04.07 |
추상화 / abstract class/ abstract method (0) | 2021.04.05 |
Is a , has a 상속 정리 / 함수 호출 관계/ 동적바인딩 / 부모형식의 참조변수 (0) | 2021.04.02 |
오버로드/매개변수 있는 생성자/super(int value)/ Frame클래스 상속 후 오버라이딩 (0) | 2021.04.01 |
Is a 상속관계 / Override / super() (0) | 2021.03.31 |