자식 클래스가 부모 클래스의 기능을 그대로 물려받을 수 있는 기능
상위객체를 재사용해 하위객체를 빠르게 설계할 수 있도록 도와주고, 이미 잘 개발된 개체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드를 줄여줌
클래스 상속을 위해서 extends 라는 키워드 사용
부모의 필드 및 메소드를 상속 받으므로 아무런 구현을 하지 않아도 부모로부터 상속받은 필드와 메소드를 사용할 수 있다.
final 키워드는 클래스, 필드, 매소드 선언 시에 사용 할 수 있다. final 키워드는 해당 선언이 최종 상태이고 수정 할 수 없음을 나타낸다.
static final
내용이 더 이상 변경되지 않고 객체 생성이 되지 않도록 만듬
boolean result = 좌향(객체) instanceof 우향(타입)
객체 타입을 확인하는 연산자
주로 상속관계에서 부모객체인지 자식 객체인지 확인하는데 사용
객체지향개념에서 다향성이란 여러가지 타입을 한가지 타입으로 처리 할수 있는기술을 의미 하며, 자바에서는 한 타입의 참조변수로 여러타입의 객체를 함조 할 수 있음
부모클래스 타입의 참조 변수로 자식클래스의 인스턴스를 참조 할 수 있다 라는 의미
자식 클래스가 부모클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조변수
this와 반대개념
부모클래스의 생성자를 호출하는 메소드
상속받은 자식 클래스가 부모클래스의 멤버를 사용할 경우가 있을 수도 있으므로 부모클래스를 우선적으로 초기화 해줘야 한다.
부모클래스의 생성자는 자식클래스의 생성자 첫 줄에서 호출해준다
기본적으로 별도의 호출없이도 기본 생성자를 자동으로 호출해 주지만, 부모클래스의 생성자가 기본생성자가 아니라면 자동으로 추가되지 않으므로 super()로 추가해줘야한다
프로그램 전체에서 단 하나의 객체만 만들도록 보장해야하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤이라고 한다.
사용 이유
메모리 낭비를 방지할 수 있다
다른 클래스 간에 데이터 공유가 쉽다.
문제점
구현하는 코드가 복잡하다
멀티 스레딩 환경에서 발생할 수 있는 동시성 문제 해결을 위해 syncronized를 사용해야함
Singleton obj1 = Singleton.getSingleton();
public class Singleton {
String name;
int id;
private static Singleton singleton = new Singleton();
private Singleton() {
name = "test";
id = 100;
}
static Singleton getSingleton() {
return singleton;
}
}
# 추상클래스
## 추상클래스
하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 합니다
* 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해줍니다.
* 추상클래스를 상속받는 자식클래스들이 무조건 구현해내야 하는 특성을 가졌다.
abstract class 클래스이름 {
...
abstract 반환 타입 메소드이름();
...
}
## 추상메소드
자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미
추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함
# 인터페이스
* 다중상속 지원
* 인터페이스(interface)는 오로지 추상 메소드와 상수만을 포함
추상클래스와는 달리 인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소드는 public abstract이어야 합니다
## 디폴트 메소드(Default Method)
인터페이스에서는 구현부가 있는 메소드를 만들 수 없는 것이 기본적인 특징이나 예외적으로 디폴트 메소드를 만들 수 있다.
- 메서드 앞에 default 예약어를 붙인다.
- 구현부 { }가 있어야 한다.
# 다운캐스팅과 instanceof
상위 클래스형으로 변환되었던 하위 클래스를 다시 원래 자료형으로 변환하는 것
**intstanceof** = 형 변환 가능 여부를 확인하기 위함
if(ani instanceof Human)
Human h = (Human) ani;
h.readBook();
# 어노테이션
- 컴파일러에게 코드 문법의 에러를 체크하도록 정보를 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성 할 수 있도록 정보를 제공
- 실행 시 특정 기능을 실행하도록 정보를 제공 (Spring 프레임워클에서 Controller 기능 구현 시 사용 됩니다.)
## 종류
- 표준(내장)어노테이션 : 자바가 기본적으로 제공해주는 어노테이션
- 메타 어노테이션 : 어노테이션을 위한 어노테이션
- 사용자정의 어노테이션 : 사용자가 직접 정의하는 어노테이션
### 표준 어노테이션
- Override
- Deprecated
- FunctionalInterface
- SuppressWarnings