상속(is-a)
- 기존 클래스의 자산(멤버)을 자식 클래스에서 재사용(생성자, 초기화 블록 제외)
- 부모 코드 변경 👉 자식에게도 영향
- 모든 클래스의 조상 클래스: Object
- 상속: is-a 관계
- 자바는 단일 상속
- 포함: has-a 관계
- 코드 절감
포함(has-a)
- 상속 이외에 클래스를 재활용하는 방법
- 멤버변수로 주로 포함
오버라이딩
- 조상 클래스에 정의된 메서드를 자식 클래스에서 적합하게 수정
- 조상 메서드를 자식에 적합하게 수정(자식꺼만 남음)
- 메서드 이름 동일
- 매개변수 개수, 타입, 순서가 같아야함
- 같은 리턴 타입
- 접근 제한: 부모와 같거나 넓게
- 조상보다 더 큰 예외 못던짐
Annotation
- 주석. 컴파일러, JVM, 프레임워크 등이 보는 주석
- 소스코드의 라벨. 메타 데이터
- this.: 자신의 멤버
- super.: 부모의 멤버
- this()와 super() 동시 사용 불가: 둘 다 첫줄에 위치
toString()
equals()
hashCode()
- 시스템에서 객체를 구별하기 위해 사용되는 정수 값
super 키워드
- this를 통해 멤버에 접근했듯 super를 통해 조상 클래스 멤버에 접근
- super.을 통해 조상 메서드 호출
변수 호출 순서
- 지역 변수 → 해당 클래스 멤버 변수 → 조상 클래스 멤버 변수
super()
- 조상 클래스의 생성자 호출
- 생성자 첫 줄에 위치해야함
import
제한자(modifier)
- 클래스, 변수, 메서드 선언부에 함께 사용되어 부가적 의미 부여
- 접근제한자: public, protected, default, private
final: 마지막. 더 이상 바뀔 수 없음
final class: 상속 방지 👉 오버라이딩 방지
final method: 오버라이딩 방지
final variable: 더 이상 바꿀 수 X
캡슐화
- private으로 변수 접근 막음
- getter/setter 생성
생성자
- 인스턴스 변수 초기화. 강제 호출 불가. 상속되지 않음
- 부모 클래스: 공통을 만듦
- extends: 확장
- this: 객체의 주소를 가짐. 각 메서드마다 this가 전달됨
싱글톤
- 객체를 하나만 생성 👉 수정 가능한 멤버가 없고, 기능만 있는 경우(stateless)
- 외부에서 생성자 접근을 막음 → 생성자를 private으로
- getInstance() 등의 getter 메서드로 외부에서 객체를 받을 수 있도록 처리
- 객체 생성 없이 접근을 가능하게 하기 위해 getter 메서드와 클래스 내부에 생성된 멤버 변수를 static으로 설정
- 외부에서는 언제나 getter를 통해 객체를 참조하므로 하나의 객체를 재사용
다형성
- 하나의 객체가 많은 형을 가질 수 있는 성질
- 조상 클래스의 타입으로 자식 클래스 객체를 참조
- 활용1: 다른 타입의 객체를 다루는 배열
- 활용2: 매개변수의 다형성
- 형변환: instanceof 를 통해 타입을 확인한 후.