3:1:01 ~ 3:1:13
이론 정리
어제 코드를 확장해서 arrayList에 넣어보기 도전!
07 상속은 언제 사용할가
객체 지향에서는 크게 2가지의 상속관계가 있습니다.
IS-A 관계 : is a relationship : inheritance
클레스간의 관계가
- 일반적이고 구체적인
- 베이스와 드라이브 클레스의 역활이 어울리는 경우.
- 옷 - > 드레스
- 직원 → 사장
- 등, 다양한 타입과 분류명으로 쉽게 정리 가능
상위클레스는 일반적 하위 클레스에서는 구체적인 경우.
상위 클레스가 재사용이 가능한 경우
계층 구조가 너무 복잡하지 않은 경우
포함과 상속의 차이점에 대해서는 조금더 이해가 필요한것 같다.
HAS-A 관계 : composition(컴포지션)
- 상속과 포함 이라는 관계에서. 클레스간의 포함 관계 만을 활용한 경우에 속한다
- 상위 클레스 속성으로 arrayList 인스턴스를 만들때도. arrayList를 상속하지는 않기 때문에 여기에 속한다.
- 재사용을 염두하지 않고 클레스 내부에 클레스를 포함 시켜 사용하는 경우.
- 개발 규모가 복잡하지 않거나 , 추가 될 기능이 한정적이기 때문에 나이브 하게 해도 되는 경우.
- IS-A관계 보다 HAS-A관계가 일반적으로 개발편의성이 높기 때문에 IS-A관계보다 HAS-A관계가 개발 환경에서는 많이 보이지만 장기간 운영, 기능 추가, 복잡한 시스템의 제작에는 사용할수 없습니다. 게임들이 업데이트를 아무리해도 퍼포먼스가 좋아지지 않는 이유
- 뼈대를 잘 만들어서 살을 붙이는 방법으로 만들자.
- HAS-A , IS-A둘다 동시에 사용하기도 한다.
- student > HAS-A > student_A > IS-A > subject
다운 캐스팅 instanceof
업케스팅는 implicit 하게 발생한다. implict : (암묵적) *implicitly(*명시적이지 않게 : 자동)
- ㄴ 쉽게 이야기 하자면 대입(assign : = ) 하는것으로 업케스팅은 작동 됩니다.
이번 쳅터에서는 명시적으로 (수동으로) 수행되는 다운 케스팅에 대한 사용방법을 학습하게 됩니다.
다운 캐스팅은 암묵적으로 사용할수 없을까요?
예시 ) subClass reperanceValue =(subClass)SuperClass;
ㄴ 상황: 하위 클레스 참조변수에 상위 클레스를 형변환 시켜 넣는 상황
ㄴ 결과: 정상작동. 업케스팅() 되었던 참조변수에 한해서 다운 케스팅이 작동됨
이 문법으로 인해 다운 케스팅을 진행할때 문제가 발생할수 있습니다.
개선 ) 아직 형변환이 작동되지는 않지만 . 오류는 피할수 있다.
if(reperanceValue instanceof subClass){
subClass reperanceValue = (subClass)SuperClass;
reperanceValue.method();
}
다운 케스팅 테스트 코드
package TEST_0208;
import java.util.ArrayList;
public class Do {
public static void main(String[] args) {
Do do_1 = new Do();
SuperClass_A reperanceValueA = new SubClass_A();
SuperClass_A reperanceValueB = new SubClass_B();
SuperClass_A reperanceValueC = new SubClass_C();
ArrayList<SuperClass_A> ClassList = new ArrayList<SuperClass_A>();
ClassList.add(reperanceValueA);
ClassList.add(reperanceValueB);
ClassList.add(reperanceValueC);
for (int i = 0; i < ClassList.size(); i++) {
ClassList.get(i).showMyClassName();
System.out.println(ClassList.get(i).name);
}
//ㄴ 업케스팅
do_1.downCasting(ClassList);
//ㄴ 다운 케스팅
}
void downCasting(ArrayList<SuperClass_A> ClassList) {
for (SuperClass_A A : ClassList) {
if(A instanceof SubClass_A) {
SubClass_A SCA = (SubClass_A)A;
SCA.method_SubClass_A();
}else {
A.showMyClassName();
System.out.println("인스턴스에 해당하는 타입이 지정되지 않았습니다");
}
}
}
}
오브젝트 클레스는 모든 클레스의 최상위 클레스 이다.
해외에서는 다운 케스팅과 업 케이스팅 둘중에 어떤것을 사용할지 싸우고 있다.
추상 클레스
abstract 클레스
메서드를 만들때 구현부를 하지 않고. 하위 클레스에서 오버 라이딩 처럼 메서드를 구현할수있게 만들기 위해 구현하지 않는 클레스의 앞에 붙여줘야 하는것.
정의(definition) : 구현부 까지 있다.
선언(declaration) : 구현부가 없다.
메서드를 선언하는 클레스 라고 할수 있다.
public abstract class super{
abstract void print();
}
전문 용어
에러 메세지
학습 시간
타이머를 그만 누르지 않고 말았습니다. OTL..(언제적 이모티콘)
캠 스터디
공부 모임
1) 카카오톡 오픈 채팅방
- 모르는것을 질문하거나
- 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도
2) 구루미 온라인 독서실
- 학습 시간을 관리 하거나 경쟁 하는 용도
온라인 강의 주소
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'학습방법 > 데일리 미션' 카테고리의 다른 글
[ 패스트캠퍼스 챌린지 19일차 ] 3:1:01 ~ 3:1:13 (0) | 2022.02.11 |
---|---|
[ 패스트캠퍼스 챌린지 18일차 ] 3:1:01 ~ 3:1:13 (0) | 2022.02.10 |
[ 패스트캠퍼스 챌린지 16일차 ] 3:1:01 ~ 3:1:13 (0) | 2022.02.08 |
[ 패스트캠퍼스 챌린지 15일차 ] 3:1:01 ~ 3:1:13 (0) | 2022.02.07 |
[ 패스트캠퍼스 챌린지 14일차 ] 3:1:01 ~ 3:1:13 (0) | 2022.02.06 |