카테고리 없음

Section#12 _ 추상 클래스와 인터페이스

Joyfullyever 2025. 1. 19. 17:21

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

#1-1. 추상 메서드 (abstract method)

: 선언부만 작성하고 구현부는 작성하지 않고 남겨둔 미완성 메서드

: abstract 키워드를 함께 포기해야함, 선언부 끝에 세미콜론(;) 사용

: 추상 메서드는 반드시 추상 클레스 안에 정의되어야 함 → 추상 메서드를 1개 이상 선언하면, 해당 클래스는 추상 클래스로 선언되어야 함

접근제한자 abstract 반환 타입 메서드 이름 (매개변수1, 매개변수2,...);

#1-2. 추상 클래스 (abstract class)

: 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없음

: 자식 클래스의 생성자에서 super()를 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체 생성

: 추상 클래스를 상속받은 모든 자식 클래스는 반드시 추상 메서드를 오버라이딩 및 재정의하여 구현

→ 하지 않을 시, 컴파일 에러 발생

접근제한자 abstract class 클래스 이름{
	// 필드
	// 생성자
	// 메서드 (추상 메서드 포함)
}

#1-3. 추상 클래스와 추상 메서드의 용도

: 자식 클래스 간의 공통적인 필드와 메서드 이름을 통일 가능

: 반드시 구현해야 하는 메서드를 선언함으로써 공통 규격을 제공

 

#2 인터페이스 구현 (interface)

: 추상 메서드와 상수로만 이루어짐

: 스스로 객체 생성 불가능

: 구현 클래스들의 기본 틀을 제공하면서, 다른 클래스 코드들과의 사이에서 중간 매개 역할

#2-1. 인터페이스 선언

: 어떠한 형태로도 객체 생성 불가능

: 필드와 생성자를 가지지 않음 → 객체를 생성할 수 없기에, 필드 값 수정 불가능 & 생성자 불필요

: 매개체 역할  누구나 접근할 수 있도록 public 접근제한자로 구현

접근제한자 interface 인터페이스 이름{
	...
	접근 제한자 abstract 메서드 이름(매개변수1, 매개변수2, ...)
	...
}

#2-2. 상수 선언

: 영문 대문자로 작성

: 2개 이상의 단어를 조합할 때는 언더바(_)로 연결

 

#3 인터페이스 사용

: 구현 클래스  인터페이스를 구현해주는 클래스

: implements(구현한다의 의미) 키워드를 사용하여 명시할 수 있음

: 구현 클래스에서 추상 메서드를 구현할 때는 반드시 접근 제한자를 public으로 지정

접근제한자 class 클래스 이름 implements 인터페이스 이름{
	// 필드
	// 생성자
	// 구현 메서드(추상 메서드 오버라이딩)
}

#3-1. 인터페이스 장점

1) 실제 구현 클래스의 내용을 보지 않고도 개발 코드로 객체를 사용 가능 → 정보 은닉

2) 구현 클래스들이 독립적으로 구현 & 사용 가능. 개발 코드에서 객체 변경이 필요할 때, 개발 코드 수정 최소화 → 모듈화

#3-2. 다중 인터페이스 구현

선언 방법 : implements 키워드 뒤 이름을 작성시, 콤마(,)를 이용해 여러 개를 붙여서 선언

→ 하지만, 선언한 모든 인터페이스에 대한 추상 메서드를 모두 구현

 

#4 인터페이스 상속

: 인터페이스끼리 상속 관계를 만들 수 있음

: extends 키워드를 사용하며, 다중 상속이 가능 → 콤마(,)를 이용해서 선언