Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- singletone
- 셔뱅
- access modifier
- arraycopy
- 스트림
- constructor
- shebang
- 파이참
- 엔드포인트
- public static final
- 얕은 복사
- identityHashCode
- has-a
- Java
- Inbound
- pycharm
- down casting
- Wrapper class
- node.js
- 자바
- dbeaver
- finalize
- parameter group
- 내부클래스
- Stream
- Up Casting
- extends
- generic programming
- 깊은 복사
- lambda
Archives
- Today
- Total
٩(๑•̀o•́๑)و
20200305 본문
다형성(polymorphism)
- 하나의 코드가 여러 자료형으로 구현되어 다른 실행으로 이어지는것
- 같은 코드에서 여러 실행결과가 나옴
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
- 객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징
- 다양한 여러 클래스를 하나의 자료형(상위 클래스)으로 선언하거나 형변환 하여 각 클래스가 동일한 메서드를 오버라이딩 한 경우, 하나의 코드가 다양한 구현을 실행할 수 있음
- 유사한 클래스가 추가되는 경우 유지보수에 용이하고 각 자료형마다 다른 메서드를 호출하지 않으므로 코드에서 많은 if 문이 사라짐
상속은 언제 사용?
- IS-A 관계일 경우(is a relation shop : inheritance)
- 일반적인(general)한 개념과 구체적인(specific)개념과의 관계일 경우
- 상위 클래스 : 일반적인 개념 클래스(ex. 동물)
- 하위 클래스 : 구체적인 개념 클래스(ex. 고양이)
- 단순히 코드를 재사용하는 목적으로 사용하지 않음. 클래스간의 상속관계가 만들어지만 클래스간의 관계가 굉장히 타이트해지면서 메서드의 추가로 인하여 서로간에 영향을 줄 수 있기때문에 단순히 코드를 재사용하려는 목적으로는 상속관계를 만들지 않음
- HAS-A관계(composition)
- 한 클래스가 다른 클래스를 소유한 관계. 포함해서 사용
- 코드 재사용의 한 방법. 많이 사용되는 방법
- ex. Student 클래스가 Subject 클래스를 포함한 관계
==> 상속을 사용할 경우 클래스간의 관계가 굉장히 타이트해진다는 것에 유의.
업캐스팅 : 하위 클래스에서 상위 클래스로 형변환. 묵시적으로 이루어짐. 이 경우에는 상위클래스에 정의된 변수, 메서드에만 접근이 가능. ex) 상위클래스변수 = new 하위클래스();
다운캐스팅 : 형변환이 된 상태에서(업캐스팅된 상태에서) 다시 원래의 데이터 타입으로 돌아가는것. 명시적
명시적 vs 묵시적
상위 클래스변수 = new 하위클래스(); // 묵시적
하위클래스변수 = (하위클래스)상위클래스변수; //명시적
다운 캐스팅
- 묵시적으로 상위 클래스로의 형변환된 인스턴스가 원래 자료형(하위 클래스)으로 변환되어야 할 때 다운캐스팅이라고함
- 업캐스팅된 상태에서는 하위클래스에만 정의되어있는 매개변수, 메서드에 접근이 불가함. 이에 접근하려면 다시 원래의 하위클래스타입으로 형변환이 이루어져야함 = 다운캐스팅
- 하위 클래스로의 형 변환은 명시적으로 되어야함.
- ex. Employee emp = new PartTimer(); PartTimer partTimer = (PartTimer) emp;
- 이 경우 캐스팅하려는 타입과 이를 받아주는 변수의 타입이 일치하는지만 확인.
instanceof
- true / false를 반환
- 변수 instanceof 클래스
- 변수가 클래스 타입의 인스턴스가 맞는지 확인
- Object타입으로 변환받아 원래형으로 변환할때 instance of 를 한번씩 해보는게 안정적
- 다운캐스팅 오류로 인해 프로그램이 죽는 것을 방지할 수 있음
타입캐스팅으로 처리할 수도 있지만 오버라이딩으로 하면 좀 더 flexible함.
오버라이딩으로 처리하기 어려울 경우 타입캐스팅으로 처리를 하되 안정성을 위하여 instanceof로 한번 체크를 해주기