1. 추상 클래스 (abstract class)
: 추상 메소드를 가지고 있는 클래스
* 추상 메소드 : 메소드의 선언부만 있는 메소드 (구현이 되어 있지 않은 메소드). 메소드가 미완성이므로 추상 클래스로는 객체를 생성할 수 없다.
주로 상속 계층에서 추상적인 개념을 나타내기 위한 용도로 사용
public abstract void hello();
클래스 선언 시 abstract를 붙여 추상 클래스를 만들어준다.
추상 클래스를 상속받으면 추상 메소드를 구현하여야 한다.
2. 인터페이스
: 클래스 간의 유사성을 인코딩 할 때 사용된다. 추상 메소드들과 디폴트 메소드들로 이루어진다. 인터페이스 내에서 필드는 선언될 수 없으며, 상수는 정의 가능.
다른 클래스에 의하여 구현(implement)될 수 있음. 구현한다는 것은 인터페이스에 정의된 추상 메소드의 몸체를 정의한다는 것임.
2-1. 인터페이스 vs 추상 클래스
1) 추상 클래스 사용 권장하는 경우
- 관련된 클래스들 사이에서 코드를 공유하고 싶을 때
- 공통적인 필드나 메소드의 수가 많은 경우 or public 이외의 접근 지정자를 사용해야 하는 경우
- 일반 멤버 필드를 선언하기를 원할 때
2) 인터페이스 사용 권장하는 경우
- 관련 없는 클래스들이 동일한 동작을 구현하기를 원할 때
- 특정한 자료형의 동작을 지정하고 싶지만 누가 구현하든지 신경 쓸 필요가 없을 때
- 다중 상속이 필요할 때
2-2. 인터페이스를 정의하는 것 = 새로운 자료형을 정의하는 것.
인터페이스도 상속 가능
2-3. 인터페이스를 이용한 다중 상속
1) 동시에 여러 개의 인터페이스를 구현한다
2) 하나의 클래스를 상속받고 또 하나의 인터페이스를 구현한다
2-4. 상수 정의
자동적으로 public static final이 된다.
3. 디폴트 메소드
: 인터페이스 개발자가 메소드의 디폴트 구현을 제공할 수 있는 기능.
인터페이스 내부에 로직이 구현된 메소드를 구현할 수 있는 것
4. 정적 메소드
객체 변수 접근 불가능.
5. 팩토리 메소드
: 공장처럼 객체를 생성하는 정적 메소드. 객체를 만드는 부분을 부모 클래스에 위임하는 패턴
new를 호출하여서 객체를 생성하는 코드를 부모 클래스에 위임한다는 의미
6. 중첩 클래스
: 클래스 안에서 클래스를 정의하는 것
1) 정적 중첩 클래스
2) 비정적 중첩 클래스
- 내부 클래스 : 클래스의 멤버처럼 선언되는 중첩 클래스. 외부 클래스의 인스턴스 변수와 메소드를 전부 사용할 수 있다.
- 지역 클래스 : 메소드의 몸체 안에서 선언되는 중첩 클래스. 메소드 안에서만 사용 가능
- 익명 클래스 : 수식의 중간에서 선언되고 바로 객체화되는 클래스
6-1. 중첩 클래스를 사용하는 이유
: 내부 클래스는 외부 클래스의 private 멤버도 접근할 수 있기 때문
7. 익명 클래스
- 클래스 몸체는 정의되지만 이름이 없는 클래스
- 클래스를 정의하면서 동시에 객체를 생성
- 이름이 없기 때문에 한 번만 사용 가능
부모클래스 참조 변수 = new 부모클래스() {
// 클래스 구현
}
'4학기 > JAVA' 카테고리의 다른 글
[JAVA] chap06. 상속 (0) | 2022.11.15 |
---|---|
[Java] 생활코딩 - 패키지 (0) | 2022.08.06 |
[Java] 생활코딩 - 클래스 패스 (0) | 2022.08.06 |
[Java] 생활코딩 - overriding, overloading (0) | 2022.08.06 |
[Java] 생활코딩 - 상속 (0) | 2022.08.06 |