📝 오늘의 강의 요약
핵심 키워드: 다형성(Polymorphism), 추상 클래스(Abstract), 인터페이스(Interface), CSS 애니메이션
- Java: 객체지향의 꽃인 다형성 원리와 미완성 설계도인 추상화 개념 정립
- Java: 추상 클래스와 인터페이스의 차이점 및 상황별 선택 기준 파악
- HTML/CSS: absolute 포지셔닝과 키프레임 기반의 슬라이드 애니메이션 실습
☕ Java 다형성 및 추상화
1. 다형성(Polymorphism)의 원리
- 개념: 하나의 객체가 여러 가지 타입을 가질 수 있는 성질
- 업캐스팅(Upcasting): 상위 클래스 타입의 참조 변수로 하위 객체를 참조하는 행위
- 동적 바인딩(Dynamic Binding): 런타임에 실제 객체의 오버라이딩된 메서드가 호출되는 메커니즘
- 접근 범위: 참조 변수의 타입(부모)에 정의된 멤버로 제한되나, 오버라이딩된 메서드는 자식의 것이 실행됨
- 강제 형변환(Downcasting): 업캐스팅된 변수를 다시 자식 타입으로 돌려 자식 고유 멤버에 접근하는 기법
2. 추상 클래스(Abstract Class)
- 목적: 하위 클래스에서 반드시 구현해야 할 기능을 규정하여 메서드 오버라이딩을 강제함
- 특징: abstract 키워드를 사용하며, 직접 객체 생성(인스턴스화) 불가
- 구성: 생성자, 필드, 일반 메서드, 추상 메서드, final 메서드 등 포함 가능
3. 인터페이스(Interface)
- 목적: 클래스가 따라야 할 '규칙' 또는 '계약'을 정의하여 다중 상속과 유사한 효과 제공
- 필드: 모든 필드는 암시적으로 public static final 상수임
- 메서드: 기본적으로 모든 메서드가 추상 메서드이나, Java 8 이후 default 및 static 메서드 추가 가능
- 특징: 클래스 간의 느슨한 결합(Loose Coupling)을 유도하여 유지보수성 향상
📊 추상 클래스 vs 인터페이스 비교
| 특징 |
추상 클래스 (Abstract Class) |
인터페이스 (Interface) |
| 상속/구현 키워드 |
extends |
implements |
| 다중 상속 여부 |
단일 상속만 가능 |
다중 구현 가능 |
| 변수(필드) |
인스턴스 변수, 정적 변수 모두 가능 |
오직 상수(static final)만 가능 |
| 메서드 구성 |
일반 메서드 + 추상 메서드 |
주로 추상 메서드 (default 가능) |
| 존재 목적 |
공통 기능 상속 및 확장 (IS-A) |
특정 기능 및 역할 부여 (CAN-DO) |
🎨 CSS 레이아웃 및 효과
1. 배경 및 포지션 속성
- background-size: cover: 이미지를 배경 영역에 꽉 차게 조절
- background-position: center: 배경 이미지를 중앙에 배치
- position: absolute: 기준이 되는 조상 요소를 근거로 자유로운 위치 지정
2. CSS 애니메이션 (Slider 예제)
- animation: slider 12s infinite linear 조합으로 무한 루프 효과 구현
- 가상 클래스 선택자: :hover를 활용한 투명도 및 커서 변화 제어
- 구조 선택자: nth-child, nth-of-type 등을 이용한 세밀한 요소 선택
🛠️ 실습 메모 및 복기
✅ Java 프로그래밍 수칙
- 지역 변수 초기화: 지역 변수는 사용 전 반드시 직접 초기화 수행 필수
- static 활용: 객체 생성 없이 클래스명으로 호출 가능 여부에 따른 멤버 분류
- 상속 관계: 하위 클래스는 상위 클래스를 참조할 수 없으나, 업캐스팅된 경우 강제 형변환으로 접근 가능
✅ 코드 예시 구조
- Animal 추상 클래스: 공통 동작인 breathe는 구현하고, 소리 내는 sound는 하위 클래스에 강제 위임
- Duck 클래스: Flyable, Swimmable 인터페이스를 다중 구현하여 비행과 수영 기능 동시 보유