2021.10.28(목)
🌿 개념
- '여러 개의 형태를 갖는다'는 의미
- 상속을 이용한 기술로, 부모 타입으로부터 파생된 여러 가지 타입의 자식 객체를 부모 클래스 타입 하나로 다룰 수 있는 기술
- 상위 타입으로 하위 타입의 객체를 사용할 수 있는 기술
🌱 Binding
- 다형성이 적용된 경우 메서드 오버라이딩이 되어 있으면, 정적으로 바인딩된 메서드 코드보다 오버라이딩된 메서드 코드를 우선적으로 수행 = 동적 바인딩
정적 바인딩 = 프로그램이 실행되기 전에 컴파일 되면서 모든 메서드는 정적 바인딩됨
동적 바인딩 = 컴파일 시 정적 바인딩된 메서드를 실행할 당시의 객체 타입을 기준으로 바인딩됨
🌱 활용
예시1) 상속 관계에 있는 하나의 부모 클래스 타입의 배열 공간에 여러 종류의 자식 클래스 객체를 저장할 수 있음
예시2) 메서드 호출 시 부모 타입의 변수 하나만 사용해 자식 타입의 객체를 받을 수 있음
static 관련 참고 설명
public class Desktop extends Electronic {
public static final String cpu = "intel"; // CPU는 반드시 intel을 사겠다 -> 이 변수는 변화시키지 않는 상수로 쓰겠다
// final -> static
// final
// final int 출근시간 = 9시; // 절대 바뀌면 안 됨; 고정
// final int 퇴근시간; // 18시, 19시, 22시 등 여러 가지 대입 가능
// 이런 변수는 stack 영역에 저장
// 인스턴스변수 @heap 영역 -> 객체 생성 시 마다 cpu라는 메모리 영역 생김
// static 영역(-> 프로그램 실행 중 언제든지 가져다 쓸 수 있음)에서 바뀌지 않는 값으로 사용하겠다
// static final, final static -> 메모리 static 영역에 들어감; 프로그램 실행 시 할당되어 종료 시까지 쓸 수 있음; 프로그램 실행 중에는 언제든지 가져다 쓸 수 있음
// 어차피 누구나 사용 가능하고 어차피 수정 불가능 -> public
// 프로그램 중에 하나의 값을 사용 -> 객체마다 메모리를 할당받아 사용(x) static에 하나 만들어놓고 필요할 때마다 사용(o) -> 메모리 절약 -> 관례적으로/암묵적인 약속에 따라 final 변수에는 static 붙임
// 환경설정 파일, 파일 경로 등 public static 씀
private int ram;
// ...
}
🌿 클래스 형 변환
- Upcasting
- Downcasting
🌿 instanceof 연산자
- 현재 참조형 변수가 어떤 클래스 타입의 객체 주소를 참조하고 있는지 확인할 때 사용
- 타입이 맞으면 true vs 안 맞으면 false 반환
if (레퍼런스 instanceof 클래스 타입) {
// true일 때 처리할 내용
}
📗 소감
- 상속 개념까지만 해도 직관적으로 이해가 되었는데, 다형성, 특히 up/downcasting은 처음에 이해하기 어려웠다. '부모의 것', '자식의 것'을 생각하며 무엇이 참조 가능하고 무엇이 불가능한지 익숙해져야겠다.
- 다형성을 왜 사용하는지 조금은 알게 된 것 같고, 객체 지향 프로그래밍의 중요 특징 중 하나라고 하는데, 어떻게 유용하게 활용할 수 있을지 궁금하다!
📗 homework: 상속(Point ← Circle, Rectangle)
(실습 파일 위치: 00Exercises > 00Exercises > src > com > kh > practice > pointv2)
'back-end dev > Java' 카테고리의 다른 글
[KH정보교육원] 15일차_평가 및 미니팀프로젝트 (0) | 2021.11.07 |
---|---|
[KH정보교육원] 14일차_추상클래스, 인터페이스, 예외처리 (0) | 2021.11.07 |
[KH정보교육원] 12일차_상속 (0) | 2021.11.07 |
[KH정보교육원] 11일차_클래스, 객체 배열 (0) | 2021.11.07 |
[KH정보교육원] 10일차_캡슐화, 클래스 (0) | 2021.11.07 |