티스토리 뷰
다형적 참조
부모타입은 모든 자식타입을 참조할 수 있다.(*자식의 메소드는 참조 불가, 상속관계는 부모방향으로 찾아 올라갈 수는 있지만, 자식으로 찾아갈 수는 없다.)
ex1) Parent poly = new Child() //부모변수가 자식인스터스 참조
그렇다면 부모타입으로 자식 메모리의 메소드를 호출하고자 하면 어떻게 해야하나?
--> "다운캐스팅"
Child child = (Child) poly // 부모타입 --> 자식타입
* ()괄호로 참조대상을 특정타입으로 변경하는 것을 Casting 이라고 한다.
다운캐스팅 안 되는 조건 : 객체가 부모객체일 경우(자식인스턴스가 메모리에 생성 안 돼서)
업캐스팅이 안전하고 다운캐스팅이 위험한 이유
자식 객체 생성시, 부모 객체들도 같이 메모리상에 올리기 떄문에 업캐스팅 보다 다운캐스팅이 위험한다(업캐스팅은 컴파일 에러로 즉시 IDE에서 확인 하는 좋은 오류이지만, 강제 다운캐스팅의 경우, 해당 객체가 없는 데 호출하면 Runtime 오류가 발생하기 떄문에, 프로그램이 실행되다가 발생함)
--> 따라서 instanceof로 분기처리 후에, 사용하는 것이 좋겠다.
오버라이딩
오버라이딩 된 메소드는 항상 우선권을 갖는다!! 이 기능 때문에 하위 타입의 메소드를 호출할 수 있다.
# 객체지향 프로그램이란 (유연하고 변경이 용이한 프로그램)
- 역할과 구현을 분리하라 : 역할 = 인터페이스 ,구현= 인터페이스 구현한 클래스, 객체
- 객체의 협력이라는 관계부터 생각 : 객체는 서로 서버가 되기도 하고 클라이언트 역할이 되기도 한다
# OCP (Open-Closed Priciple) 원칙
- 기존의 코드는 변경되지 않는다! (클라이언트의 코드는 변경되지 않는다. Closed for modification)
- 새로운 변경사항이 생겼을 때, 기존 코드는 확장할 수 있어야 한다!(main과 같이 새로운 객체를 생성하듯 Open for extension)
전략패턴(Strategy Pattern)
- 클라이언트 코드의 변경 없이 교체 가능하게 설계한 패턴(interface 설계가 중요!)
- Total
- Today
- Yesterday
- 부트스트랩 템플릿 사용시 충돌
- Java
- Netlify #CICD
- SSAFY 6기
- vue정리
- Optinal Chaining
- gc란 뭘까
- #web /was 구분이유
- 퍼블리싱 #앱에서 DB바로 안붙이는 이유
- Property or method "" is not defined
- 스프링 동작흐름
- 알고리즘 나머지연산
- 나머지연산 분배법칙
- safe operator
- vue 특징
- SQLD 후기
- 스프링 동작흐름 #ioc #di #dispatcherservlet
- 프로시저 #배치 #스케쥴러 #잡 #바인딩변수
- JAVA설치 #JDK #JRE
- java garbage collector 기본
- Prim vs Dijkstra
- 청년 버팀목 대출
- java gc
- gc 기본 동작 원리
- 왜 트랜스지방은 살 찜
- 원자 원소 분자 차이점
- 버팀목 국민은행
- git branch strategy
- java 김영한 강의 #2chapter
- 스프링 기본 구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |