개발/Java

JAVA_12_추상 클래스 & 인터페이스

onivv 2024. 7. 16. 13:57
반응형

#1 추상 클래스 & 추상 메서드

▶ 추상 클래스란?

  • 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없음
  • 자식 클래스의 생성자에서 super()를 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체를 생성
  • 선언: [접근 제한자] abstract class 클래스명 {필드, 생성자, 메서드}
  • 자식 클래스들이 반드시 구현해야 하는 메서드가 있다면, 추상 메서드로 해당 메서드를 부모 클래스에 선언
  • 추상 클래스를 상속받은 모든 자식 클래스 반드시 추상 메서드를 오버라이딩 및 재정의하여 구현해야 함 
    • 자식 클래스 간의 공통적인 필드와 메서드 이름을 통일
    • 반드시 구현해야 하는 메서드를 선언함으로써 공통 규격을 제공

▶ 추상 메서드란?

  • 구현 내용 없이 구현부가 비어있는 메서드
  • 선언: [접근제한자] abstract 반환타입 메서드명(매개변수1,...);
  • 추상 메서드를 1개 이상 선언하면, 그 클래스는 추상 클래스로 선언되어야 함

 

#2 인터페이스 구현

  • 인터페이스: 모든 메서드가 추상 메서드, 상수로만 이루어짐
  • 어떤 형태로도 객체를 만들 수 없으므로 클래스라고 부를 수 없음
  • 별도의 필드와 생성자도 존재하지 않으며 필드 대신 상수를 선언해 사용
  • 선언: interface 키워드를 사용해 선언
[접근 제헌자] interface 인터페이스명 {
	public static final 자료형 상수명 = 값;
	접근 제한자 abstract 메서드명(매개변수1, ...)
}

 

< 상수 선언 >

  • public: 인터페이스는 다른 클래스들의 접근이 가능해야 하므로 public을 작성
  • static: 객체가 생성되지 않은 인터페이스라서, 내부 상수에 접근하려면 클래스 변수처럼 static으로 선언되어 메모리에 올라가 있어야 함
  • final: 상수를 의미하는 키워드
  • 상수명: 영문 대문자로 작성, 언더바(_) 사용

 

#3 인터페이스 사용

▶ 구현 클래스

  • 추상 클래스는 객체 생성을 할 수 없으므로 자신이 가진 추상 메서드를 구현해 줄 클래스를 작성해야 함
  • 선언: implements 키워드를 사용
  • 인터페이스를 구현하려면 모든 추상 메서드를 구현해야 함
  • 구현 클래스에서 추상 메서드를 구현할 때는 반드시 접근 제한자를 public으로 지정
[접근 제한자] class 클래스명 implements 인터페이스명 {
	// 필드
	// 생성자
	// 구현 메서드(추상 메서드 오버라이딩)
}

 

▶ 인터페이스 사용의 장점

  • 정보은닉: 실제 구현 클래스의 내용을 보지 않고도 개발 코드로 객체 사용 가능
  • 모듈화: 구현 클래스들이 독립적으로 구현되고 사용 가능, 개발 코드에서 객체 변경이 필요할 때, 개발 코드의 수정을 최소화할 수 있음

▶ 다중 인터페이스 구현

  • 하나의 클래스로 여러 개의 인터페이스 구현 가능
  • 단, 선언한 모든 인터페이스에 대한 추상 메서드를 모두 구현해야 함
[접근 제한자] class 클래스명 implements 인터페이스1, 인터페이스2, ... {
	// 필드
	// 생성자
	// 인터페이스1에 대한 구현 메서드(추상 메서드 오버라이딩)
	// 인터페이스2에 대한 구현 메서드(추상 메서드 오버라이딩)
}

 

 

#4 인터페이스 상속

  • 인터페이스끼리 상속 관계 만들 수 있음
  • extends 키워드를 사용
  • 다중 상속 가능하기에 콤마(,) 이용
[접근 제한자] interface 인터페이스명 extends 인터페이스1, 인터페이스2, ... {
	// 추상 메서드
}

 

반응형

'개발 > Java' 카테고리의 다른 글

JAVA_14_예외 처리  (1) 2024.07.16
JAVA_13_내부 클래스  (0) 2024.07.16
JAVA_11_다형성 & 타입 변환  (1) 2024.07.16
JAVA_10_상속  (0) 2024.07.16
JAVA_09_생성자  (0) 2024.07.15