📝 오늘의 강의 요약
핵심 키워드: 다형성(Polymorphism), 업캐스팅/다운캐스팅, 접근 제어자, 생성자 체이닝, final 키워드
- Java: 객체지향의 꽃이라 불리는 다형성의 원리와 실무 적용법 학습
- Java: 클래스 구성 요소 재정립 및 상속 관계에서의 메모리 동작 방식 이해
- 학습 목표: 부모 타입으로 자식 객체를 제어하는 업캐스팅과 동적 바인딩 원리 파악
☕ Java 클래스 및 상속 복기
1. 클래스 구성 및 접근 제어
- 클래스 구성: 멤버변수(필드), 메소드, 생성자, Getter/Setter로 구성
- private 멤버 접근: 캡슐화를 위해 필드는 숨기고, 생성자나 public Getter/Setter를 통해 간접 접근
- 디폴트 생성자: 명시적 생성자가 없을 때만 컴파일러가 자동 생성 (하나라도 정의 시 생성되지 않음)
- 변수 유형 비교:
- 정적(static) 변수: 클래스당 하나, 모든 인스턴스가 공유하는 공유 메모리
- 인스턴스 변수: 객체마다 별도 생성되는 고유 데이터
2. 키워드 핵심 기능 (this vs super)
| 키워드 |
주요 기능 1 |
주요 기능 2 |
| this |
현재 객체(인스턴스) 자신을 참조 |
this(): 다른 생성자 호출 (생성자 체이닝) |
| super |
부모 클래스의 멤버(필드/메소드) 참조 |
super(): 부모 클래스의 생성자 호출 |
3. 접근 제어자 가시성 범위
- 순서: public > protected > (default) > private
- protected 특이사항: 같은 패키지 내에서는 자유로우며, 다른 패키지라도 상속 관계라면 접근 허용
🎭 객체지향의 핵심: 다형성(Polymorphism)
1. 다형성의 정의
- 하나의 객체가 여러 가지 타입을 가질 수 있는 성질
- 부모 타입의 참조 변수로 자식 타입의 객체를 가리키는 것 (업캐스팅)
2. 다형성의 실행 규칙
- 메소드 호출: 부모 타입으로 선언했어도 오버라이딩된 메소드가 있다면 실체 객체(자식)의 메소드가 호출됨 (동적 바인딩)
- 필드 접근: 멤버 변수는 오버라이딩되지 않으므로 참조 변수의 타입에 정의된 필드에 접근
- 범위 제한: 부모 타입 참조 변수로는 부모 클래스에 정의된 멤버만 접근 가능 (자식 고유 멤버는 접근 불가)
3. 형변환 (Casting)
- 업캐스팅 (Upcasting): 자식 타입을 부모 타입으로 변환 (자동 형변환 가능, 안전함)
- 다운캐스팅 (Downcasting): 부모 타입을 자식 타입으로 변환 (강제 형변환 필요, instanceof로 타입 확인 권장)
🔒 final 키워드 활용
- final 변수: 값을 한 번 정하면 변경할 수 없는 상수
- final 메소드: 자식 클래스에서 오버라이딩(재정의) 불가
- final 클래스: 더 이상 상속할 수 없는 최종 클래스 (예: String 클래스)
🗂️ 요약 및 메모
- 클래스 선언 시 주의: 최상위 클래스는 public 혹은 default만 사용 가능
- 메소드 선언 시: 4가지 접근 제어자 모두 사용 가능하여 세밀한 가시성 제어 필요
- 객체지향 설계: 상속은 단순 코드 재사용이 아닌 IS-A 관계의 계층적 분류가 목적이어야 함